1.17.1 创建 DLI 表关联 DWS
功能描述
使用CREATE TABLE命令创建DLI表并关联DWS上已有的表。
前提条件
创建DLI表关联DWS之前需要创建跨源连接。管理控制台操作请参考经典型跨源连接和
增强型跨源连接。
语法格式
CREATE TABLE [IF NOT EXISTS] TABLE_NAME USING DWS OPTIONS (
'url'='xx',
'dbtable'='db_name_in_DWS.table_name_in_DWS', 'passwdauth' = 'xxx',
'encryption' = 'true');
关键字
表1-47 CREATE TABLE 参数描述
参数 描述
url DWS的连接地址,需要先创建跨源连接,管理控制台操作请参考经典
型跨源连接和增强型跨源连接。
创建经典型跨源连接后,使用经典型跨源连接中返回的连接地址。
创建增强型跨源连接后,可以使用DWS提供的"JDBC连接字符串(内 网)",或者内网地址和内网端口访问,格式为"协议头://内网IP:内网 端口/数据库名",例如:"jdbc:postgresql://192.168.0.77:8000/
postgres"。
说明DWS的连接地址格式为:"协议头://访问地址:访问端口/数据库名"
例如:
jdbc:postgresql://to-dws-1174405119-ihlUr78j.datasource.com:8000/
postgres
如果想要访问DWS中自定义数据库,请在这个连接里将"postgres"修改为对应 的数据库名字。
dbtable 指定在DWS关联的表名,或者"模式名.表名",例如:
public.table_name。
user (已废弃)DWS的用户名。
password (已废弃)DWS集群的用户密码。
参数 描述 passwdaut
h 跨源密码认证名称。跨源认证信息创建方式请参考《数据湖探索用户 指南》>《跨源认证》。
encryption 使用跨源密码认证时配置为“true”。
partitionCo
lumn 读取数据时,用于设置并发使用的数值型字段。
说明
● “partitionColumn”、“lowerBound”、“upperBound”、
“numPartitions”四个参数必须同时设置,不支持仅设置其中某一个或某 几个。
● 为了提升并发读取的性能,建议使用自增列。
lowerBoun
d partitionColumn设置的字段数据最小值,该值包含在返回结果中。
upperBoun
d partitionColumn设置的字段数据最大值,该值不包含在返回结果中。
numPartiti
ons 读取数据时并发数。
说明实际读取数据时,会根据“lowerBound”与“upperBound”,平均分配给每 个task,获取其中一部分的数据。例如:
'partitionColumn'='id', 'lowerBound'='0', 'upperBound'='100', 'numPartitions'='2'
表示在DLI中会起2个并发task,一个task执行id>=0 and id < 50,另一个task执 行id >=50 and id < 100。
fetchsize 读取数据时,每一批次获取数据的记录数,默认值1000。设置越大性 能越好,但占用内存越多,该值设置过大会有内存溢出的风险。
batchsize 写入数据时,每一批次写入数据的记录数,默认值1000。设置越大性 能越好,但占用内存越多,该值设置过大会有内存溢出的风险。
truncate 执行overwrite时是否不删除原表,直接执行清空表操作,取值范围:
● true
● false
默认为“false”,即在执行overwrite操作时,先将原表删除再重新建 表。
isolationLe
vel 事务隔离级别,取值范围:
● NONE
● READ_UNCOMMITTED
● READ_COMMITTED
● REPEATABLE_READ
● SERIALIZABLE
默认值为“READ_UNCOMMITTED”。
注意事项
创建DWS关联表时,不需要指定关联表的Schema。DLI会自动获取DWS中对应参数
"dbtable"中的表的Schema。
示例
CREATE TABLE IF NOT EXISTS dli_to_dws USING DWS OPTIONS (
'url'='jdbc:postgresql://to-dws-1174405119-ih1Ur78j.datasource.com:8000/postgres', 'dbtable'='test_dws',
'passwdauth' = 'xxx', 'encryption' = 'true');
1.17.2 插入数据至 DWS 表
功能描述
INSERT INTO命令将DLI表中的数据插入到已关联的指定DWS表中。
语法格式
● 将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-48 参数描述
参数 描述
DLI_TABLE 创建的DLI表名称,为插入数据的目的表。
DLI_TEST 为包含待查询数据的表。
field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的 列值和类型。
where_condition 查询过滤条件。
num 对查询结果进行限制,num参数仅支持INT类型。
values_row 想要插入到表中的值,列与列之间用逗号分隔。
注意事项
● DLI表必须已经存在。
● DLI表在创建时不需要指定Schema信息,Schema信息将使用DWS表的信息。如 果select子句中选择的字段数量和类型与DWS表的Schema信息不匹配时,系统将 报错。
● 不建议对同一张表并发插入数据,因为有一定概率发生并发冲突,导致插入失 败。
示例
● 查询表“user”中的数据插入表“test”中。
INSERT INTO test SELECT ATTR_EXPR FROM user
WHERE user_name='cyz' LIMIT 3
GROUP BY user_age
● 插入数据“1”到表“test”中
INSERT INTO test VALUES (1);
1.17.3 查询 DWS 表
SELECT命令用于查询DWS表中的数据。
语法格式
SELECT * FROM table_name LIMIT number;
关键字
LIMIT:对查询结果进行限制,number参数仅支持INT类型。
注意事项
所查询的表必须是已经存在的表,否则会出错。
示例
查询表dli_to_dws中的数据。
SELECT * FROM dli_to_dws limit 100;