本文为您介绍如何创建交互式分析Hologres维表,以及创建维表时使用的WITH参数、Cache参数和类型映射。

什么是交互式分析Hologres

交互式分析Hologres兼容PostgreSQL协议,与大数据生态紧密连接,支持高并发、低延时实时分析与处理PB级数据,让您轻松使用现有BI(Business Intelligence)工具对数据进行多维分析和业务探索。
注意
  • Hologres新维表在Blink 3.6.0版本正式上线。如果您的Blink为3.6.0以下的版本,您可以提交工单获取需要的JAR文件,安装使用。
  • 建议您使用Hologres 0.7及以上版本。

语法示例

实时计算Flink版支持使用Hologres作为维表,代码示例如下。
CREATE TABLE rds_dim_table(
 id INT,
 len INT,
 content VARCHAR,
 PRIMARY KEY (id),
 PERIOD FOR SYSTEM_TIME  --定义维表的变化周期。
) with (
  type='hologres',
  endpoint='...',
  dbname='...',
  tablename='...',
  username='...',
  password='...'
);

WITH参数

参数 描述 是否必选 示例值
type 数据库类型 hologres
endpoint Hologres端点
tablename 读取的表
dbname 读取的数据库
username 用户名
password 密码

Cache参数

参数 描述 是否必选 示例值
cache 缓存策略 目前交互式分析Hologres维表支持以下三种缓存策略:
  • None(默认值):无缓存。
  • LRU:缓存维表里的部分数据。源表来一条数据,系统会先查找Cache,如果没有找到,则去物理维表中查询。

    需要配置相关参数:缓存大小(cacheSize)和缓存更新时间间隔(cacheTTLMs)。

  • ALL:缓存维表里的所有数据。在Job运行前,系统会将维表中所有数据加载到Cache中,之后所有的维表查询都会通过Cache进行。如果在Cache中无法找到数据,则KEY不存在,并在Cache过期后重新加载一遍全量Cache。

    适用于远程表数据量小且MISS KEY(源表数据和维表JOIN时,ON条件无法关联)特别多的场景。

    需要配置相关参数:缓存更新时间间隔(cacheTTLMs),更新时间黑名单(cacheReloadTimeBlackList)。

说明
  • 因为系统会异步加载维表数据,所以在使用CACHE ALL时,需要增加维表JOIN节点的内存,增加的内存大小为远程表数据量的两倍。
  • 对于数据量比较大的维表,选择CACHE ALL时,可能会出现OOM或者Full GC耗时很久的情况,针对这个问题,可以选择以下两种解决方式:
    • 对于支持Cache All策略的维表,开启PartitionedJoin优化。3.6.0版本之前,每个并发默认加载维表全量数据;3.6.0版本之后,CACHE ALL策略支持PartitionedJoin优化。开启PartitionJoin优化后,每个并发只缓存自己并发所需要的数据。
    • 使用HBase或者RDS等Key-Value类型的维表。
cacheSize 缓存大小 缓存策略选择LRU时,可以设置缓存大小,默认为10000行。
cacheTTLMs 缓存失效时间,单位为毫秒
  • 缓存策略选择LRU时,可以设置缓存失效时间,默认不过期。
  • 缓存策略选择ALL时,缓存失效时间为缓存重新加载的间隔时间,默认不重新加载。
partitionedJoin 根据分区查询数据 partitionedJoin参数的取值如下:
  • false(默认值)
  • true
async 是否异步读取数据 async参数的取值如下:
  • false(默认值)
  • true

类型映射

Hologres BLINK
int INT
int[] ARRAY<INT>
bigint BIGINT
bigint[] ARRAY<BIGINT>
real FLOAT
real[] ARRAY<FLOAT>
double precision DOUBLE
double precision[] ARRAY<DOUBLE>
boolean BOOLEAN
boolean[] ARRAY<BOOLEAN>
text VARCHAR
text[] ARRAY<VARCHAR>
numeric DECIMAL
date DATE
timestamp with timezone TIMESTAMP

代码示例

实时计算Flink版包含Hologres维表的代码示例如下。
create table randomSource (a int, b VARCHAR, c VARCHAR) with (type = 'random');

create table test (
      a int, 
    b VARCHAR, 
    c VARCHAR, 
    PRIMARY KEY (a, b), PERIOD FOR SYSTEM_TIME
) with (
  type = 'hologres',
  ...
);

create table print_sink (
  a int, b VARCHAR
) with (type = 'print', `ignoreWrite` = 'false');

insert into print_sink
select randomSource.a, test.b from randomSource 
LEFT JOIN test FOR SYSTEM_TIME AS OF PROCTIME() 
on randomSource.a = test.a and randomSource.b = test.b;