Hologres与实时计算Blink独享模式(原产品线)深度融合,支持使用Connector的方式写入数据至Hologres结果表,您可以立即查询写入的数据。本文为您介绍实时计算Blink独享模式(原产品线)如何写入数据至Hologres结果表。
使用限制
- 不同Blink独享模式的版本开发语义不同,在使用之前,请先确定Blink独享模式的版本,并根据版本示例使用。
- 请确保开通的实时计算与Hologres地域一致,以免连接失败。
- Blink独享模式3.6之前的版本未内置Hologres Connector,实时写入数据至Hologres需要引用JAR文件,您可以提交工单或通过Hologres交流群(钉钉群号:32314975)获取。
说明 建议您升级至3.6及以上的版本进行作业。
- Blink独享模式3.7版本支持自动创建Hologres分区表,但是您需要在作业中配置
createparttable='true'
。同时,使用分区表的注意事项如下:- Hologres当前仅支持List分区。
- 创建分区表时,需要显示指定的分区列。目前仅支持text和int4类型的分区列,并且分区的值不能包含短划线(-),例如
2020-09-12
。 - 如果分区表配置了主键(pk),则分区列必须是pk的一部分。
- 创建分区子表时,子表分区列的值必须为固定值。
- 写入分区子表的数据对应的分区列值,必须与子表创建时定义的值严格匹配,否则会报错。
- 当前不支持DEFAULT分区功能。
- 当导入数据的Hologres目标表设置了主键,实时写入的默认语义不会按照主键进行更新,后续导入的主键数据如果重复,则会被丢弃。
- Hologres为异步写入数据,您在进行作业时需要添加
blink.checkpoint.fail_on_checkpoint_error=true
配置,当作业发生异常时才会触发Failover。Blink3.7.6及以上版本不需要添加该参数。
DDL语义
create table Hologres_sink(
name varchar,
age BIGINT,
birthday BIGINT
) with (
type='hologres',
dbname='<yourDbname>', --Hologres的数据库名称。
tablename='<yourTablename>', --Hologres用于接收数据的表名称。
username='<yourUsername>', --当前阿里云账号的AccessKey ID。
password='<yourPassword>', --当前阿里云账号的AccessKey Secret。
endpoint='<yourEndpoint>'); --当前Hologres实例VPC网络的Endpoint。
WITH参数
参数 | 描述 | 示例 |
---|---|---|
type | 结果表的类型。 固定值为hologres。 | hologres |
endpoint |
Hologres实例的VPC网络地址。 进入Hologres管理控制台,在目标实例详情页的实例配置获取Endpoint。Endpoint需包含端口号,格式为ip:port。 |
demo-cn-hangzhou-vpc.hologres.aliyuncs.com:80 |
username | AccessKey ID
您可以单击AccessKey 管理,获取AccessKey ID。 |
xxxxm3FMWaxxxx |
password | AccessKey Secret
您可以单击AccessKey 管理,获取AccessKey Secret。 |
xxxxm355fffaxxxx |
dbname | 当前Hologres的数据库名称。 | Holodb |
tablename | 当前Hologres数据库的表名称。 | blink_test |
arraydelimiter | Hologres Sink支持将一个STRING字段按照field_delimiter切分为数组导入Hologres。
默认值为\u0002。 |
\u0002 |
mutatetype | 数据写入模式,详情请参见交互式分析Hologres结果表。
默认值为insertorignore。 |
insertorignore |
ignoredelete | 是否忽略回撤消息。
说明 该参数仅在使用流式语义时生效。
默认为false。 通常Flink的Groupby会产生回撤消息,回撤消息传输到Hologres Connecor时会产生Delete请求。 |
false |
partitionrouter | 是否写入分区表。
默认为false。 |
false |
createparttable | 当写入分区表时,是否根据分区值自动创建分区表。Blink独享 3.7及以上版本支持该功能。
默认值为false。
注意 请您谨慎使用该功能,确保分区值不会出现脏数据,从而导致创建了错误的分区表。
|
false |
实时写入数据至Hologres普通结果表
如何使用宽表Merge/局部更新功能
对于常见的多个流的数据写入至一张Hologres宽表的场景,具体使用方法如下:
- 使用Flink SQL声明两张Hologres结果表,其中一张表只声明字段A、B、C,另一张表只声明字段A、D、E,这两张表都映射至《WIDE_TABLE》。
- 两张结果表的mutatetype属性都设置成insertorupdate。
- 两张结果表的ignoredelete属性都设置成true,防止回撤消息产生Delete请求。
- 将两个流的数据分别Insert至两张结果表中。
- 宽表必须有主键。
- 每个流的数据都必须包含完整主键字段。
- 列存表的宽表Merge场景在高RPS的情况下,CPU使用率会偏高,建议关闭表中字段的Dictionary encoding。
实时写入数据至Hologres的分区结果表
Hologres支持通过调用实时数据API接口,直接将数据写入分区父表中,对应的分区数据将会自动路由至分区子表。您可以直接写入数据至分区表。实时数据API的描述,详情请参见实时数据API。
- Hologres当前版本仅支持List分区。
- 创建分区表时,需要显示指定的分区列,分区列的类型仅支持text和 int4。
- 如果设置了主键,分区列必须为主键的一部分。
- 创建分区子表时,子表分区列的值必须为固定值。
- 写入分区子表的数据对应的分区列值,必须严格与创建子表时定义的值匹配,否则会报错。
- Hologres当前不支持默认分区。
数据类型映射
Blink独享与Hologres的数据类型映射,请参见数据类型汇总。
在文档使用中是否遇到以下问题
更多建议
匿名提交