华为云用户手册

  • 示例 创建Oracle跨源表 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTS oracleTest USING ORACLE OPTIONS ( 'url'='jdbc:oracle:thin:@//192.168.168.40:1521/helowin', 'driver'='oracle.jdbc.driver.OracleDriver', 'dbtable'='test.Student', 'user' = 'test', 'password' = 'test', 'resource' = 'obs://rest-authinfo/tools/oracle/driver/ojdbc6.jar' );
  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE TABLE [IF NOT EXISTS] TABLE_NAME USING ORACLE OPTIONS ( 'url'='xx', 'driver'='DRIVER_NAME', 'dbtable'='db_in_oracle.table_in_oracle', 'user' = 'xxx', 'password' = 'xxx', 'resource' = 'obs://rest-authinfo/tools/oracle/driver/ojdbc6.jar' );
  • 关键字 表1 CREATE TABLE参数描述 参数 描述 url Oracle的连接地址。 Oracle url支持以下格式: 格式一:jdbc:oracle:thin:@host:port:SID,其中SID是oracle数据库的唯一标识符。 格式二:jdbc:oracle:thin:@//host:port/service_name;这种方式是Oracle推荐的,对于集群来说,每个节点的SID可能不一致,但ServiceName是一致的,包含所有节点。 driver Oracle驱动类名: oracle.jdbc.driver.OracleDriver dbtable 指定在Oracle关联的表名,或者"用户名.表名",例如:public.table_name。 user Oracle用户名。 password Oracle用户名密码。 resource Oracle驱动包的OBS路径。 例如:obs://rest-authinfo/tools/oracle/driver/ojdbc6.jar resource中定义的driver jar包如果被更新,需要重启队列,才会生效。
  • 关键字 ALL:返回重复的行。为默认选项。其后只能跟*,否则会出错。 DISTINCT:从结果集移除重复的行。 WHERE:WHERE子句嵌套将利用子查询的结果作为过滤条件。 operator:包含关系运算符中的等式与不等式操作符及IN,NOT IN,EXISTS,NOT EXISTS操作符。 当operator为IN或者NOT IN时,子查询的返回结果必须是单列。 当operator为EXISTS或者NOT EXISTS时,子查询中一定要包含WHERE条件过滤。当子查询中有字段与外部查询相同时,需要在该字段前加上表名。
  • 示例 左外连接时利用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);
  • 功能描述 Spark为了提高性能会缓存Parquet的元数据信息。当更新了Parquet表时,缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据作业执行报错,报错信息参考如下: DLI .0002: FileNotFoundException: getFileStatus on error message 该场景下就需要使用REFRESH TABLE来解决该问题。REFRESH TABLE是用于重新整理某个分区的文件,重用之前的表元数据信息,能够检测到表的字段的增加或者减少,主要用于表中元数据未修改,表的数据修改的场景。
  • 功能描述 在DLI数据多版本功能开启后,过期的备份数据后续在执行insert overwrite或者truncate语句时会被系统直接清理。OBS并行文件系统可以通过配置回收站加速删除操作过期的备份数据。通过在表属性添加配置“dli.multi.version.trash.dir”即可开启回收站功能。开启和关闭多版本语法请参考开启或关闭数据多版本。 DLI数据多版本功能当前仅支持通过Hive语法创建的OBS表,具体建表SQL语法可以参考使用Hive语法创建OBS表。
  • 参数说明 表1 参数说明 参数 描述 db_name 数据库名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。 table_name 表名称。 obs桶多版本回收站目录 当前OBS表所在桶下的一个目录,您可以根据需要调整目录路径。比如当前OBS表所在路径为“obs://bucketName/filePath”,OBS表目录下已创建Trash目录,则该回收站目录可以指定为“obs://bucketName/filePath/Trash”。
  • 注意事项 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
  • 示例代码 计算所有商品库存(items)的方差。命令示例如下: select variance(items) from warehouse; --等效于如下语句。 select var_pop(items) from warehouse; 返回结果如下: _c0 203.42352 与group by配合使用,对所有商品按照仓库(warehourseId)进行分组,并计算同组商品库存(items)的方差。命令示例如下: select warehourseId, variance(items) from warehourse group by warehourseId; --等效于如下语句。 select warehourseId, var_pop(items) from warehourse group by warehourseId; 返回结果如下: 1 2 3 4 warehouseId _c1 city1 19.23124 city2 17.23344 city3 12.43425
  • 功能描述 在DLI数据多版本功能开启后,备份数据默认保留7天,您可以通过配置系统参数“dli.multi.version.retention.days”调整保留周期。保留周期外的多版本数据后续在执行insert overwrite或者truncate语句时会自动进行清理。在添加列或者修改分区表时,也可以设置表属性“dli.multi.version.retention.days”调整保留周期。 开启和关闭多版本功能SQL语法请参考开启或关闭数据多版本。 DLI数据多版本功能当前仅支持通过Hive语法创建的OBS表,具体建表SQL语法可以参考使用Hive语法创建OBS表。
  • 语法格式 将SELECT查询结果插入到表中 1 2 INSERT INTO [TABLE] [db_name.]table_name [PARTITION part_spec] select_statement; 1 2 INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] select_statement; part_spec: : (part_col_name1=val1 [, part_col_name2=val2, ...]) 将某条数据插入到表中 1 2 INSERT INTO [TABLE] [db_name.]table_name [PARTITION part_spec] VALUES values_row [, values_row ...]; 1 2 INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] VALUES values_row [, values_row ...]; values_row: : (val1 [, val2, ...])
  • 关键字 表1 INSERT参数 参数 描述 db_name 需要执行INSERT命令的表所在数据库的名称。 table_name 需要执行INSERT命令的表的名称。 part_spec 指定详细的分区信息。若分区字段为多个字段,需要包含所有的字段,但是可以不包含对应的值,系统会匹配上对应的分区。单表分区数最多允许100000个。 select_statement 源表上的SELECT查询(支持DLI表、OBS表)。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 示例 导入数据前已参考创建OBS表或者创建DLI表中的示例描述创建对应的表。 将SELECT查询结果插入到表中 使用DataSource语法创建一个parquet格式的分区表 CREATE TABLE data_source_tab1 (col1 INT, p1 INT, p2 INT) USING PARQUET PARTITIONED BY (p1, p2); 插入查询结果到分区 (p1 = 3, p2 = 4)中 INSERT INTO data_source_tab1 PARTITION (p1 = 3, p2 = 4) SELECT id FROM RANGE(1, 3); 插入新的查询结果到分区 (p1 = 3, p2 = 4) 中 INSERT OVERWRITE TABLE data_source_tab1 PARTITION (p1 = 3, p2 = 4) SELECT id FROM RANGE(3, 5); 将某条数据插入表中 使用Hive语法创建一个parquet格式的分区表 CREATE TABLE hive_serde_tab1 (col1 INT, p1 INT, p2 INT) USING HIVE OPTIONS(fileFormat 'PARQUET') PARTITIONED BY (p1, p2); 插入两条数据到分区 (p1 = 3, p2 = 4)中 INSERT INTO hive_serde_tab1 PARTITION (p1 = 3, p2 = 4) VALUES (1), (2); 插入新的数据到分区 (p1 = 3, p2 = 4) 中 INSERT OVERWRITE TABLE hive_serde_tab1 PARTITION (p1 = 3, p2 = 4) VALUES (3), (4);
  • 示例 对表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);
  • 关键字 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;
  • 示例 将“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;
  • 参数说明 表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 CREATE TABLE参数描述 参数 描述 host OpenTSDB连接地址。 获取OpenTSDB连接地址需要先创建跨源连接,管理控制台操作请参考经典型跨源连接和增强型跨源连接。 访问CloudTable OpenTSDB,填写OpenTSDB链接地址。 访问 MRS OpenTSDB,若使用增强型跨源连接,填写OpenTSDB所在节点IP与端口,格式为"IP:PORT",OpenTSDB存在多个节点时,用分号间隔。若使用经典型跨源,填写经典型跨源返回的连接地址,管理控制台操作请参考经典型跨源连接。 metric 所创建的DLI表对应的OpenTSDB中的指标名称。 tags metric对应的标签,用于归类、过滤、快速检索等操作。可以是1个到8个,以“,”分隔,包括对应metric下所有tagk的值。
  • 参数说明 表1 参数描述 参数 是否必选 描述 db_name 否 Database名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以下划线开头。 table_name 是 表名称。 col_name 是 列字段名称。col_name必须是已存在的列。 col_type 是 列数据类型。本语法不支持修改列数据类型,这里指定的是创建表时指定的列数据类型。 col_comment 是 修改后的列注释信息。注释内容为长度不超过1024字节的有效字符串。
  • 数学函数概览 DLI所支持的数学函数如数学函数所示。 表1 数学函数 函数 命令格式 返回值 功能简介 abs abs(DOUBLE a) DOUBLE或INT 取绝对值。 acos acos(DOUBLE a) DOUBLE 返回给定角度a的反余弦值。 asin asin(DOUBLE a) DOUBLE 返回给定角度a的反正弦值。 atan atan(DOUBLE a) DOUBLE 返回给定角度a的反正切值。 bin bin(BIGINT a) STRING 返回二进制格式。 bround bround(DOUBLE a) DOUBLE HALF_EVEN模式四舍五入,与传统四舍五入方式的区别在于,对数字5进行操作时,由前一位数字来决定,前一位数字为奇数,增加一位,前一位数字为偶数,舍弃一位。例如:bround(7.5)=8.0,bround(6.5)=6.0 bround bround(DOUBLE a, INT d) DOUBLE 保留小数点后d位,d位之后数字以HALF_EVEN模式四舍五入。与传统四舍五入方式的区别在于,对数字5进行操作时,由前一位数字来决定,前一位数字为奇数,增加一位,前一位数字为偶数,舍弃一位。例如:bround(8.25, 1) = 8.2, bround(8.35, 1) = 8.4。 cbrt cbrt(DOUBLE a) DOUBLE 返回a的立方根。 ceil ceil(DOUBLE a) DECIMAL 将参数向上舍入为最接近的整数。例如:ceil(21.2),返回22。 conv conv(BIGINT num, INT from_base, INT to_base), conv(STRING num, INT from_base, INT to_base) STRING 进制转换,将from_base进制下的num转化为to_base进制下面的数。例如:将5从十进制转换为四进制,conv(5,10,4)=11。 cos cos(DOUBLE a) DOUBLE 返回给定角度a的余弦值。 cot1 cot1(DOUBLE a) DOUBLE或DECIMAL类型 计算number的余切函数,输入为弧度值。 degress degrees(DOUBLE a) DOUBLE 返回弧度所对应的角度。 e e() DOUBLE 返回e的值。 exp exp(DOUBLE a) DOUBLE 返回e的a次方。 factorial factorial(INT a) BIGINT 返回a的阶乘。 floor floor(DOUBLE a) BIGINT 对给定数据进行向下舍入最接近的整数。例如:floor(21.2),返回21。 greatest greatest(T v1, T v2, ...) DOUBLE 返回列表中的最大值。 hex hex(BIGINT a) hex(STRING a) STRING 将整数或字符转换为十六进制格式。 least least(T v1, T v2, ...) DOUBLE 返回列表中的最小值。 ln ln(DOUBLE a) DOUBLE 返回给定数值的自然对数。 log log(DOUBLE base, DOUBLE a) DOUBLE 返回给定底数及指数返回自然对数。 log10 log10(DOUBLE a) DOUBLE 返回给定数值的以10为底自然对数。 log2 log2(DOUBLE a) DOUBLE 返回给定数值的以2为底自然对数。 median median(colname) DOUBLE或DECIMAL 计算中位数。 negative negative(INT a) DECIMAL或INT 返回a的相反数,例如negative(2),返回-2。 percentlie percentile(colname,DOUBLE p) DOUBLE或ARRAY 计算精确百分位数,适用于小数据量。先对指定列升序排列,然后取精确的第p位百分数。p必须在0和1之间。 percentlie_approx percentile_approx (colname,DOUBLE p) DOUBLE或ARRAY 计算近似百分位数,适用于大数据量。先对指定列升序排列,然后取第p位百分数对应的值。 pi pi() DOUBLE 返回pi的值。 pmod pmod(INT a, INT b) DECIMAL或INT 返回a除b的余数的绝对值。 positive positive(INT a) DECIMAL、DOUBLE或INT 返回a的值,例如positive(2),返回2。 pow pow(DOUBLE a, DOUBLE p), power(DOUBLE a, DOUBLE p) DOUBLE 返回a的p次幂。 radians radians(DOUBLE a) DOUBLE 返回角度所对应的弧度。 rand rand(INT seed) DOUBLE 返回大于或等于0且小于1的平均分布随机数。如果指定种子seed,则会得到一个稳定的随机数序列。 round round(DOUBLE a) DOUBLE 四舍五入。 round round(DOUBLE a, INT d) DOUBLE 小数部分d位之后数字四舍五入,例如round(21.263,2),返回21.26。 shiftleft shiftleft(BIGINT a, INT b) INT 有符号左边移,将a的二进制数按位左移b位。 shiftright shiftright(BIGINT a, INT b) INT 有符号右移,将a的二进制数按位右移b位。 shiftrightunsigned shiftrightunsigned(BIGINT a, INT b) INT 无符号右移,将a的二进制数按位右移b位。 sign sign(DOUBLE a) DOUBLE 返回a所对应的正负号,a为正返回1.0,a为负,返回-1.0,否则返回0.0。 sin sin(DOUBLE a) DOUBLE 返回给定角度a的正弦值。 sqrt sqrt(DOUBLE a) DOUBLE 返回数值的平方根。 tan tan(DOUBLE a) DOUBLE 返回给定角度a的正切值。 父主题: 数学函数
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 注意事项 DLI表必须已经存在。 在“创建表关联HBase”章节创建的表中,OPTIONS里的Cols指定的列族如果不存在,insert into执行时会报错。 如果插入的(rowkey, 列族, 列)已存在,则执行插入操作时,会覆盖hbase中相同的(rowkey, 列族, 列)。 不建议对同一张表并发插入数据,因为有一定概率发生并发冲突,导致插入失败。 不支持INSERT OVERWRITE语法。
  • 语法格式 将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 ...];
  • 注意事项 所要修改位置的表分区必须是已经存在的,否则将报错。 “partition_specs”中的参数默认带有“( )”,例如:PARTITION (dt='2009-09-09',city='xxx')。 所指定的新的OBS路径必须是已经存在的绝对路径,否则将报错。 若新增分区指定的路径包含子目录(或嵌套子目录),则子目录下面的所有文件类型及内容也将作为该分区的记录。用户需要保证该分区目录下所有文件类型和文件内容与表的字段一致,否则查询将报错。
  • 示例 将student表的分区dt='2008-08-08',city='xxx'的OBS路径设置为“obs://bucketName/fileName/student/dt=2008-08-08/city=xxx”。 1 2 3 ALTER TABLE student PARTITION(dt='2008-08-08',city='xxx') SET LOCATION 'obs://bucketName/fileName/student/dt=2008-08-08/city=xxx';
  • 语法格式 将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 想要插入到表中的值,列与列之间用逗号分隔。
  • 示例 通过将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);
共100000条