用于将数据加载到红移的singer.io目标

target-redshift的Python项目详细描述


目标红移

circleci

pypi version

 src=

a歌手红移目标,用于歌手点击生成的歌手流。

功能

  • singer流创建SQL表
  • 将对象展平到父对象的表中
  • 将行放入单独的表中
  • 在将新字段添加到流中时添加列和子表
  • 通过记录版本激活版本消息进行全流复制。

安装

pip install target-redshift

用法

  1. 跟随 singer.io最佳实践 设置单独的taptargetvirtualenvs以避免版本 冲突。

  2. 在以下位置创建配置文件 ~/singer.io/target_redshift_config.json带redshift连接 信息和目标红移模式。

    {"redshift_host":"aws.something.or.other","redshift_port":5439,"redshift_database":"my_analytics","redshift_username":"myuser","redshift_password":"1234","redshift_schema":"mytapname","default_column_length":1000,"target_s3":{"aws_access_key_id":"AKIA...","aws_secret_access_key":"supersecret","bucket":"target_redshift_staging","key_prefix":"__tmp"}}
  3. 对a歌手运行目标红移

    ~/.virtualenvs/tap-something/bin/tap-something \| ~/.virtualenvs/target-redshift/bin/target-redshift \
        --config ~/singer.io/target_redshift_config.json
    

配置json

已指定配置文件中可指定的字段 这里,

<表><广告>字段键入默认值 详细信息 < /广告><正文>红移主机["string"]n/a红移端口["整数","空"]5432红移数据库["string"]n/a红移用户名["string"]n/a红移密码["string"]n/a红移模式["string","null"]"公共"检测到无效记录 ["boolean","null"]true在配置中包括false以禁用target redshift对无效记录的崩溃 无效记录阈值["整数","空"]0在配置中包含一个正值n,以允许在放弃之前每个流最多遇到n无效记录。禁用收藏["string","null"]false在配置中包含true以禁用l="nofollow">歌手使用记录日志记录级别["string","null"]"信息"日志记录的级别。设置为debug以获取执行的查询、这些查询的计时等信息。有关有效值的信息,请参见python的记录器级别持久化空表["boolean","null"]false目标是否应创建远程中不存在记录的表。默认列长度["整数","空"]1000VARCHAR(字符变化)类型的所有列都将具有此长度。范围:1-65535。目标3["对象"]n/a参见下面的s3

s3 config.json

<表><广告>字段键入默认值 详细信息 < /广告><正文>aws_access_key_id["string"]n/aaws_secret_access_键["string"]n/a["string"]n/a应将暂存文件上载到的存储桶。键前缀["string","null"]""用于暂存文件上载的前缀,以便更好地描述tmp文件

已知限制

  • 忽略状态歌手消息。
  • 每个流都需要一个json模式。
  • 只有字符串,日期时间格式的字符串,整数,数字,布尔值, 支持对象和具有或不具有空值的数组类型。阵列CAN 列出任何其他类型,包括 项目。
    • 工作的json模式类型示例
      • ['number']
      • ['string']
      • ['string','null']
    • 不起作用的json模式类型的exmaple
      • ['string','integer']
      • ['integer','number']
      • ['any']
      • ['null']
  • 不支持json模式组合,如anyofallof
  • 部分支持JSON架构$ref:
    • 注意:以下限制已知不会优雅地失败
    • 现在不能有任何循环或递归$refs
    • $refs必须存在于架构中:
      • uri不工作
      • 如果$ref被破坏,则认为该行为是意外的
  • 任何值都是字符串null将作为文本null流式传输到redshift
  • 表名限制为:
    • 长度为127个字符
    • 只能由、小写字母、数字、$
    • 组成
    • 不能以$
    • 开头
    • ASCII字符
  • 字段/列名限制为:
    • 长度为127个字符
    • ASCII字符
  • 字段/列都可以为空
  • 字段/列使用默认值1000个字符(以便能够处理大量列)。

使用记录

singer.io需要官方点击和目标来收集匿名使用数据助教。此数据仅用于汇总报告单个点击/目标以及整个歌手社区。记录IP地址以检测唯一的TAP/目标用户,但不与第三方共享。

要禁用匿名数据收集,请在配置json文件中将禁用收集设置为true

开发

target redshift利用包的setup.py设置 管理,以及用于测试的pytestpytest

码头工人

如果您已经安装了docker和docker compose,您可以 轻松运行以下命令以快速设置本地env。

首先,确保在这个repo的根目录中创建一个env file" rel="nofollow">.env文件(它已经被.gitignored了,所以不要担心会意外地转移它)。

其中,请填写以下信息:

REDSHIFT_HOST='<your-host-name>'# Most likely 'localhost'REDSHIFT_DATABASE='<your-db-name>'# Most likely 'dev'REDSHIFT_SCHEMA='<your-schema-name>'# Probably 'public'REDSHIFT_PORT='<your-port>'# Probably 5439REDSHIFT_USERNAME='<your-user-name'REDSHIFT_PASSWORD='<your-password>'DEFAULT_COLUMN_LENGTH='<your-default-column-length>'TARGET_S3_AWS_ACCESS_KEY_ID='<AKIA...>'TARGET_S3_AWS_SECRET_ACCESS_KEY='<secret>'TARGET_S3_BUCKET='<bucket-string>'TARGET_S3_KEY_PREFIX='<some-string>'# We use 'target_redshift_test'
$ docker-compose up -d --build
$ docker logs -tf target-redshift_target-redshift_1 # You container names might differ

当您看到info:dev environment ready.时,您就可以进入容器并开始运行测试命令:

$ docker exec -it target-redshift_target-redshift_1 bash # Your container names might differ
root@... $ source /code/venv--target-redshift/bin/activate
root@... $ pytest

请参阅下面的pytest命令!

>

要运行测试,您需要运行一个实际的redshift集群,以及一个用户:

  • 能够在其中创建模式

    • 如果希望运行多个版本的测试(类似于 如何通过改变redshift模式来运行ci测试
  • 可以访问公共模式模式

    • 如果redshift_schema被视为字符串"public",则测试将忽略创建和删除schema
    • 将数据库数据库上的create授予用户的情况下,通常首选此设置; 被认为风险太大

确保为pytest设置以下env vars

$ EXPORT REDSHIFT_HOST='<your-host-name>'# Most likely 'localhost'
$ EXPORT REDSHIFT_DATABASE='<your-db-name>'# Most likely 'dev'
$ EXPORT REDSHIFT_SCHEMA='<your-schema-name>'# Probably 'public'
$ EXPORT REDSHIFT_PORT='<your-port>'# Probably 5439
$ EXPORT REDSHIFT_USERNAME='<your-user-name'
$ EXPORT REDSHIFT_PASSWORD='<your-password>'# Redshift requires passwords
$ EXPORT DEFAULT_COLUMN_LENGTH='<your-default-column-length>'

S3

要运行测试,您需要一个可用的实际的s3存储桶。

确保为pytest设置以下env vars

$ EXPORT TARGET_S3_AWS_ACCESS_KEY_ID='<AKIA...>'
$ EXPORT TARGET_S3_AWS_SECRET_ACCESS_KEY='<secret>'
$ EXPORT TARGET_S3_BUCKET='<bucket-string>'
$ EXPORT TARGET_S3_KEY_PREFIX='<some-string>'# We use 'target_redshift_test'

pytest

要运行测试,请尝试:

$ python setup.py pytest

如果您已经将bash放入docker compose容器中(参见上文),您应该能够简单地使用:

pip install target-redshift
0

赞助

目标红移由Data Mill(Data Mill Services,LLC)赞助。

数据工厂帮助企业利用现代数据基础设施和数据科学为分析、产品和服务提供动力。


版权所有Data Mill Services,LLC 2018

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓在java中加入字符串组以创建复合字符串   java系统甚至不点击“下一步”或“上一步”按钮就将我返回到上一页,而不是进入下一页   java如何在arrayList中获取特定列的不同值   CXF GZIP REST JAVA   Java:使用大量半恒定标志检查优化循环中的循环?   java如何在两个应用程序之间进行会话管理?   java SVG文件使用蜡染(但没有轴线)转换为PNG   使用协议缓冲区和内部数据模型的java   java如何在logtag 安卓中打印和查看字符串的值   javascript如何在NodeJs中应用Java/Spring的分层架构?   java Spring URL在JSP中编码不正确   模式对话框后面的java工具提示   java WSRPC生成日历对象而不是日期   在对象外部无法识别类变量   java将图像从文件读/写到BuffereImage的最快方法?   JavaSpring数据存储库对具有不同Id的子类使用抽象超类   安全在Java 5.0上运行web应用程序服务器有危险吗?