本文为您介绍MaxCompute Writer支持的数据类型、字段映射和数据源等参数及配置示例。
前提条件
开始配置MaxCompute Writer插件前,请首先配置好数据源,详情请参见配置MaxCompute数据源。
背景信息
MaxCompute Writer插件用于实现向MaxCompute中插入或更新数据,主要适用于开发者将业务数据导入MaxCompute,适合于TB、GB等数量级的数据传输。MaxCompute的详情请参见什么是MaxCompute。
在底层实现上,您可以根据配置的源头项目、表、分区、字段等信息,通过Tunnel写入数据至MaxCompute。常用的Tunnel命令请参见Tunnel命令。
对于MySQL、MaxCompute等强Schema类型的存储,数据集成会逐步读取源数据至内存中,并根据目的端数据源的类型,将源头数据转换为目的端对应的格式,写入目的端存储。
支持的字段类型
支持MaxCompute的1.0数据类型、2.0数据类型、Hive兼容数据类型。不同数据类型版本支持的字段类型详情如下。
1.0数据类型支持的字段
字段类型 | 离线读 | 离线写 | 实时写 |
---|---|---|---|
BIGINT | 支持 | 支持 | 支持 |
DOUBLE | 支持 | 支持 | 支持 |
DECIMAL | 支持 | 支持 | 支持 |
STRING | 支持 | 支持 | 支持 |
DATETIME | 支持 | 支持 | 支持 |
BOOLEAN | 支持 | 支持 | 支持 |
ARRAY | 支持 | 支持 | 支持 |
MAP | 支持 | 支持 | 支持 |
STRUCT | 支持 | 支持 | 支持 |
2.0数据类型、Hive兼容数据类型支持的字段
字段类型 | 离线读(MaxCompute Reader) | 离线写(MaxCompute Writer) | 实时写 |
---|---|---|---|
TINYINT | 支持 | 支持 | 支持 |
SMALLINT | 支持 | 支持 | 支持 |
INT | 支持 | 支持 | 支持 |
BIGINT | 支持 | 支持 | 支持 |
BINARY | 支持 | 支持 | 支持 |
FLOAT | 支持 | 支持 | 支持 |
DOUBLE | 支持 | 支持 | 支持 |
DECIMAL(pecision,scale) | 支持 | 支持 | 支持 |
VARCHAR(n) | 支持 | 支持 | 支持 |
CHAR(n) | 不支持 | 支持 | 支持 |
STRING | 支持 | 支持 | 支持 |
DATE | 支持 | 支持 | 支持 |
DATETIME | 支持 | 支持 | 支持 |
TIMESTAMP | 支持 | 支持 | 支持 |
BOOLEAN | 支持 | 支持 | 支持 |
ARRAY | 支持 | 支持 | 支持 |
MAP | 支持 | 支持 | 支持 |
STRUCT | 支持 | 支持 | 支持 |
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
datasource | 数据源名称,脚本模式支持添加数据源,该配置项填写的内容必须与添加的数据源名称保持一致。 | 是 | 无 |
table | 写入的数据表的表名称(大小写不敏感),不支持填写多张表。 | 是 | 无 |
partition | 需要写入数据表的分区信息,必须指定到最后一级分区。例如把数据写入一个三级分区表,必须配置到最后一级分区,例如pt=20150101, type=1, biz=2 :
|
如果表为分区表,则必填。如果表为非分区表,则不能填写。 | 无 |
column | 需要导入的字段列表。当导入全部字段时,可以配置为"column": ["*"] 。当需要插入部分MaxCompute列,则填写部分列,例如"column": ["id","name"] :
|
是 | 无 |
truncate | 通过配置"truncate": "true" 保证写入的幂等性。即当出现写入失败再次运行时,MaxCompute Writer将清理前述数据,并导入新数据,可以保证每次重跑之后的数据都保持一致 。
因为利用MaxCompute SQL进行数据清理工作,SQL无法保证原子性,所以truncate选项不是原子操作。当多个任务同时向一个Table或Partition清理分区时,可能出现并发时序问题,请务必注意。 针对该类问题,建议您尽量不要多个作业DDL同时操作同一个分区,或者在多个并发作业启动前,提前创建分区。 |
是 | 无 |
向导开发介绍
- 选择数据源。
配置同步任务的数据来源和数据去向。
参数 描述 数据源 即上述参数说明中的datasource,通常填写您配置的数据源名称。 表 即上述参数说明中的table。如果为分区表,需要配置写入的分区,分区配置可结合调度参数使用,调度参数使用功能详情可参考文档:调度参数概述。 清理规则 清理规则包括: - 写入前清理已有数据:导数据之前,清空表或者分区的所有数据,相当于
insert overwrite
。 - 写入前保留已有数据:导数据之前,不清理任何数据,每次运行数据均为追加的数据,相当于
insert into
。
说明- MaxCompute通过Tunnel服务读取数据,同步任务本身不支持数据过滤,需要读取某一个表或分区内的数据。
- MaxCompute通过Tunnel服务写出数据,未使用MaxCompute的Insert SQL语句写出数据。数据同步任务执行成功后,完整数据才可以对表可见。请注意配置任务的依赖关系。
空字符串作为null 设置是否允许空字符串作为null。 同步完成才可见 从数据写入开始到数据写入完成是一完整过程。您可以选择是否开启同步完成可见。 说明 开启了分布式处理能力的任务,该功能的配置将不生效。- 当选择是:仅当同步任务执行完成,新同步到MaxCompute的数据才能被查询到。
说明 同步完成可见可支持的最大数据量为1TB,当数据存在严重倾斜时无法保证达到此同步上限。
- 当选择否:同步任务运行过程中,即有部分新同步到MaxCompute的数据可以被查询到。
说明 分区自动创建、数据清理动作为数据同步的前置操作,不包含在此写入过程中,因此无论是否开启同步完成可见,您都可能在同步任务运行过程中看到自动创建的分区,或已经完成数据清理的表或分区。我们不建议您使用分区是否存在、数据条数是否为0作为数据同步任务完成的依据。如果希望判断同步任务是否结束,建议使用调度依赖为同步任务添加下游依赖的MaxCompute SQL节点,节点中创建特定的MaxCompute表或分区,您可以根据特定的表或分区是否存在来判断同步任务是否完成。 - 写入前清理已有数据:导数据之前,清空表或者分区的所有数据,相当于
- 字段映射,即上述参数说明中的column。左侧的源头表字段和右侧的目标表字段为一一对应的关系。
参数 描述 同名映射 单击同名映射,可以根据名称建立相应的映射关系,请注意匹配数据类型。 同行映射 单击同行映射,可以在同行建立相应的映射关系,请注意匹配数据类型。 取消映射 单击取消映射,可以取消建立的映射关系。 自动排版 可以根据相应的规律自动排版。 - 通道控制。
参数 描述 任务期望最大并发数 数据同步任务内,可以从源并行读取或并行写入数据存储端的最大线程数。向导模式通过界面化配置并发数,指定任务所使用的并行度。 同步速率 设置同步速率可以保护读取端数据库,以避免抽取速度过大,给源库造成太大的压力。同步速率建议限流,结合源库的配置,请合理配置抽取速率。 错误记录数 错误记录数,表示脏数据的最大容忍条数。 分布式处理能力 数据同步时,可以将任务切片分散到多台执行节点上并发执行,提高同步速率。该模式下,配置较大任务并发数会增加数据存储访问压力,如需使用该功能,请提前评估数据存储的访问负载。该功能仅支持在独享数据集成资源组配置,详情请参见独享数据集成资源组和新增和使用独享数据集成资源组。
脚本开发介绍
使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务。
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"odps",//插件名。
"parameter":{
"partition":"",//分区信息。
"truncate":true,//清理规则。
"compress":false,//是否压缩。
"datasource":"odps_first",//数据源名。
"column": [//源端列名。
"id",
"name",
"age",
"sex",
"salary",
"interest"
],
"emptyAsNull":false,//空字符串是否作为null。
"table":""//表名。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//错误记录数,表示脏数据的最大容忍条数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1, //作业并发数。
"mbps":"12"//限流
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
"datasource":"",
替换为数据源的具体参数,示例如下。"accessId":"<yourAccessKeyId>",
"accessKey":"<yourAccessKeySecret>",
"endpoint":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api",
"odpsServer":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api",
"tunnelServer":"http://dt.eu-central-1.maxcompute.aliyun.com",
"project":"**********",
补充说明
- 关于列筛选的问题
通过配置MaxCompute Writer,可以实现MaxCompute本身不支持的列筛选、重排序和补空等操作。例如需要导入的字段列表,当导入全部字段时,可以配置为
"column": ["*"]
。MaxCompute表有a、b和c三个字段,您只同步c和b两个字段,可以将列配置为
"column": ["c","b"]
,表示会把Reader的第一列和第二列导入MaxCompute的c字段和b字段,而MaxCompute表中新插入的a字段会被置为null。 - 列配置错误的处理
为保证写入数据的可靠性,避免多余列数据丢失造成数据质量故障。对于写入多余的列,MaxCompute Writer将报错。例如MaxCompute表字段为a、b和c,如果MaxCompute Writer写入的字段多于三列,MaxCompute Writer将报错。
- 分区配置注意事项
MaxCompute Writer仅提供写入到最后一级分区的功能,不支持写入按照某个字段进行分区路由等功能。假设表一共有三级分区,在分区配置中必须指明写入至某个三级分区。例如,写入数据至一个表的第三级分区,可以配置为
pt=20150101, type=1, biz=2
,但不能配置为pt=20150101, type=1
或者pt=20150101
。 - 任务重跑和failover
MaxCompute Writer通过配置
"truncate": true
,保证写入的幂等性。即当出现写入失败再次运行时,MaxCompute Writer将清理前述数据,并导入新数据,以保证每次重跑之后的数据都保持一致。如果在运行过程中,因为其它的异常导致任务中断,便不能保证数据的原子性,数据不会回滚也不会自动重跑,需要您利用幂等性的特点进行重跑,以确保数据的完整性。说明 truncate为true的情况下,会将指定分区或表的数据全部清理,请谨慎使用。