1.20.1 创建 DLI 表关联 DCS
功能描述
使用CREATE TABLE命令创建DLI表并关联DCS上已有的Key。
前提条件
创建DLI表关联DCS之前需要创建跨源连接,绑定队列。管理控制台操作请参考增强型
跨源连接。
语法格式
● 指定Key
CREATE TABLE [IF NOT EXISTS] TABLE_NAME(
FIELDNAME1 FIELDTYPE1, FIELDNAME2 FIELDTYPE2) USING REDIS OPTIONS ( 'host'='xx',
'port'='xx',
'passwdauth' = 'xxx', 'encryption' = 'true',
'table'='namespace_in_redis:key_in_redis', 'key.column'= 'FIELDNAME1'
);
● 通配key
CREATE TABLE [IF NOT EXISTS] TABLE_NAME(
FIELDNAME1 FIELDTYPE1, FIELDNAME2 FIELDTYPE2) USING REDIS OPTIONS ( 'host'='xx',
'port'='xx',
'passwdauth' = 'xxx', 'encryption' = 'true', 'keys.pattern'='key*:*', 'key.column'= 'FIELDNAME1' );
关键字
表1-53 CREATE TABLE 参数描述
参数 描述
host DCS的连接IP,需要先创建跨源连接,管理控制台操作请参考增强
型跨源连接。
创建增强型跨源连接后,使用DCS提供的"连接地址"。"连接地址"有 多个时,选择其中一个即可。
说明访问DCS目前只支持增强型跨源。
port DCS的连接端口,例如6379。
password (已废弃)创建DCS集群时填写的密码。访问非安全Redis集群时不 需要填写。
passwdauth 跨源密码认证名称。跨源认证信息创建方式请参考《数据湖探索用 户指南》>《跨源认证》。
encryption 使用跨源密码认证时配置为“true”。
table 对应Redis中的Key或Hash Key。
● 插入redis数据时必填。
● 查询redis数据时与“keys.pattern”参数二选一。
keys.pattern 使用正则表达式匹配多个Key或Hash Key。该参数仅用于查询时使 用。查询redis数据时与“table”参数二选一。
key.column 非必填。用于指定schema中的某个字段作为Redis中key的标识。在 插入数据时与参数“table”配合使用。
partitions.nu
mber 读取数据时,并发task数。
scan.count 每批次读取的数据记录数,默认为100。如果在读取过程中,redis 集群中的CPU使用率还有提升空间,可以调大该参数。
iterator.grou
ping.size 每批次插入的数据记录数,默认为100。如果在插入过程中,redis 集群中的CPU使用率还有提升空间,可以调大该参数。
timeout 连接redis的超时时间,单位ms,默认值2000(2秒超时)。
说明
访问DCS时,不支持复杂类型数据(Array、Struct、Map等)。
可以考虑以下几种方式进行复杂类型数据处理:
● 字段扁平化处理,将下一级的字段展开放在同一层Schema字段中。
● 使用二进制方式进行写入与读取,并通过自定义函数进行编解码。
示例
● 指定table
create table test_redis(name string, age int) using redis options(
'host' = '192.168.4.199', 'port' = '6379', 'passwdauth' = 'xxx', 'encryption' = 'true', 'table' = 'person' );
● 通配table名
create table test_redis_keys_patten(id string, name string, age int) using redis options(
'host' = '192.168.4.199', 'port' = '6379', 'passwdauth' = 'xxx', 'encryption' = 'true', 'keys.pattern' = 'p*:*', 'key.column' = 'id' );
1.20.2 插入数据至 DCS 表
功能描述
INSERT INTO命令将DLI表中的数据插入到已关联的DCS Key中。
语法格式
● 将SELECT查询结果插入到表中:
INSERT INTO DLI_TABLE SELECT field1,field2...
[FROM DLI_TEST]
[WHERE where_condition]
[LIMIT num]
[GROUP BY field]
[ORDER BY field] ...;
● 将某条数据插入到表中:
INSERT INTO DLI_TABLE
VALUES values_row [, values_row ...];
关键字
SELECT对应关键字说明请参考SELECT基本语句。
参数说明
表1-54 参数描述
参数 描述
DLI_TABLE 创建的DLI表名称,为插入数据的目的表。
DLI_TEST 为包含待查询数据的表。
field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的 列值和类型。
where_condition 查询过滤条件。
num 对查询结果进行限制,num参数仅支持INT类型。
values_row 想要插入到表中的值,列与列之间用逗号分隔。
注意事项
● DLI表必须已经存在。
● DLI表在创建时需要指定Schema信息。
● 如果在建表时指定“key.column”,则在Redis中会以指定字段的值作为Redis Key名称的一部分。例如:
create table test_redis(name string, age int) using redis options(
'host' = '192.168.4.199', 'port' = '6379', 'password' = '******',
'table' = 'test_with_key_column', 'key.column' = 'name'
);insert into test_redis values("James", 35), ("Michael", 22);
在redis中将会有2个名为test_with_key_column:James和 test_with_key_column:Michael的表:
● 如果在建表时没有指定“key.column”,则在Redis中的key name将会使用 uuid。例如:
create table test_redis(name string, age int) using redis options(
'host' = '192.168.7.238', 'port' = '6379', 'password' = '******',
'table' = 'test_without_key_column'
);insert into test_redis values("James", 35), ("Michael", 22);
在redis中将会有2个以“test_without_key_column:uuid”命名的表:
示例
INSERT INTO test_redis
VALUES("James", 35), ("Michael", 22);
1.20.3 查询 DCS 表
SELECT命令用于查询DCS表中的数据。
语法格式
SELECT * FROM table_name LIMIT number;
关键字
LIMIT:对查询结果进行限制,number参数仅支持INT类型。
示例
查询表test_redis中的数据。
SELECT * FROM test_redis limit 100;