用于将数据加载到红移的singer.io目标
target-redshift的Python项目详细描述
目标红移
a歌手红移目标,用于歌手点击生成的歌手流。
功能
- 为singer流创建SQL表
- 将对象展平到父对象的表中
- 将行放入单独的表中
- 在将新字段添加到流中时添加列和子表
- 通过记录
版本
和激活版本
消息进行全流复制。
安装
pip install target-redshift
用法
跟随 singer.io最佳实践 设置单独的
tap
和target
virtualenvs以避免版本 冲突。在以下位置创建配置文件
~/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"}}
~/.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
默认列长度
["整数","空"]
1000
目标3
["对象"]
n/a
s3
s3 config.json
<表><广告>aws_access_key_id
["string"]
n/a
aws_secret_access_键
["string"]
n/a
桶
["string"]
n/a
键前缀
["string","null"]
""
已知限制
- 忽略
状态
歌手消息。
- 每个流都需要一个json模式。
- 只有字符串,日期时间格式的字符串,整数,数字,布尔值,
支持对象和具有或不具有空值的数组类型。阵列CAN
列出任何其他类型,包括
项目。
- 工作的json模式类型示例
['number']
['string']
['string','null']
- 不起作用的json模式类型的exmaple
['string','integer']
['integer','number']
['any']
['null']
- 工作的json模式类型示例
- 不支持json模式组合,如
anyof
和allof
。 - 部分支持JSON架构$ref:
- 注意:以下限制已知不会优雅地失败
- 现在不能有任何循环或递归
$ref
s $ref
s必须存在于架构中:- 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
文件(它已经被.gitignore
d了,所以不要担心会意外地转移它)。
其中,请填写以下信息:
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-redshift0
赞助
目标红移由Data Mill(Data Mill Services,LLC)赞助。
数据工厂帮助企业利用现代数据基础设施和数据科学为分析、产品和服务提供动力。
版权所有Data Mill Services,LLC 2018