全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
流计算

创建云数据库(RDS/DRDS维表)

更新时间:2018-07-16 16:38:02

云数据库(RDS/DRDS)

云数据库(RDS/DRDS)的插件的WITH里的参数都是一致、可以通用!

注意:在使用的时候必须在RDS或DRDS里面要有真实的表存在!

DDL定义

流计算支持使用RDS/DRDS作为维表(注意:目前仅支持MySql数据存储类型)。示例代码如下:

  1. CREATE TABLE rds_dim_table(
  2. id int,
  3. len int,
  4. content VARCHAR,
  5. PRIMARY KEY (id),
  6. PERIOD FOR SYSTEM_TIME--定义了维表的变化周期,即表明该表是一张会变化的表。
  7. ) with (
  8. type='rds',
  9. url='jdbc:mysql:XXXXXXXXXX',
  10. tableName='test4',
  11. userName='test',
  12. password='XXXXXX'
  13. );

注:声明一个维表的时候,必须要指名主键,维表JOIN的时候,ON的条件必须包含所有主键的等值条件。RDS/DRDS的主键可以定义为表的主键或是唯一索引列。

WITH参数

参数 注释说明 备注
url 地址 RDS的URL链接地址
tableName 表名
userName 用户名
password 密码
maxRetryTimes 最大尝试插入次数 可选,默认为3

Cache 参数

参数 注释说明 备注
cache 缓存策略 默认 “None”, 可选 “LRU”, “ALL”
cacheSize 缓存大小 当选择 LRU 缓存策略后,可以设置缓存大小,默认 10000 行
cacheTTLMs 缓存超时时间,单位毫秒 当选择 LRU 缓存策略后,可以设置缓存失效的超时时间,默认不过期。当选择 ALL 策略,则为缓存reload 的间隔时间,默认不重新加载。
cacheReloadTimeBlackList ALL Cache 时启用,更新时间黑名单,防止在此时间内做cache 更新(如双11场景) 可选,默认空,格式为 ‘2017-10-24 14:00 -> 2017-10-24 15:00, 2017-11-10 23:30 -> 2017-11-11 08:00’ 。用逗号’,’来分隔多个黑名单,用箭头’->’来分割黑名单的起始结束时间

目前RDS/DRDS提供三种缓存策略,分别是 None, LRU, ALL。

  • None: 无缓存
  • LRU: 最近使用策略缓存,需要配置相关参数:缓存大小(cacheSize)和 缓存超时时间(cacheTTLMs)
  • ALL: 全量缓存策略。即在 Job 运行前会将远程表中所有数据 load 到内存中,之后所有的维表查询都会走 cache,cache 命中不到则不存在,并在缓存过期后重新加载一遍全量缓存。适合远程表不大、miss key 特别多的场景。需要配置相关配置:缓存更新间隔(cacheTTLMs),更新时间黑名单(cacheReloadTimeBlackList)。注意:使用 cache all 的时候,需要将维表 JOIN 的节点增加一些内存,增加的内存大小为远程表两倍的数据量,因为我们会异步 reload。

如果使用 CACHE ALL,请特别注意节点的内存,防止 OOM。

测试案例

  1. CREATE TABLE datahub_input1 (
  2. id BIGINT,
  3. name VARCHAR,
  4. age BIGINT
  5. ) WITH (
  6. type='datahub'
  7. );
  8. create table phoneNumber(
  9. name VARCHAR,
  10. phoneNumber bigint,
  11. primary key(name),
  12. PERIOD FOR SYSTEM_TIME--定义了维表的变化周期
  13. )with(
  14. type='rds'
  15. );
  16. CREATE table result_infor(
  17. id bigint,
  18. phoneNumber bigint,
  19. name VARCHAR
  20. )with(
  21. type='rds'
  22. );
  23. INSERT INTO result_infor
  24. SELECT
  25. t.id
  26. ,w.phoneNumber
  27. ,t.name
  28. FROM datahub_input1 as t
  29. JOIN phoneNumber FOR SYSTEM_TIME AS OF PROCTIME() as w --维表JOIN必须指定
  30. ON t.name = w.name;

关于维表详细语法请参阅维表JOIN语法

本文导读目录