本文为您介绍Blink独享模式如何创建Hologres维表。
使用限制
建议使用Hologres的行存表,列存表对于点查场景性能开销较大。
创建行存储表时必须设置主键,并且将主键配置为clustering key才可以工作,Hologres创建表的示例语句如下。
begin; create table test(a int primary key, b text, c text, d float8, e int8); call set_table_property('test', 'orientation', 'row'); call set_table_property('test', 'clustering_key', 'a'); commit;
表的主键必须是Flink Join ON的字段,Flink Join ON的字段也必须是表的完整主键,两者必须完全匹配。
Hologres Blink Connector的维表功能不支持一对多的输出。
不支持Blink写入时带有数组类型。
DDL语义
创建Hologres维表的DDL语句如下。
CREATE TABLE rds_dim_table(
id INT,
len INT,
content VARCHAR,
PRIMARY KEY (id),
PERIOD FOR SYSTEM_TIME --定义维表的变化周期,表明该表是一张会变化的表。
) 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。 | 是 |
dbname | Hologres的数据库名称。 | 是 |
tablename | Hologres用于接收数据的表名称。 | 是 |
username | 当前阿里云账号的AccessKey ID。 您可以登录AccessKey 管理,获取AccessKey ID。 | 是 |
password | 当前阿里云账号的AccessKey Secret。 您可以登录AccessKey 管理,获取AccessKey Secret。 | 是 |
endpoint | Hologres的VPC网络地址。 您可以登录Hologres管控台,进入目标实例的详情页,在网络信息区域获取Endpoint。Endpoint需包含端口号,格式为ip:port。 | 是 |
Cache参数
如果Hologres维表包含Cache参数,则可以参考如下参数描述。
参数 | 描述 | 是否必选 | 示例值 |
cache | 缓存策略 | 否 | 目前Hologres维表支持以下三种缓存策略:
说明
|
cachesize | 缓存大小 | 否 | 当缓存策略选择LRU时,可以设置缓存大小,默认为10000行。 |
cachettlms | 缓存失效时间,单位为毫秒。 | 否 |
|
partitionedjoin | 根据分区查找数据。 | 否 | partitionedjoin参数的取值如下:
说明 此处的分区指在缓存中按照并发对维表的key进行分区,并非支持Hologres分区表做维表。 |
async | 是否异步读取数据。 异步模式可以并发地处理多个请求和响应,从而连续的请求之间不需要阻塞等待,提高查询的吞吐。但在异步模式下,无法保证请求的绝对顺序。 | 否 | async参数的取值如下:
说明 有关异步请求的原理请参见维表 JOIN 与异步优化 |
cacheempty | 是否缓存join结果为空的数据。 | 否 | cacheempty取值如下:
|
使用示例
创建Hologres维表并导入数据的示例语句如下。
create table randomSource (a int, b VARCHAR, c VARCHAR) with (type = 'random');
create table dim_test (
a int,
b VARCHAR,
c VARCHAR,
PRIMARY KEY (a, b),
PERIOD FOR SYSTEM_TIME
) with (
type = 'hologres',
'dbname'='<yourDbname>', --Hologres的数据库名称。
'tablename'='<yourTablename>', --Hologres用于接收数据的表名称。
'username'='<yourUsername>', --当前阿里云账号的AccessKey ID。
'password'='<yourPassword>', --当前阿里云账号的AccessKey Secret。
'endpoint'='<yourEndpoint>' --当前Hologres实例VPC网络的Endpoint。
);
create table print_sink (
a int,
b VARCHAR
) with (type = 'print', `ignoreWrite` = 'false');
insert into print_sink
select randomSource.a, dim_test.b from randomSource
LEFT JOIN dim_test FOR SYSTEM_TIME AS OF PROCTIME()
on randomSource.a = dim_test.a and randomSource.b = dim_test.b;
数据类型映射
Blink独享与Hologres的数据类型映射,请参见数据类型汇总。