本文为您介绍如何创建实时计算云数据库RDS MySQL版维表,以及创建维表时使用的WITH参数、CACHE参数和类型映射。
云数据库RDS MySQL版
RDS MySQL基于阿里巴巴的MySQL源码分支,经过双十一高并发、大数据量的考验,拥有优良的性能。RDS MySQL支持实例管理、账号管理、数据库管理、备份恢复、白名单、透明数据加密以及数据迁移等基本功能。除此之外还提供如下高级功能:
- 专属集群MyBase:是由多台主机(底层服务器,如ECS I2服务器、神龙服务器)组成的集群,相对于全托管数据库,可以满足您更多的需求。
- 只读实例:在对数据库有少量写请求,但有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,您可以创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求,增加应用的吞吐量。
- 读写分离:读写分离功能是在只读实例的基础上,额外提供了一个读写分离地址,联动主实例及其所有只读实例,创建自动的读写分离链路。应用程序只需连接读写分离地址进行数据读取及写入操作,读写分离程序会自动将写入请求发往主实例,而将读取请求按照权重发往各个只读实例。用户只需通过添加只读实例的个数,即可不断扩展系统的处理能力,应用程序上无需做任何修改。
- 什么是数据库代理:数据库独享代理服务是使用独立代理计算资源为当前实例提供代理服务,提供更多高级功能,例如读写分离、短连接优化、事务拆分等。
- 自治服务DAS:针对SQL语句性能、CPU使用率、IOPS使用率、内存使用率、磁盘空间使用率、连接数、锁信息、热点表等,DAS提供了智能的诊断及优化功能,能最大限度发现数据库存在的或潜在的健康问题。DAS的诊断基于单个实例,会提供问题详情及相应的解决方案,为您维护实例带来极大的便利。
使用限制
实时计算Flink版暂不支持通过数据存储功能中存储注册的方式使用RDS MySQL 8.0版本,建议您使用明文方式使用RDS MySQL 8.0版本。数据存储功能详情请参见概述。
语法示例
实时计算Flink版支持使用RDS MySQL版作为维表,示例代码如下。
CREATE TABLE rds_dim_table(
id INT,
len INT,
content VARCHAR,
PRIMARY KEY (id),
PERIOD FOR SYSTEM_TIME --定义维表的变化周期。
) with (
type='rds',
url='<yourDatabaseURL>',
tableName='<yourDatabaseTableName>',
userName='<yourDatabaseUserName>',
password='<yourDatabasePassword>'
);
说明 声明维表时,必须要指名主键。维表JOIN时,ON条件必须包含所有主键的等值条件。RDS或DRDS的主键可以定义为表的主键或唯一索引列。
WITH参数
参数 | 说明 | 是否必填 | 备注 |
---|---|---|---|
type | 维表类型 | 是 | 固定值为rds 。 |
url | JDBC(Java DataBase Connectivity)连接地址 | 是 | URL的格式为:jdbc:mysql://<内网地址>/<databaseName> ,其中databaseName为对应的数据库名称。内网地址参见如下链接: |
tableName | 表名 | 是 | 无 |
userName | 用户名 | 是 | 无 |
password | 密码 | 是 | 无 |
maxRetryTimes | 最大尝试连接次数 | 否 | 默认值为10。 |
CACHE参数
参数 | 说明 | 是否必填 | 备注 |
---|---|---|---|
cache | 缓存策略 | 否 | 云数据库RDS(DRDS)版维表支持以下三种缓存策略:
说明 因为系统会异步加载维表数据,所以在使用CACHE ALL时,需要增加维表JOIN节点的内存,增加的内存大小为远程表数据量的两倍。 |
cacheSize | 缓存大小 | 否 | 当选择LRU 缓存策略后,可以设置缓存大小,默认10000行。 |
cacheTTLMs | 缓存超时时间,单位为毫秒 | 否 | 当选择LRU 缓存策略后,可以设置缓存失效的超时时间,默认不过期。当选择ALL 策略,则为缓存加载的间隔时间,默认不重新加载。 |
cacheReloadTimeBlackList | 缓存策略选择ALL 时启用。更新时间黑名单,防止在此时间内做cache更新(例如双11场景)。 | 否 | 默认为空。自定义输入格式为2017-10-24 14:00 -> 2017-10-24 15:00, 2017-11-10 23:30 -> 2017-11-11 08:00 。用逗号(,)来分隔多个黑名单,用箭头(->)来分割黑名单的起始结束时间。 |
maxJoinRows | 主表中每一条数据查询维表时,匹配后最多返回的结果数。 | 否 | 默认值为1024。如果您可以预估一条数据对应的维表数据最多为n条,则可以设置maxJoinRows='n',以确保实时计算匹配处理效率。 说明 进行Join时,主表输入一条数据,对应维表匹配后返回的结果总数受该参数限制。 |
代码示例
包含云数据库RDS版维表的实时计算Flink版作业代码示例如下。
CREATE TABLE datahub_input1 (
id BIGINT,
name VARCHAR,
age BIGINT
) WITH (
type='datahub',
endPoint='http://dh-cn-hangzhou.aliyun-inc.com',
project='<yourProjectName>',
topic='<yourTopic>',
accessId='<yourAccessID>',
accessKey='<yourAccessSecret>',
startTime='2017-07-21 00:00:00'
);
create table phoneNumber(
name VARCHAR,
phoneNumber BIGINT,
primary key(name),
PERIOD FOR SYSTEM_TIME--定义维表的变化周期。
)WITH(
type='rds',
url='<yourDatabaseURL>',
tableName='<yourDatabaseTableName>',
userName='<yourDatabaseUserName>',
password='<yourDatabasePassword>'
);
CREATE table result_infor(
id BIGINT,
phoneNumber BIGINT,
name VARCHAR
)WITH(
type='rds',
url='<yourDatabaseURL>',
tableName='<yourDatabaseTableName>',
userName='<yourDatabaseUserName>',
password='<yourDatabasePassword>'
);
INSERT INTO result_infor
SELECT
t.id,
w.phoneNumber,
t.name
FROM datahub_input1 as t
JOIN phoneNumber FOR SYSTEM_TIME AS OF PROCTIME() as w --维表JOIN时必须指定此声明。
ON t.name = w.name;
维表详细语法请参见维表JOIN语句。
类型映射
RDS字段类型 | 实时计算Flink版字段类型 |
---|---|
BOOLEAN | BOOLEAN |
TINYINT | TINYINT |
SMALLINT | SMALLINT |
INT | INT |
BIGINT | BIGINT |
FLOAT | FLOAT |
DECIMAL | DECIMAL |
DOUBLE | DOUBLE |
DATE | DATE |
TIME | TIME |
TIMESTAMP | TIMESTAMP |
VARCHAR | VARCHAR |
VARBINARY | VARBINARY |