华为云用户手册

  • 示例 访问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');
  • 语法格式 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)]);
  • 关键字 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
  • 示例 将“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条件过滤。当子查询中有字段与外部查询相同时,需要在该字段前加上表名。
  • 示例 右外连接和左外连接相似,但是会将右边表(这里的course_info)中的所有记录返回,没有匹配值的左表记录将返回NULL。 1 2 SELECT student_info.name, course_info.courseName FROM student_info RIGHT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 示例 左外连接时利用student_info表中的courseId与course_info中的courseId进行匹配,返回已经选课的学生姓名及所选的课程名称,没有匹配值的右表记录将返回NULL。 1 2 SELECT student_info.name, course_info.courseName FROM student_info LEFT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 示例 通过将student_info与course_info两张表中的课程编号匹配建立JOIN连接,来查看学生姓名及所选课程名称。 1 2 SELECT student_info.name, course_info.courseName FROM student_info JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 关键字 GROUPING SETS:为对GROUP BY的扩展,例如 SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b)); 将转换为以下一条查询: 1 2 SELECT a, b, sum(expression) FROM table GROUP BY a, b; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS(a,b); 将转换为以下两条查询: 1 2 3 SELECT a, NULL, sum(expression) FROM table GROUP BY a; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY b; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a); 将转换为以下两条查询: 1 2 3 SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a, b, ()); 将转换为以下四条查询: 1 2 3 4 5 6 7 SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a, NULL; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY NULL, b; UNION SELECT NULL, NULL, sum(expression) FROM table;
  • 关键字 ROLLUP:为GROUP BY的扩展,例如:SELECT a, b, c, SUM(expression) FROM table GROUP BY a, b, c WITH ROLLUP;将转换成以下四条查询: (a, b, c)组合小计 1 2 SELECT a, b, c, sum(expression) FROM table GROUP BY a, b, c; (a, b)组合小计 1 2 SELECT a, b, NULL, sum(expression) FROM table GROUP BY a, b; (a)组合小计 1 2 SELECT a, NULL, NULL, sum(expression) FROM table GROUP BY a; 总计 1 SELECT NULL, NULL, NULL, sum(expression) FROM table;
  • 关键字 GROUP BY:按列可分为单列GROUP BY与多列GROUP BY。 单列GROUP BY:指GROUP BY子句中仅包含一列,col_name_list中包含的字段必须出现在attr_expr_list的字段内,attr_expr_list中可以使用多个聚合函数,比如count(),sum(),聚合函数中可以包含其他字段。 多列GROUP BY:指GROUP BY子句中不止一列,查询语句将按照GROUP BY的所有字段分组,所有字段都相同的记录将被放在同一组中,同样,GROUP BY中出现的字段必须在attr_expr_list的字段内,attr_expr_list也可以使用聚合函数。
  • 语法格式 1 2 3 4 5 6 7 SELECT [ALL | DISTINCT] attr_expr_list FROM table_reference [WHERE where_condition] [GROUP BY col_name_list] [ORDER BY col_name_list][ASC | DESC] [CLUSTER BY col_name_list | DISTRIBUTE BY col_name_list] [SORT BY col_name_list]] [LIMIT number];
  • 关键字 表1 SELECT关键字说明 参数 描述 ALL ALL关键字用于返回数据库所有匹配的行,包括重复的行。ALL关键字的后面只能跟*,否则执行语句会出错。 ALL是SQL语句的默认行为,通常不会被明确写出,如果不指定ALL或DISTINCT,查询结果将包含所有的行,即使是重复的行数据也将被返回。 DISTINCT 在SELECT语句中使用DISTINCT关键字时,系统会在查询结果中去除重复的数据,确保结果的唯一性。 WHERE 指定查询的过滤条件,支持算术运算符、关系运算符和逻辑运算符。 where_condition 过滤条件。 GROUP BY 指定分组的字段,支持单字段及多字段分组。 col_name_list 字段列表。 ORDER BY 对查询结果进行排序。 ASC/DESC ASC为升序,DESC为降序,默认为ASC。 CLUSTER BY 为分桶且排序,按照分桶字段先进行分桶,再在每个桶中依据该字段进行排序,即当DISTRIBUTE BY的字段与SORT BY的字段相同且排序为降序时,两者的作用与CLUSTER BY等效。 DISTRIBUTE BY 指定分桶字段,不进行排序。 SORT BY 将会在桶内进行排序。 LIMIT 对查询结果进行限制,number参数仅支持INT类型。
  • 示例 回收用户user_name1对于数据库db1的删除数据库权限。 1 REVOKE DROP_DATABASE ON databases.db1 FROM USER user_name1; 回收用户user_name1对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM USER user_name1; 回收角色role_name对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM ROLE role_name;
  • 注意事项 privilege必须为赋权对象在resource中的已授权限,否则会回收失败。Privilege支持的权限类型可参见数据权限列表。 resource可以是queue、database、table、view、column,格式分别为: queue的格式为:queues.queue_name database的格式为:databases.db_name table的格式为:databases.db_name.tables.table_name view的格式为:databases.db_name.tables.view_name column的格式为:databases.db_name.tables.table_name.columns.column_name
  • 注意事项 resource可以是queue、database、table、column、view,格式分别为: queue的格式为:queues.queue_name database的格式为:databases.db_name table的格式为:databases.db_name.tables.table_name column的格式为:databases.db_name.tables.table_name.columns.column_name view的格式为:databases.db_name.tables.view_name
  • 示例 给用户user_name1授予数据库db1的删除数据库权限。 1 GRANT DROP_DATABASE ON databases.db1 TO USER user_name1; 给用户user_name1授予数据库db1的表tb1的SELECT权限。 1 GRANT SELECT ON databases.db1.tables.tb1 TO USER user_name1; 给角色role_name授予数据库db1的表tb1的SELECT权限。 1 GRANT SELECT ON databases.db1.tables.tb1 TO ROLE role_name;
  • 注意事项 privilege必须是可授权限中的一种。且如果赋权对象在resource或上一级resource上已经有对应权限时,则会赋权失败。Privilege支持的权限类型可参见数据权限列表。 resource可以是queue、database、table、view、column,格式分别为: queue的格式为:queues.queue_name queue支持的Privilege权限类型可以参考下表: 操作 说明 DROP_QUEUE 删除队列 SUBMIT_JOB 提交作业 CANCEL_JOB 终止作业 RESTART 重启队列 SCALE_QUEUE 扩缩容队列 GRANT_PRIVILEGE 队列的赋权 REVOKE_PRIVILEGE 队列权限的回收 SHOW_PRIVILEGES 查看其他用户具备的队列权限 database的格式为:databases.db_name database支持的Privilege权限类型可参见数据权限列表。 table的格式为:databases.db_name.tables.table_name table支持的Privilege权限类型可参见数据权限列表。 view的格式为:databases.db_name.tables.view_name view支持的Privilege权限类型和table一样,具体可以参考数据权限列表中table的权限列表描述。 column的格式为:databases.db_name.tables.table_name.columns.column_name column支持的Privilege权限类型仅为:SELECT
  • 数据权限列表 DLI中SQL语句与数据库、表、角色相关的权限矩阵如表1所示。 表1 权限矩阵 分类 SQL语句 权限 说明 Database DROP DATABASE db1 database.db1的DROP_DATABASE权限 - CREATE TABLE tb1(...) database.db1的CREATE_TABLE权限 - CREATE VIEW v1 database.db1的CREATE_VIEW权限 - EXPLAIN query database.db1的EXPLAIN权限 query需要其相应的权限。 Table SHOW CREATE TABLE tb1 database.db1.tables.tb1的SHOW_CREATE_TABLE权限 - DESCRIBE [EXTENDED|FORMATTED] tb1 databases.db1.tables.tb1的DESCRIBE_TABLE权限 - DROP TABLE [IF EXISTS] tb1 database.db1.tables.tb1的DROP_TABLE权限 - SELECT * FROM tb1 database.db1.tables.tb1的SELECT权限 - SELECT count(*) FROM tb1 database.db1.tables.tb1的SELECT权限 - SELECT * FROM view1 database.db1.tables.view1的SELECT权限 - SELECT count(*) FROM view1 database.db1.tables.view1的SELECT权限 - LOAD DLI TABLE database.db1.tables.tb1的INSERT_INTO_TABLE权限 - INSERT INTO TABLE database.db1.tables.tb1的INSERT_INTO_TABLE权限 - INSERT OVERWRITE TABLE database.db1.tables.tb1的INSERT_OVERWRITE_TABLE权限 - ALTER TABLE ADD COLUMNS database.db1.tables.tb1的ALTER_TABLE_ADD_COLUMNS权限 - ALTER TABLE RENAME database.db1.tables.tb1的ALTER_TABLE_RENAME权限 - ROLE&PRIVILEGE CREATE ROLE db的CREATE_ROLE权限 - DROP ROLE db的DROP_ROLE权限 - SHOW ROLES db的SHOW_ROLES权限 - GRANT ROLES db的GRANT_ROLE权限 - REVOKE ROLES db的REVOKE_ROLE权限 - GRANT PRIVILEGE db或table的GRANT_PRIVILEGE权限 - REVOKE PRIVILEGE db或table的REVOKE_PRIVILEGE权限 - SHOW GRANT db或table的SHOW_GRANT权限 - Privilege在进行数据库和表赋权或回收权限时,DLI支持的权限类型如下所示。 DATABASE上可赋权/回收的权限: DROP_DATABASE(删除数据库) CREATE_TABLE(创建表) CREATE_VIEW(创建视图) EXPLAIN(将SQL语句解释为执行计划) CREATE_ROLE(创建角色) DROP_ROLE(删除角色) SHOW_ROLES(显示角色) GRANT_ROLE(绑定角色) REVOKE_ROLE(解除角色绑定) DESCRIBE_TABLE(描述表) DROP_TABLE(删除表) SELECT(查询表) INSERT_INTO_TABLE(插入) INSERT_OVERWRITE_TABLE(重写) GRANT_PRIVILEGE(数据库的赋权) REVOKE_PRIVILEGE(数据库权限的回收) SHOW_PRIVILEGES(查看其他用户具备的数据库权限) ALTER_TABLE_ADD_PARTITION(在分区表中添加分区) ALTER_TABLE_DROP_PARTITION(删除分区表的分区) ALTER_TABLE_RENAME_PARTITION(重命名表分区) ALTER_TABLE_RECOVER_PARTITION(恢复表分区) ALTER_TABLE_SET_LOCATION(设置分区的路径) SHOW_PARTITIONS(显示所有分区) SHOW_CREATE_TABLE(查看建表语句) TABLE上可以赋权/回收的权限: DESCRIBE_TABLE(描述表) DROP_TABLE(删除表) SELECT(查询表) INSERT_INTO_TABLE(插入) INSERT_OVERWRITE_TABLE(重写) GRANT_PRIVILEGE(表的赋权) REVOKE_PRIVILEGE(表权限的回收) SHOW_PRIVILEGES(查看其他用户具备的表权限) ALTER_TABLE_ADD_COLUMNS(增加列) ALTER_TABLE_RENAME(重命名表) ALTER_TABLE_ADD_PARTITION(在分区表中添加分区) ALTER_TABLE_DROP_PARTITION(删除分区表的分区) ALTER_TABLE_RENAME_PARTITION(重命名表分区) ALTER_TABLE_RECOVER_PARTITION(恢复表分区) ALTER_TABLE_SET_LOCATION(设置分区的路径) SHOW_PARTITIONS(显示所有分区) SHOW_CREATE_TABLE(查看建表语句) 父主题: 数据权限相关
  • 关键字 表1 CREATE TABLE关键字描述 参数 描述 host OpenTSDB连接地址。 获取OpenTSDB连接地址需要先创建跨源连接,管理控制台操作请参考增强型跨源连接。 访问CloudTable OpenTSDB,填写OpenTSDB链接地址。 访问 MRS OpenTSDB,若使用增强型跨源连接,填写OpenTSDB所在节点IP与端口,格式为"IP:PORT",OpenTSDB存在多个节点时,用分号间隔。 metric 所创建的DLI表对应的OpenTSDB中的指标名称。 tags metric对应的标签,用于归类、过滤、快速检索等操作。可以是1个到8个,以“,”分隔,包括对应metric下所有tagk的值。
  • 注意事项 DLI表必须已经存在。 在“创建表关联HBase”章节创建的表中,OPTIONS里的Cols指定的列族如果不存在,insert into执行时会报错。 如果插入的(rowkey, 列族, 列)已存在,则执行插入操作时,会覆盖hbase中相同的(rowkey, 列族, 列)。 不建议对同一张表并发插入数据,因为有一定概率发生并发冲突,导致插入失败。 不支持INSERT OVERWRITE语法。
  • 参数说明 表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 CREATE TABLE test_hbase( ATTR1 int, ATTR2 int, ATTR3 string) using hbase OPTIONS ( 'ZKHost'='to-hbase-1174405101-CE1bDm5B.datasource.com:2181', 'TableName'='HBASE_TABLE', 'RowKey'='ATTR1', 'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2');
  • 关键字 表1 CREATE TABLE关键字说明 参数 描述 USING [CLOUDTABLE | HBASE] 指定hbase datasource,"CLOUDTABLE"或"HBASE"二选一,大小写不敏感。 ZKHost HBase集群的ZK连接地址。 获取ZK连接地址需要先创建跨源连接,管理控制台操作请参考增强型跨源连接。 访问CloudTable集群,填写ZK连接地址(内网)。 访问MRS集群,填写ZK所在节点IP与ZK对外端口,格式为:"ZK_IP1:ZK_PORT1,ZK_IP2:ZK_PORT2"。 说明: 访问MRS集群,只支持创建增强型跨源连接并且需要配置主机信息,管理控制台操作请参考增强型跨源连接,相关API信息请参考创建增强型跨源连接。 TableName 指定在HBase集群中已创建的表名。 RowKey 指定作为rowkey的dli关联表字段,支持单rowkey与组合rowkey。单rowkey支持数值与String类型,不需要指定长度。组合rowkey仅支持String类型定长数据,格式为:属性名1:长度,属性名2:长度。 Cols 通过逗号分隔的DLI表字段与HBase表的列之间的对应关系。其中,冒号前面放置DLI表字段,冒号后面放置HBase表信息,用‘.’分隔HBase表的列族与列名。
  • 注意事项 若所要创建的表已经存在将报错,可以通过添加IF NOT EXISTS参数跳过该错误。 OPTIONS中的所有参数是必选的,参数名称大小写不敏感,但参数值大小写敏感。 OPTIONS中引号内的值前后不能带空格,空格也会被当做有效值。 表名及列名的描述仅支持字符串常量。 创建表时要说明列名及对应的数据类型,目前支持的数据类型为:boolean、short、int、long、float、double和string。 作为RowKey的字段(如上述语法格式中的ATTR1),其值不能为null,长度要大于0,小于或等于32767。 Cols与RowKey中的字段加起来的数量必须与DLI表的字段保持一致,即表中所有的字段都到对应到Cols和RowKey中,但是顺序可以任意。 组合Rowkey只支持String类型,在使用组合Rowkey时,每个属性后面必须带上长度。当Rowkey指定的字段只有一个的时候,该字段的类型可以是支持的所有数据类型,并且不需要填写长度。 在组合Rowkey的场景中 插入Rowkey数据时,如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短,则会在数据后面补'\0'字符;如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长,则会在实际插入HBase的时候进行截断。 读取HBase上的Rowkey数据时,如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短,则会抛出异常(OutofBoundException);如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长,则会在读取时进行截断。
共100000条