华为云用户手册

  • 语法格式 将SELECT查询结果插入到表中: 1 2 3 4 5 6 7 INSERT INTO DLI _TABLE SELECT field1,field2... [FROM DLI_TEST] [WHERE where_condition] [LIMIT num] [GROUP BY field] [ORDER BY field] ...; 将某条数据插入到表中: 1 2 INSERT INTO DLI_TABLE VALUES values_row [, values_row ...];
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 示例 指定table 1 2 3 4 5 6 7 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名 1 2 3 4 5 6 7 8 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' );
  • 语法格式 指定Key 1 2 3 4 5 6 7 8 9 10 11 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 1 2 3 4 5 6 7 8 9 10 11 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' );
  • Spark SQL语法概览 本章节介绍了目前DLI所提供的Spark SQL语法列表。参数说明,示例等详细信息请参考具体的语法说明。 表1 批作业SQL语法 语法分类 操作链接 数据库相关语法 创建数据库 删除数据库 查看指定数据库 查看所有数据库 创建OBS表相关语法 使用DataSource语法创建OBS表 使用Hive语法创建OBS表 创建DLI表相关语法 使用DataSource语法创建DLI表 使用Hive语法创建DLI表 删除表相关语法 删除表 查看表相关语法 查看所有表 查看建表语句 查看表属性 查看指定表所有列 查看指定表所有分区 查看表统计信息 修改表相关语法 添加列 分区表相关语法 添加分区(只支持OBS表) 重命名分区 删除分区 修改表分区位置(只支持OBS表) 更新表分区信息(只支持OBS表) 导入数据相关语法 导入数据 插入数据相关语法 插入数据 清空数据相关语法 清空数据 导出查询结果相关语法 导出查询结果 跨源连接HBase表相关语法 创建表关联HBase 插入数据至HBase表 查询HBase表 跨源连接OpenTSDB表相关语法 创建表关联OpenTSDB 插入数据至OpenTSDB 查询OpenTSDB表 跨源连接DWS表相关语法 创建表关联DWS 插入数据至DWS表 查询DWS表 跨源连接RDS表相关语法 创建表关联RDS 插入数据至RDS表 查询RDS表 跨源连接 CSS 表相关语法 创建表关联 CS S 插入数据至CSS表 查询CSS表 跨源连接DCS表相关语法 创建表关联DCS 插入数据至DCS表 查询DCS表 跨源连接DDS表相关语法 创建表关联DDS 插入数据至DDS表 查询DDS表 视图相关语法 创建视图 删除视图 查看计划相关语法 查看计划 数据权限相关语法 创建角色 删除角色 绑定角色 解绑角色 显示角色 分配权限 回收权限 显示已授权限 显示所有角色和用户的绑定关系 自定义函数相关语法 创建函数 删除函数 显示函数详情 显示所有函数 数据多版本相关语法 创建OBS表时开启数据多版本 修改表时开启或关闭数据多版本 设置多版本备份数据保留周期 查看多版本备份数据 恢复多版本备份数据 配置多版本过期数据回收站 清理多版本数据
  • 注意事项 通过配置“spark.sql.shuffle.partitions”参数可以设置非DLI表在OBS桶中插入的文件个数,同时,为了避免数据倾斜,在INSERT语句后可加上“distribute by rand()”,可以增加处理作业的并发量。例如: insert into table table_target select * from table_source distribute by cast(rand() * N as int); 配置项为OPTIONS('DELIMITER'=',')时,可以指定分隔符,默认值为“,”。 对于CSV数据,支持如下所述分隔符: 制表符tab,例如:'DELIMITER'='\t'。 支持通过unicode编码指定分割符,例如:'DELIMITER'='\u0001'。 单引号('),单引号必须在双引号(" ")内。例如:'DELIMITER'= "'"。
  • 示例5:创建DLI分区表,自定义表的TBLPROPERTIES参数 示例说明:本例创建名为table3并以col_3为分区依据的DLI分区表。在TBLPROPERTIES中配置dli.multi.version.enable、comment、orc.compress和auto.purge。 dli.multi.version.enable:本例配置为true,即代表开启DLI数据多版本功能,用于表数据的备份与恢复。 comment:表描述信息,TBLPROPERTIES内的描述信息支持后续修改。 orc.compress:指定orc存储的压缩方式,本例定义为ZLIB。 auto.purge:本例配置为true,即删除或者覆盖的数据会不经过回收站,直接被删除。 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE IF NOT EXISTs table3 ( col_1 STRING, col_2 STRING ) PARTITIONED BY (col_3 DATE) STORED AS rcfile TBLPROPERTIES ( dli.multi.version.enable = true, comment = 'Created by dli', orc.compress = 'ZLIB', auto.purge = true );
  • 示例6:创建textfile格式的非分区表,并设置ROW FORMAT 示例说明:本例创建名为table4的textfile类型的非分区表,并设置ROW FORMAT相关格式(ROW FORMAT功能只支持textfile类型的表)。 字段(Fields)是表格中的列,每个字段有一个名称和数据类型,表中字段之间以'/'分隔。 集合项(COLLECTION ITEMS)指的是一组数据中的元素,可以是数组、列表或集合等,table4中集合项以'$'分隔。 映射键(MAP KEYS)是一种键值对的数据结构,用于存储一组相关联的数据,表中Map键以'#'分隔。 行(Rows)表格中的行,每一行包含一组字段值,表中行以'\n'结束(注意,只支持用'\n'作为行分隔符)。 NULL表示缺少值或未知值的特殊值。在表格中,NULL表示该字段没有值或该值未知。如果数据中存在null值,则用字符串“null”表示。 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE IF NOT EXISTS table4 ( col_1 STRING, col_2 INT ) STORED AS TEXTFILE ROW FORMAT DELIMITED FIELDS TERMINATED BY '/' COLLECTION ITEMS TERMINATED BY '$' MAP KEYS TERMINATED BY '#' LINES TERMINATED BY '\n' NULL DEFINED AS 'NULL';
  • 参数说明 表1 参数描述 参数 是否必选 描述 db_name 否 Database名称。 由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。 table_name 是 Database中的表名。 由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。匹配规则为:^(?!_)(?![0-9]+$)[A-Za-z0-9_$]*$。如果特殊字符需要使用单引号('')包围起来。 col_name 是 列字段名称。 列字段由字母、数字和下划线(_)组成。不能是纯数字,且至少包含一个字母。 列名为大小写不敏感,即不区分大小写。 col_type 是 列字段的数据类型。数据类型为原生类型。 请参考原生数据类型。 col_comment 否 列字段描述。仅支持字符串常量。 row_format 是 行数据格式。row format功能只支持textfile类型的表。 file_format 是 DLI表数据存储格式:支持textfile, avro, orc, sequencefile, rcfile, parquet。 table_comment 否 表描述。仅支持字符串常量。 key = value 否 设置TBLPROPERTIES具体属性和值。 在表存储格式为PARQUET时,可以通过指定TBLPROPERTIES(parquet.compression = 'zstd')来指定表压缩格式为zstd。 select_statement 否 用于CTAS命令,将源表的select查询结果或某条数据插入到新创建的DLI表中。
  • 示例1:创建DLI非分区表 示例说明:创建名为table1的DLI非分区表,并用STORED AS关键字指定该表的存储格式为orc格式。 在您的实际使用中,可以将DLI表存储为textfile, avro, orc, sequencefile, rcfile, parquet等类型。 1 2 3 4 5 CREATE TABLE IF NOT EXISTS table1 ( col_1 STRING, col_2 INT ) STORED AS orc;
  • 示例2:创建DLI分区表 示例说明:创建一个名为student的分区表,该分区表使用院系编号(facultyNo)和班级编号(classNo)进行分区,该student表会同时按照不同的院系编号(facultyNo)和不同的班级编号(classNo)分区。 在实际的使用过程中,您可以选择合适的分区字段并将其添加到PARTITIONED BY关键字后。 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTS student( id int, name STRING ) STORED AS avro PARTITIONED BY ( facultyNo INT, classNo INT );
  • 关键字 IF NOT EXISTS:指定该关键字以避免表已经存在时报错。 COMMENT:字段或表描述。 PARTITIONED BY:指定分区字段。 ROW FORMAT:行数据格式。 STORED AS:指定所存储的文件格式,当前该关键字只支持指定TEXTFILE, AVRO, ORC, SEQUENCEFILE, RCFILE, PARQUET几种格式。创建DLI表时必须指定此关键字。 TBLPROPERTIES:用于为表添加key/value的属性。 在表存储格式为PARQUET时,可以通过指定TBLPROPERTIES(parquet.compression = 'zstd')来指定表压缩格式为zstd。 AS:使用CTAS创建表。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name1 col_type1 [COMMENT col_comment1], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name2 col_type2, [COMMENT col_comment2], ...)] [ROW FORMAT row_format] STORED AS file_format [TBLPROPERTIES (key = value)] [AS select_statement]; row_format: : SERDE serde_cls [WITH SERDEPROPERTIES (key1=val1, key2=val2, ...)] | DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char]
  • 注意事项 CTAS建表语句不能指定表的属性。 Hive DLI表不支持在建表时指定多字符的分隔符。 关于分区表的使用说明: 创建分区表时,PARTITONED BY中指定分区列必须是不在表中的列,且需要指定数据类型。分区列支持string, boolean, tinyint, smallint, short, int, bigint, long, decimal, float, double, date, timestamp等hive开源支持的类型。 支持指定多个分区字段,分区字段只需在PARTITIONED BY关键字后指定,不能像普通字段一样在表名后指定,否则将出错。 单表分区数最多允许200000个。 Spark 3.3及以上版本支持使用Hive语法的CTAS语句创建分区表。
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 语法格式 将SELECT查询结果插入到表中: 1 2 3 4 5 6 7 INSERT INTO DLI_TABLE SELECT field1,field2... [FROM DLI_TEST] [WHERE where_condition] [LIMIT num] [GROUP BY field] [ORDER BY field] ...; 将某条数据插入到表中: 1 2 INSERT INTO DLI_TABLE VALUES values_row [, values_row ...];
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE [IF NOT EXISTS] TABLE_NAME( FIELDNAME1 FIELDTYPE1, FIELDNAME2 FIELDTYPE2) USING CSS OPTIONS ( 'es.nodes'='xx', 'resource'='type_path_in_CSS', 'pushdown'='true', 'strict'='false', 'batch.size.entries'= '1000', 'batch.size.bytes'= '1mb', 'es.nodes.wan.only' = 'true', 'es.mapping.id' = 'FIELDNAME');
  • 示例 1 2 3 4 5 6 7 8 CREATE TABLE IF NOT EXISTS dli_to_css (doc_id String, name string, age int) USING CSS OPTIONS ( es.nodes 'to-css-1174404703-LzwpJEyx.datasource.com:9200', resource '/dli_index/dli_type', pushdown 'false', strict 'true', es.nodes.wan.only 'true', es.mapping.id 'doc_id');
  • 语法格式 将SELECT查询结果插入到表中: 1 2 3 4 5 6 7 INSERT INTO DLI_TABLE SELECT field1,field2... [FROM DLI_TEST] [WHERE where_condition] [LIMIT num] [GROUP BY field] [ORDER BY field] ...; 将某条数据插入到表中: 1 2 INSERT INTO DLI_TABLE VALUES values_row [, values_row ...];
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 语法格式 1 2 3 4 5 6 7 CREATE TABLE [IF NOT EXISTS] TABLE_NAME USING JDBC OPTIONS ( 'url'='xx', 'driver'='DRIVER_NAME', 'dbtable'='db_name_in_RDS.table_name_in_RDS', 'passwdauth' = 'xxx', 'encryption' = 'true');
  • 示例 访问MySQL 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS dli_to_rds USING JDBC OPTIONS ( 'url'='jdbc:mysql://to-rds-117405104-3eAHxnlz.datasource.com:3306', 'driver'='com.mysql.jdbc.Driver', 'dbtable'='rds_test.test1', 'passwdauth' = 'xxx', 'encryption' = 'true'); 访问PostGre 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS dli_to_rds USING JDBC OPTIONS ( 'url'='jdbc:postgresql://to-rds-1174405119-oLRHAGE7.datasource.com:3306/postgreDB', 'driver'='org.postgresql.Driver', 'dbtable'='pg_schema.test1', 'passwdauth' = 'xxx', 'encryption' = 'true');
  • 语法格式 将SELECT查询结果插入到表中: 1 2 3 4 5 6 7 INSERT INTO DLI_TABLE SELECT field1,field2... [FROM DLI_TEST] [WHERE where_condition] [LIMIT num] [GROUP BY field] [ORDER BY field] ...; 将某条数据插入到表中: 1 2 INSERT INTO DLI_TABLE VALUES values_row [, values_row ...];
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 示例 1 2 3 4 5 6 CREATE TABLE IF NOT EXISTS dli_to_dws USING JDBC OPTIONS ( 'url'='jdbc:postgresql://to-dws-1174405119-ih1Ur78j.datasource.com:8000/postgres', 'dbtable'='test_dws', 'passwdauth' = 'xxx', 'encryption' = 'true');
  • 关键字 PARTITION BY:可以用一个或多个键分区。和GROUP BY子句类似,PARTITION BY将表按分区键分区,每个分区是一个窗口,窗口函数作用于各个分区。单表分区数最多允许7000个。 ORDER BY:决定窗口函数求值的顺序。可以用一个或多个键排序。通过ASC或DESC决定升序或降序。窗口由WINDOW子句指定。如果不指定,默认窗口等同于ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,即窗口从表或分区(如果OVER子句中用PARTITION BY分区)的初始处到当前行。 WINDOW:通过指定一个行区间来定义窗口。 CURRENT ROW:表示当前行。 num PRECEDING:定义窗口的下限,即窗口从当前行向前数num行处开始。 UNBOUNDED PRECEDING:表示窗口没有下限。 num FOLLOWING:定义窗口的上限,即窗口从当前行向后数num行处结束。 UNBOUNDED FOLLOWING:表示窗口没有上限。 ROWS BETWEEN…和RANGE BETWEEN…的区别: ROW为物理窗口,即根据ORDER BY子句排序后,取前N行及后N行的数据计算(与当前行的值无关,只与排序后的行号相关)。 RANGE为逻辑窗口,即指定当前行对应值的范围取值,列数不固定,只要行值在范围内,对应列都包含在内。 窗口有以下多种场景,如 窗口只包含当前行。 1 ROWS BETWEEN CURRENT ROW AND CURRENT ROW 窗口从当前行向前数3行开始,到当前行向后数5行结束。 1 ROWS BETWEEN 3 PRECEDING AND 5 FOLLOWING 窗口从表或分区的开头开始,到当前行结束。 1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 窗口从当前行开始,到表或分区的结尾结束。 1 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING 窗口从表或分区的开头开始,到表或分区的结尾结束。 1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  • 语法格式 1 2 3 4 5 SELECT window_func(args) OVER ([PARTITION BY col_name, col_name, ...] [ORDER BY col_name, col_name, ...] [ROWS | RANGE BETWEEN (CURRENT ROW | (UNBOUNDED |[num]) PRECEDING) AND (CURRENT ROW | ( UNBOUNDED | [num]) FOLLOWING)]);
  • 示例 将“SELECT courseId FROM course_info WHERE courseName = 'Biology'”定义为公共表达式nv,然后在后续的查询中直接利用nv代替该SELECT语句。 1 WITH nv AS (SELECT courseId FROM course_info WHERE courseName = 'Biology') SELECT DISTINCT courseId FROM nv;
  • 示例 对表student_info按字段name进行分组,计算每组中记录数,若其记录数等于子查询中表course_info的记录数,返回表student_info中字段name等于表course_info字段name的记录数。 1 2 3 SELECT name FROM student_info GROUP BY name HAVING count(name) = (SELECT count(*) FROM course_info);
  • 关键字 ALL:返回重复的行。为默认选项。其后只能跟*,否则会出错。 DISTINCT:从结果集移除重复的行。 WHERE:WHERE子句嵌套将利用子查询的结果作为过滤条件。 operator:包含关系运算符中的等式与不等式操作符及IN,NOT IN,EXISTS,NOT EXISTS操作符。 当operator为IN或者NOT IN时,子查询的返回结果必须是单列。 当operator为EXISTS或者NOT EXISTS时,子查询中一定要包含WHERE条件过滤。当子查询中有字段与外部查询相同时,需要在该字段前加上表名。
共100000条