更新时间:2020-12-11 21:17
1.创建MaxCompute表
DataHub支持将数据同步到MaxCompute对应的数据表中,同时支持分区表和非分区表,一般情况下推荐用户使用分区表进行数据同步以方便MaxCompute数据处理
目前DataHub支持将TUPLE和BLOB的数据同步到MaxCompute数据表中
1)针对TUPLE类型topic,MaxCompute目标表数据类型需要和DataHub数据类型相匹配,具体的数据类型映射关系如下:
MaxCompute | DataHub |
---|---|
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INT | INTEGER |
BIGINT | BIGINT |
STRING / CHAR / VARCHR | STRING (若ODPS类型有长度限制则直接截断) |
BOOLEAN | BOOLEAN |
FLOAT | FLOAT |
DOUBLE | DOUBLE |
DATETIME / TIMESTAMP | TIMESTAMP (默认按微秒换算,可配置) |
DECIMAL / DECIMAL2.0 | DECIMAL |
MAP | 不支持 |
ARRAY | 不支持 |
由于目前DataHub并不能完全支持MaxCompute所有的数据类型,请用户尽量根据DataHub数据类型创建MaxCompute表结构。
DataHub 中的 TINYINT , SMALLINT , INTEGER , FLOAT 类型从 java sdk 2.16.1-public 开始支持。
2)针对BLOB数据类型,需要要求MaxCompute表结构仅需要包含一列STRING类型的column即可,DataHub默认会将数据同步到该column中
DataHub | MaxCompute |
---|---|
BLOB | STRING |
3)同时为了方便数据追踪和问题排查,建议用户在创建MaxCompute表结构时,增加一列__rowkey__ STRING
字段,DataHub会自动将DataHub对应数据的trace信息同步到该列中,以方便后续数据排查。
2.准备同步任务账号并授权
1)新建同步MaxCompute任务时,需要用户手动填写访问MaxCompute表的账号信息,请用户确保填入有效的账号信息(一般情况下采用MaxCompute子账号即可)。
2)需要给该账号授予访问MaxCompute表的响应权限,具体权限包括CreateInstance
、Describe
、Alter
以及Update
权限。
用户可以使用DataWorks管控台进行MaxCompute对应表的权限管理,参考MaxCompute高级配置,也可以选择使用MaxCompute的命令行工具进行授权,参考MaxCompute用户及授权管理。
注意事项
1.同步MaxCompute强烈建议分区表,由于MaxCompute目前的写入标准原因,分区数越多就会导致DataHub同步数据越慢。因此,在创建MaxCompute同步任务时,请尽可能的控制分区数,尤其是USER_DEFINE同步模式。
项目列表/Project详情/Topic详情
页面+ 同步
按钮进行同步任务创建
部分配置说明:
下面罗列了部分管控台创建同步任务的配置说明,更多更灵活的操作请参考SDK使用。
分区模式 | 分区依据 | 支持Topic类型 | 说明 |
---|---|---|---|
USER_DEFINE | Record中的分区列(和MaxCompute的分区字段同名)的value值 | TUPLE | (1). DataHub schema中必须包含MaxCompute分区字段 (2). 该列值必须为非空UTF8字符串 |
SYSTEM_TIME | Record写入DataHub的时间 | TUPLE / BLOB | (1). 分区配置中设置MaxCompute分区的时间转换Format格式 (2). 设置时区信息 |
EVENT_TIME | Record中的event_time(TIMESTAMP) 列的value值 |
TUPLE | (1). 分区配置中设置MaxCompute分区的时间转换Format格式 (2). 设置时区信息 |
META_TIME | Record的属性字段__dh_meta_time__ 的value值 |
TUPLE / BLOB | (1). 分区配置中设置MaxCompute分区的时间转换Format格式 (2). 设置时区信息 |
METATIME分区就是通过Record数据中的 attribute属性中的_dh_meta_time值进行Maxcompute分区的划分
SYSTEM_TIME
、EVENT_TIME
和META_TIME
均是根据时间Timestamp和时区配置来进行MaxCompute分区的转换过程,单位为微秒
分区 | 时间Format | 说明 |
---|---|---|
ds | %Y%m%d | day |
hh | %H | hour |
mm | %M | minute |
15分钟 ~ 1440分钟(1天)
,跳变间隔15分钟
。0A
表示\n(换行符)
可以点击对应connector的详情页面查看同步任务的运行状态和点位等信息, 包含同步点位、同步状态以及重启和停止等操作,如下图所示:
首先建立MaxCompute分区表,分区key分别是ds、hh、mm(用户可以根据需要设置)
CREATE TABLE IF NOT EXISTS datahub_dev.test_sink_odps_user_define(f1 STRING,f2 BIGINT) PARTITIONED BY (ds STRING,hh STRING,mm STRING) STORED AS ALIORC;
建立DataHub Topic
备注: topic schema中必须需要包含MaxCompute分区字段,类型为STRING,如下图所示:
MaxCompute分组字段所对应的value
将DataHub中的数据同步到对应的分区中。首先建立MaxCompute分区表,这里分区key分别是ds、hh(管控台目前默认采用ds/hh/mm的固定分区字段)
CREATE TABLE IF NOT EXISTS datahub_dev.test_sink_odps_user_define(f1 STRING,f2 BIGINT) PARTITIONED BY (ds STRING,hh STRING) STORED AS ALIORC;
建立DataHub Topic
备注: 由于分区是根据写入DataHub时间来计算的,因此topic schema只需包含数据字段,不需要包含分区字段,如下图所示:
2020-03-04 18:40:56
,数据内容如下所示:数据写入DataHub的时间
将DataHub中的数据同步到对应的分区中。
在文档使用中是否遇到以下问题
更多建议
匿名提交