华为云用户手册

  • 常用提取函数 域 描述 YEAR year() QUARTER quarter() MONTH month() WEEK week() DAY day() DAY_OF_MONTH day_of_month() DAY_OF_WEEK day_of_week() DOW day_of_week() DAY_OF_YEAR day_of_year() DOY day_of_year() YEAR_OF_WEEK year_of_week() YOW year_of_week() HOUR hour() MINUTE minute() SECOND second() TIMEZONE_HOUR timezone_hour() TIMEZONE_MINUTE timezone_minute() 例如: select second(timestamp '2020-02-12 15:32:33.215');-- 33 select timezone_hour(timestamp '2020-02-12 15:32:33.215');-- 8 MONTHNAME(date) 描述:获取月份名称。 SELECT monthname(timestamp '2019-09-09 12:12:12.000');-- SEPTEMBER SELECT monthname(date '2019-07-09');--JULY
  • Concatenation Operator : || || 操作符用于将相同类型的数组或数值串联起来。 SELECT ARRAY[1] || ARRAY[2]; _col0 -------- [1, 2] (1 row) SELECT ARRAY[1] || 2; _col0 -------- [1, 2] (1 row) SELECT 2 || ARRAY[1]; _col0 -------- [2, 1] (1 row)
  • 参数说明 IN | FROM schema_name 指定schema名称,未指定时默认使用当前的schema。 LIKE 'identifier_with_wildcards' identifier_with_wildcards只支持包含“*”和“|”的规则匹配表达式。 其中“*”可以匹配单个或多个字符,“|”适用于匹配多种规则匹配表达式中的任意一种的情况,它用于分隔这些规则匹配表达式。 规则匹配表达式首尾的空格,不会参与匹配计算。 partition_spec 一个可选参数,使用键值对来指定分区列表,键值对之间通过逗号分隔。需要注意,指定分区时,表名不支持模糊匹配。
  • 示例 -- 演示数据准备 create schema show_schema; use show_schema; create table show_table1(a int,b string); create table show_table2(a int,b string); create table from_table1(a int,b string); create table in_table1(a int,b string); --查询表名以"show"开始的表的详细信息 show table extended like 'show*'; tab_name -------------------------------------------------------------------------- tableName:show_table1 owner:admintest location:hdfs://hacluster/user/hive/warehouse/show_schema.db/show_table1 InputFormat:org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat:org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns:struct columns {int a,string b} partitioned:false partitionColumns: totalNumberFiles:0 totalFileSize:0 tableName:show_table2 owner:admintest location:hdfs://hacluster/user/hive/warehouse/show_schema.db/show_table2 InputFormat:org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat:org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns:struct columns {int a,string b} partitioned:false partitionColumns: totalNumberFiles:0 totalFileSize:0 (1 row) -- 查询表名以"from"或者"show"开头的表的详细信息 show table extended like 'from*|show*'; tab_name ---------------------------------------------------------------------- tableName show_table1 owner admintest location hdfs://hacluster/user/hive/warehouse/show_table1 InputFormat org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns struct columns {int a,string b} partitioned false partitionColumns totalNumberFiles 0 totalFileSize null tableName from_table1 owner admintest location hdfs://hacluster/user/hive/warehouse/from_table1 InputFormat org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns struct columns {int a,string b} partitioned false partitionColumns totalNumberFiles 0 totalFileSize null tableName show_table2 owner admintest location hdfs://hacluster/user/hive/warehouse/show_table2 InputFormat org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns struct columns {int a,string b} partitioned false partitionColumns totalNumberFiles 0 totalFileSize null (1 row) -- 查询web schema下的page_views表扩展信息 show table extended from web like 'page*'; tab_name ----------------------------------------------------------------------------- tableName:page_views owner:admintest location:hdfs://hacluster/user/web.db/page_views InputFormat:org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat:org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat columns:struct columns {timestamp view_time,bigint user_id,string page_url} partitioned:true partitionColumns: struct partition_columns {date ds,string country} totalNumberFiles:0 totalFileSize:0 (1 row)
  • 示例 显示能够创建orders表的SQL 语句: CREATE TABLE orders ( orderkey bigint, orderstatus varchar, totalprice double, orderdate date ) WITH (format = 'ORC', location='/user',orc_compress='ZLIB',external=true, "auto.purge"=false); show create table orders; Create Table ------------------------------------------------- CREATE TABLE hive.default.orders ( orderkey bigint, orderstatus varchar, totalprice double, orderdate date ) WITH ( external_location = 'hdfs://hacluster/user', format = 'ORC', orc_compress = 'ZLIB', orc_compress_size = 262144, orc_row_index_stride = 10000, orc_stripe_size = 67108864 ) (1 row)
  • 字符串函数 这些函数假定输入字符串包含有效的UTF-8编码的Unicode代码点。不会显式检查UTF-8数据是否有效,对于无效的UTF-8数据,函数可能会返回错误的结果。可以使用from_utf8来更正无效的UTF-8数据。 此外,这些函数对Unicode代码点进行运算,而不是对用户可见的字符(或字形群集)进行运算。某些语言将多个代码点组合成单个用户感观字符(这是语言书写系统的基本单位),但是函数会将每个代码点视为单独的单位。 lower和upper函数不执行某些语言所需的区域设置相关、上下文相关或一对多映射。 chr(n) → varchar 描述:返回Unicode编码值为n的字符值。 select chr(100); --d char_length(string) → bigint 参考length(string) character_length(string) → bigint 参考length(string) codepoint(string) → integer 描述:返回单个字符对应的Unicode编码。 select codepoint('d'); --100 concat(string1, string2) → varchar 描述:字符串连接。 select concat('hello','world'); -- helloworld concat_ws(string0, string1, ..., stringN) → varchar 描述:将string1、string2、...,stringN,以string0作为分隔符串联成一个字符串。如果string0为null,则返回值为null。分隔符后的参数如果是NULL值,将会被跳过。 select concat_ws(',','hello','world'); -- hello,world select concat_ws(NULL,'def'); --NULL select concat_ws(',','hello',NULL,'world'); -- hello,world select concat_ws(',','hello','','world'); -- hello,,world concat_ws(string0, array(varchar)) → varchar 描述:将数组中的元素以string0为分隔符进行串联。如果string0为null,则返回值为null。数组中的任何null值都将被跳过。 select concat_ws(NULL,ARRAY['abc']);--NULL select concat_ws(',',ARRAY['abc',NULL,NULL,'xyz']); -- abc,xyz select concat_ws(',',ARRAY['hello','world']); -- hello,world decode(binary bin, string charset) →varchar 描述:根据给定的字符集将第一个参数编码为字符串,支持的字符集包括('UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'),当第一个参数为null,将返回null。 select decode(X'70 61 6e 64 61','UTF-8'); _col0 ------- panda (1 row) select decode(X'00 70 00 61 00 6e 00 64 00 61','UTF-16BE'); _col0 ------- panda (1 row) encode(string str, string charset) →binary 描述:字符串按照给定的字符集进行编码。 select encode('panda','UTF-8'); _col0 ---------------- 70 61 6e 64 61 (1 row) find_in_set (string str, string strList) →int 描述:返回str在逗号分隔的strList中第一次出现的位置。当有参数为null时,返回值也为null。 select find_in_set('ab', 'abc,b,ab,c,def'); -- 3 format_number(number x, int d) →string 描述:将数字x格式化为'#,###,###.##',保留d位小数,以字符串的形式返回结果。 select format_number(541211.212,2); -- 541,211.21 format(format,args...) → varchar 描述:参见Format。 locate(string substr, string str, int pos]) →int 描述:返回子串在字符串的第pos位后第一次出现的位置。没有满足条件的返回0。 select locate('aaa','bbaaaaa',6);-- 0 select locate('aaa','bbaaaaa',1);-- 3 select locate('aaa','bbaaaaa',4);-- 4 length(string) → bigint 描述:返回字符串的长度。 select length('hello');-- 5 levenshtein_distance(string1, string2) → bigint 描述:计算string1和string2的Levenshtein距离,即将string转为string2所需要的单字符编辑(包括插入、删除或替换)最少次数。 select levenshtein_distance('helo word','hello,world'); -- 3 hamming_distance(string1, string2) → bigint 描述:返回字符串1和字符串2的汉明距离,即对应位置字符不同的数量。 请注意,两个字符串的长度必须相同。 select hamming_distance('abcde','edcba');-- 4 instr(string,substring) → bigint 描述:查找substring 在string中首次出现的位置。 select instr('abcde', 'cd');--3 levenshtein(string1, string2) → bigint 参考levenshtein_distance(string1, string2) levenshtein_distance(string1, string2) → bigint 描述:返回字符串1和字符串2的Levenshtein编辑距离,即将字符串1更改为字符串2所需的最小单字符编辑(插入,删除或替换)次数。 select levenshtein_distance('apple','epplea');-- 2 lower(string) → varchar 描述:将字符转换为小写。 select lower('HELLo!');-- hello! lcase(string A) → varchar 描述:同lower(string)。 ltrim(string) → varchar 描述:去掉字符串开头的空格。 select ltrim(' hello');-- hello lpad(string, size, padstring) → varchar 描述:右填充字符串以使用padstring调整字符大小。如果size小于字符串的长度,则结果将被截断为size个字符。大小不能为负,并且填充字符串必须为非空。 select lpad('myk',5,'dog'); -- domyk
  • CASE 标准的SQL CASE表达式有两种模式。 “简单模式”从左向右查找表达式的每个value,直到找出相等的expression: CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] END 返回匹配value的result。如果没有匹配到任何值,则返回ELSE子句的result;如果没有ELSE子句,则返回空。示例: select a, case a when 1 then 'one' when 2 then 'two' else 'many' end from (values (1),(2),(3),(4)) as t(a); a | _col1 ---|------- 1 | one 2 | two 3 | many 4 | many (4 rows) “查找模式”从左向右判断每个condition的布尔值,直到判断为真,返回匹配result: CASE WHEN condition THEN result [ WHEN ... ] [ ELSE result ] END 如果判断条件都不成立,则返回ELSE子句的result;如果没有ELSE子句,则返回空。示例: select a,b, case when a=1 then 'one' when b=2 then 'tow' else 'many' end from (values (1,2),(3,4),(1,3),(4,2)) as t(a,b); a | b | _col2 ---|---|------- 1 | 2 | one 3 | 4 | many 1 | 3 | one 4 | 2 | tow (4 rows)
  • TRY 评估一个表达式,如果出错,则返回Null。类似于编程语言中的try catch。try函数一般结合COALESCE使用,COALESCE可以将异常的空值转为0或者空,以下情况会被try捕获: 分母为0 错误的cast操作或者函数入参 数字超过了定义长度 不推荐使用,应该明确以上异常,做数据预处理 示例: 假设有以下表,字段origin_zip中包含了一些无效数据: -- 创建表 create table shipping (origin_state varchar,origin_zip varchar,packages int ,total_cost int); -- 插入数据 insert into shipping values ('California','94131',25,100), ('California','P332a',5,72), ('California','94025',0,155), ('New Jersey','08544',225,490); -- 查询数据 SELECT * FROM shipping; origin_state | origin_zip | packages | total_cost --------------+------------+----------+------------ California | 94131 | 25 | 100 California | P332a | 5 | 72 California | 94025 | 0 | 155 New Jersey | 08544 | 225 | 490 (4 rows) 不使用Try查询失败: SELECT CAST(origin_zip AS BIGINT) FROM shipping; Query failed: Cannot cast 'P332a' to BIGINT 使用Try返回NULL: SELECT TRY(CAST(origin_zip AS BIGINT)) FROM shipping; origin_zip ------------ 94131 NULL 94025 08544 (4 rows) 不使用try查询失败: SELECT total_cost/packages AS per_package FROM shipping; Query failed: Division by zero 使用TRY和COALESCE返回默认值: SELECT COALESCE(TRY(total_cost/packages),0) AS per_package FROM shipping; per_package ------------- 4 14 0 19 (4 rows)
  • NULLIF nullif(value1, value2) 如果value1与value2相等,返回NULL;否则返回value1 。 select nullif(a,b) from (values (1,1),(1,2)) as t(a,b); -- _col0 ------- NULL 1 (2 rows) ZEROIFNULL(value) 如果value为null,返回0,否则返回原值。目前支持数值类型还有varchar类型。 select zeroifnull(a),zeroifnull(b),zeroifnull(c) from (values (null,13.11,bigint '157'),(88,null,bigint '188'),(55,14.11,null)) as t(a,b,c); _col0 | _col1 | _col2 -------|-------|------- 0 | 13.11 | 157 88 | 0.00 | 188 55 | 14.11 | 0 (3 rows) NVL(value1,value2) 如果value1为NULL,返回value2,否则,返回value1。 select nvl(NULL,3); -- 3 select nvl(2,3); --2 ISNULL(value) 如果value1为NULL,返回true,否则返回false。 Create table nulltest(col1 int,col2 int); insert into nulltest values(null,3); select isnull(col1),isnull(col2) from nulltest; _col0 | _col1 -------|------- true | false (1 row) ISNOTNULL(value) 如果value1为NULL,返回false,否则返回true。 select isnotnull(col1),isnotnull(col2) from nulltest; _col0 | _col1 -------|------- false | true (1 row)
  • IF IF函数是语言结构,它与下面的CASE表达式功能相同: CASE WHEN condition THEN true_value [ ELSE false_value ] END if(condition, true_value) 如果condition为真,返回true_value;否则返回NULL,true_value不进行计算。 select if(a=1,8) from (values (1),(1),(2)) as t(a); -- 8 8 NULL select if(a=1,'value') from (values (1),(1),(2)) as t(a); -- value value NULL if(condition, true_value, false_value) 如果condition为真,返回true_value;否则计算并返回false_value 。 select if(a=1,'on','off') from (values (1),(1),(2)) as t(a); _col0 ------- on on off (3 rows)
  • Data masking函数 数据脱敏(Data masking) 指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。 mask_first_n(string str[, int n]) →varchar 描述:返回str的屏蔽版本,前n个值被屏蔽。大写字母被转为"X",小写字母被转为"x",数字被转为"n"。 select mask_first_n('Aa12-5678-8765-4321', 4); _col0 --------------------- Xxnn-5678-8765-4321 (1 row) mask_last_n(string str[, int n]) →varchar 描述:返回str的屏蔽版本,后n个值被屏蔽。大写字母被转为"X",小写字母被转为"x",数字被转为"n"。 select mask_last_n('1234-5678-8765-Hh21', 4); _col0 --------------------- 1234-5678-8765-Xxnn (1 row) mask_show_first_n(string str[, int n]) →varchar 描述:返回str的屏蔽版本,只显示前n个字符。大写字母被转为"X",小写字母被转为"x",数字被转为"n"。 select mask_show_first_n('1234-5678-8765-4321',4); _col0 --------------------- 1234-nnnn-nnnn-nnnn (1 row) mask_show_flairst_n(string str[, int n]) →varchar 描述:返回str的屏蔽版本,只显示后n个值。大写字母被转为"X",小写字母被转为"x",数字被转为"n"。 select mask_show_last_n('1234-5678-8765-4321',4); _col0 --------------------- nnnn-nnnn-nnnn-4321 (1 row)) mask_hash(string|char|varchar str) →varchar 描述:返回基于str的散列值。散列是一致的,可以用于跨表连接被屏蔽的值。对于非字符串类型,返回NULL。 select mask_hash('panda'); _col0 ------------------------------------------------------------------ a7cdf5d0586b392473dd0cd08c9ba833240006a8a7310bf9bc8bf1aefdfaeadb (1 row) 父主题: SQL函数和操作符
  • 逻辑运算符 逻辑运算符 操作 描述 例子 AND 两个值都为true,则为true a AND b OR 两个值其中一个为true,则为true a OR b NOT 值为false,结果则为true NOT a 以下真值表反映了AND和OR如何处理NULL值: a b a AND b a OR b TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE NULL NULL TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE NULL FALSE NULL NULL TRUE NULL TRUE NULL FALSE FALSE NULL NULL NULL NULL NULL 以下真值表反映了NOT如何处理NULL值: value NOT value TRUE FALSE FALSE TRUE NULL NULL 父主题: SQL函数和操作符
  • 概述 所有的正则表达式函数都使用Java样式的语法。但以下情况除外: 使用多行模式(通过(?m)标志启用)时,只有\ n被识别为行终止符。 此外,不支持(?d)标志,因此不能使用。 大小写区分模式(通过(?i)标志启用)时,总是以unicode的模式去实现。同时,不支持上下文敏感匹配和局部敏感匹配。此外,不支持(?u)标志。 不支持Surrogate Pair编码方式。例如,\ uD800 \ uDC00不被视为U + 10000,必须将其指定为\ x {10000}。 边界字符(\b)无法被正确处理,因为它一个不带基字符的非间距标记。 \Q和\E在字符类(如[A-Z123])中不受支持,而是作为文本处理。 支持Unicode字符类(\ p {prop}),但有以下差异: 名称中的所有下划线都必须删除。例如,使用OldItalic而不是Old_Italic 必须直接指定脚本,不能带Is,script =或sc =前缀。示例:\ p {Hiragana} 必须使用In前缀指定块。不支持block =和blk =前缀。示例:\p{Mongolian} 必须直接指定类别,而不能带Is,general_category =或gc =前缀。示例:\p{L} 二进制属性必须直接指定,而不是Is。示例:\p{NoncharacterCodePoint}
  • 示例 创建一个新表orders,使用子句with指定创建表的存储格式、存储位置、以及是否为外表。 通过“auto.purge”参数可以指定涉及到数据移除操作(如DROP、DELETE、INSERT OVERWRITE、TRUNCATE TABLE)时是否清除相关数据: "auto.purge"='true'时,清除元数据和数据文件。 "auto.purge"='false'时,仅清除元数据,数据文件会移入HDFS回收站。默认值为“false”,且不建议用户修改此属性,避免数据删除后无法恢复。 CREATE TABLE orders ( orderkey bigint, orderstatus varchar, totalprice double, orderdate date ) WITH (format = 'ORC', location='/user',orc_compress='ZLIB',external=true, "auto.purge"=false); -- 通过DESC FORMATTED 语句,可以查看建表的详细信息 desc formatted orders ; Describe Formatted Table ------------------------------------------------------------------------------ # col_name data_type comment orderkey bigint orderstatus varchar totalprice double orderdate date # Detailed Table Information Database: default Owner: admintest LastAccessTime: 0 Location: hdfs://hacluster/user Table Type: EXTERNAL_TABLE # Table Parameters: EXTERNAL TRUE auto.purge false orc.compress.size 262144 orc.compression.codec ZLIB orc.row.index.stride 10000 orc.stripe.size 67108864 presto_query_id 20220812_084110_00050_srknk@default@HetuEngine presto_version 1.2.0-h0.cbu.mrs.320.r1-SNAPSHOT transient_lastDdlTime 1660293670 # Storage Information SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 (1 row) 创建一个新表,指定Row format: --建表时,指定表的字段分隔符为‘,’号(如果创建外表,要求数据文件中的每条记录的字段是以逗号进行分隔) CREATE TABLE student( id string,birthday string, grade int, memo string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; --建表时,指定字段分隔符为'\t',换行符为'\n' CREATE TABLE test( id int, name string , tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 如果表orders不存在,则创建表orders,并且增加表注释和列注释: CREATE TABLE IF NOT EXISTS orders ( orderkey bigint, orderstatus varchar, totalprice double COMMENT 'Price in cents.', orderdate date ) COMMENT 'A table to keep track of orders.'; insert into orders values (202011181113,'online',9527,date '2020-11-11'), (202011181114,'online',666,date '2020-11-11'), (202011181115,'online',443,date '2020-11-11'), (202011181115,'offline',2896,date '2020-11-11'); 使用表orders的列定义创建表bigger_orders: CREATE TABLE bigger_orders ( another_orderkey bigint, LIKE orders, another_orderdate date ); SHOW CREATE TABLE bigger_orders ; Create Table --------------------------------------------------------------------- CREATE TABLE hive.default.bigger_orders ( another_orderkey bigint, orderkey bigint, orderstatus varchar, totalprice double, ordersdate date, another_orderdate date ) WITH ( external = false, format = 'ORC', location = 'hdfs://hacluster/user/hive/warehouse/bigger_orders', orc_compress = 'GZIP', orc_compress_size = 262144, orc_row_index_stride = 10000, orc_stripe_size = 67108864 ) (1 row) 标号① 建表示例: CREATE EXTERNAL TABLE hetu_test (orderkey bigint, orderstatus varchar, totalprice double, orderdate date) PARTITIONED BY(ds int) SORT BY (orderkey, orderstatus) COMMENT 'test' STORED AS ORC LOCATION '/user' TBLPROPERTIES (orc_compress = 'SNAPPY', orc_compress_size = 6710422, orc_bloom_filter_columns = 'orderstatus,totalprice'); 标号② 建表示例: CREATE EXTERNAL TABLE hetu_test1 (orderkey bigint, orderstatus varchar, totalprice double, orderdate date) COMMENT 'test' PARTITIONED BY(ds int) CLUSTERED BY (orderkey, orderstatus) SORTED BY (orderkey, orderstatus) INTO 16 BUCKETS STORED AS ORC LOCATION '/user' TBLPROPERTIES (orc_compress = 'SNAPPY', orc_compress_size = 6710422, orc_bloom_filter_columns = 'orderstatus,totalprice'); 标号③ 建表示例: CREATE TABLE hetu_test2 (orderkey bigint, orderstatus varchar, totalprice double, orderdate date, ds int) COMMENT 'This table is in Hetu syntax' WITH (partitioned_by = ARRAY['ds'], bucketed_by = ARRAY['orderkey', 'orderstatus'], sorted_by = ARRAY['orderkey', 'orderstatus'], bucket_count = 16, orc_compress = 'SNAPPY', orc_compress_size = 6710422, orc_bloom_filter_columns = ARRAY['orderstatus', 'totalprice'], external = true, format = 'orc', location = '/user');
  • 限制 session属性可以设置bucket_count,默认值为-1,表示未设置。创建分区表时,如果bucket_count为-1且建表语句中未设置buckets,则使用默认值16。 默认外部表存储位置/user/hive/warehouse/{schema_name}/{table_name},其中{schema_name}为建表时使用的schema,{table_name}为表名。 指定属性“transactional=true”可以让表支持“原子性、一致性、隔离性、持久性”写入的事务能力,但是将表定义为事务表后,无法通过设置“transactional=false”将其退化为非事务表。 transactional='true'或 '0'在执行过程中不会进行类型转换,所以这种写法会发生异常: Cannot convert ['true'] to boolean Cannot convert ['0'] to boolean 默认不允许向托管表(表属性external = true)插入数据,如需使用该功能,可参考注意事项,添加hive自定义属性:hive.non-managed-table-writes-enabled=true。 Mppdb有一个限制,数据库的标识符的最大长度为63,如果把标识符命名超过了最大长度,那么会被自动截取掉超出的部分,只留下最大长度的标识符。 跨域场景不支持建表。
  • 语法 ① CREATE TABLE [ IF NOT EXISTS ] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT col_comment] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [ COMMENT table_comment ] [ WITH ( property_name = expression [, ...] ) ] ② CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [COMMENT 'table_comment'] [PARTITIONED BY(col_name data_type, ....)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, col_name, ...)] INTO num_buckets BUCKETS] ] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION 'hdfs_path'] [TBLPROPERTIES (orc_table_property = value [, ...] ) ] ③ CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [PARTITIONED BY(col_name data_type, ....)] [SORT BY ([column [, column ...]])] [COMMENT 'table_comment'] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION 'hdfs_path'] [TBLPROPERTIES (orc_table_property = value [, ...] ) ]
  • 描述 使用CREATE TABLE创建一个具有指定列的、新的空表。使用CREATE TABLE AS创建带数据的表。 使用可选参数IF NOT EXISTS,如果表已经存在则不会报错。 WITH子句可用于在新创建的表或单列上设置属性,如表的存储位置(location)、是不是外表(external)等。 LIKE子句用于在新表中包含来自现有表的所有列定义。可以指定多个LIKE子句,从而允许从多个表中复制列。如果指定了INCLUDING PROPERTIES,则将所有表属性复制到新表中。如果WITH子句指定的属性名称与复制的属性名称相同,则将使用WITH子句中的值。默认是EXCLUDING PROPERTIES属性,而且最多只能为一个表指定INCLUDING PROPERTIES属性。 PARTITIONED BY能够用于指定分区的列;CLUSTERED BY能够被用于指定分桶的列;SORT BY和 SORTED BY能够用于给指定的分桶列进行排序;BUCKETS能够被用于指定分桶数;EXTERNAL可用于指定创建外部表;STORED AS能被用于指定文件存储的格式;LOCATION能被用于指定在HDFS上存储的路径。 想要查看支持哪些column属性,可以运行以下命令,会显示当前对接的catalog分别支持哪些列属性。 SELECT * FROM system.metadata.column_properties; 想要查看支持哪些table属性,可以运行以下命令: SELECT * FROM system.metadata.table_properties; 下表为catalog为hive时的查询结果。 SELECT * FROM system.metadata.table_properties where catalog_name = 'hive'; catalog_name property_name default_value type description hive auto_purge false boolean Skip trash when table or partition is deleted hive avro_schema_url - varchar URI pointing to Avro schema for the table hive bucket_count 0 integer Number of buckets hive bucketed_by [] array(varchar) Bucketing columns hive bucketing_version - integer Bucketing version hive csv_escape - varchar CSV escape character hive csv_quote - varchar CSV quote character hive csv_separator - varchar CSV separator character hive external_location - varchar File system location URI for external table hive format ORC varchar Hive storage format for the table. Possible values: [ORC, PARQUET, AVRO, RCBINARY, RCTEXT, SEQUENCEFILE, JSON, TEXTFILE, TEXTFILE_MULTIDELIM, CSV] hive orc_compress GZIP varchar Compression codec used. Possible values: [NONE, SNAPPY, LZ4, ZSTD, GZIP, ZLIB] hive orc_compress_size 262144 bigint orc compression size hive orc_row_index_stride 10000 integer no. of row index strides hive orc_stripe_size 67108864 bigint orc stripe size hive orc_bloom_filter_columns [] array(varchar) ORC Bloom filter index columns hive orc_bloom_filter_fpp 0.05 double ORC Bloom filter false positive probability hive partitioned_by [] array(varchar) Partition columns hive sorted_by [] array(varchar) Bucket sorting columns hive textfile_skip_footer_line_count - integer Number of footer lines hive textfile_skip_header_line_count - integer Number of header lines hive transactional false boolean Is transactional property enabled
  • IP Address函数 contains(network, address) → boolean 当CIDR网络中包含address时返回true。 SELECT contains('10.0.0.0/8', IPADDRESS '10.255.255.255'); -- true SELECT contains('10.0.0.0/8', IPADDRESS '11.255.255.255'); -- false SELECT contains('2001:0db8:0:0:0:ff00:0042:8329/128', IPADDRESS '2001:0db8:0:0:0:ff00:0042:8329'); -- true SELECT contains('2001:0db8:0:0:0:ff00:0042:8329/128', IPADDRESS '2001:0db8:0:0:0:ff00:0042:8328'); -- false 父主题: SQL函数和操作符
  • 回答 在yarn-client模式下,Spark的Driver和ApplicationMaster作为两个独立的进程在运行。当Driver完成任务退出时,会通知ApplicationMaster向ResourceManager注销自身,即调用unregister方法。 由于是远程调用,则存在发生网络故障的可能性。当发生网络故障时,ApplicationMaster会使用Yarn客户端的重试机制进行重试。在达到最大重试次数之前网络恢复正常,则ApplicationMaster会正常退出。 如果超过重试次数和重试时长,则ApplicationMaster注销失败,ResourceManager会认为ApplicationMaster异常退出并尝试重新启动ApplicationMaster。新启动的ApplicationMaster在尝试连接已经退出的Driver失败后,会在ResourceManager页面上标记此次Application为FAILED状态。
  • BERNOULLI 每一行都将基于指定的采样率选择到采样表中。当使用Bernoulli方法对表进行采样时,将扫描表的所有物理块并跳过某些行(基于采样百分比和运行时计算的随机值之间的比较)。结果中包含一行的概率与任何其他行无关。这不会减少从磁盘读取采样表所需的时间。如果进一步处理采样输出,则可能会影响总查询时间。 SELECT * FROM users TABLESAMPLE BERNOULLI (50);
  • SYSTEM 此采样方法将表划分为数据的逻辑段,并按此粒度对表进行采样。此采样方法要么从特定数据段中选择所有行,要么跳过它(基于采样百分比与运行时计算的随机值之间的比较)。系统采样中行的选择依赖于使用的connector。例如,如果使用Hive数据源,这将取决于数据在HDFS上的布局。这种采样方法不能保证独立的抽样概率。 SELECT * FROM users TABLESAMPLE SYSTEM (75);
  • 示例 非事务表场景: 清空表数据 --创建表并插入数据 create table tb_del as select * from (values(1,'suse'),(2,'centos'),(3,'euler')) as t (id,os); select * from tb_del; id | os ----|-------- 1 | suse 2 | centos 3 | euler (3 rows) --不支持通过where子句删除单条数据 delete from tb_del where id =1; Query 20201116_081955_00027_iyct5@default@HetuEngine failed: This connector only supports delete where one or more partitions are deleted entirely for Non-Transactional tables --清空表数据 delete from tb_del; select * from tb_del; id | os ----|---- (0 rows) 删除分区表hive.web.page_views中partition(date='2020-07-17', country='US')的分区: delete from hive.web.page_views where ds=date '2020-07-17' and country='US'; 事务表场景:删除指定记录 --创建事务表 create table tb_trans(a int,b string) with (transactional=true); CREATE TABLE --插入数据 insert into tb_trans values(1,'a'),(2,'b'),(3,'c'); INSERT: 3 rows --删除数据 delete from tb_trans where a=1; DELETE: 1 row
  • 示例 CREATE OR REPLACE VIEW tv_view as SELECT id,name from (values (1, 'HetuEngine')) as x(id,name); SELECT * FROM tv_view; id | name ----|------ 1 | HetuEngine (1 row) ALTER VIEW tv_view as SELECT id, brand FROM (VALUES (1, 'brand_1', 100), (2, 'brand_2', 300) ) AS x (id, brand, price); SELECT * FROM tv_view; id | brand ----|--------- 1 | brand_1 2 | brand_2 (2 rows) ALTER VIEW tv_view SET TBLPROPERTIES ('comment' = 'This is a new comment'); show tblproperties tv_view; SHOW TBLPROPERTIES -------------------------------------------------------------------- comment 'This is a new comment' presto_query_id '20210325_034712_00040_f63xj@default@HetuEngine' presto_version presto_view 'true' transient_lastDdlTime '1616644032' (1 row)
  • 描述 “ALTER VIEW view_name AS select_statement;”用于改变已存在的视图的定义,语法效果与CREATE OR REPLACE VIEW类似。 “ALTER VIEW view_name SET TBLPROPERTIES table_properties;”中table_properties格式为 (property_name = property_value, property_name = property_value, ...)。 视图可以包含Limit和ORDER BY子句,如果关联视图的查询语句也包含了这类子句,则最后执行结果将根据视图的子句运算后得到。例如视图V指定了返回5条数据,而关联查询为select * from V limit 10,则最终只有5条数据返回。
  • 示例 SHOW functions; --使用LIKE子句 show functions like 'boo_%'; Function | Return Type | Argument Types | Function Type | Deterministic | Description ----------|-------------|----------------|---------------|---------------|------------- bool_and | boolean | boolean | aggregate | true | bool_or | boolean | boolean | aggregate | true | (2 rows) --如果匹配字符串中有字符与通配符冲突,可以指定转义字符来标识,示例为查询default这个schema下,table_name前缀为"t_" 的所有table,转义字符为"\": SHOW FUNCTIONS LIKE 'array\_%' escape '\'; Function | Return Type | Argument Types | Function Type | Deterministic | Description | Variable Arity | Built In -----------------|-------------|---------------------------------|---------------|--------------- |--------------------------------------------------------------------------------------------------------|----------------|---------- array_agg | array(T) | T | aggregate | true | return an array of values | false | true array_contains | boolean | array(T), T | scalar | true | Determines whether given value exists in the array | false | true array_distinct | array(E) | array(E) | scalar | true | Remove duplicate values from the given array | false | true array_except | array(E) | array(E), array(E) | scalar | true | Returns an array of elements that are in the first array but not the second, without duplicates. | false | true array_intersect | array(E) | array(E), array(E) | scalar | true | Intersects elements of the two given arrays | false | true array_join | varchar | array(T), varchar | scalar | true | Concatenates the elements of the given array using a delimiter and an optional string to replace nulls | false | true array_join | varchar | array(T), varchar, varchar | scalar | true | Concatenates the elements of the given array using a delimiter and an optional string to replace nulls | false | true array_max | T | array(T) | scalar | true | Get maximum value of array | false | true array_min | T | array(T) | scalar | true | Get minimum value of array | false | true array_position | bigint | array(T), T | scalar | true | Returns the position of the first occurrence of the given value in array (or 0 if not found) | false | true array_remove | array(E) | array(E), E | scalar | true | Remove specified values from the given array | false | true array_sort | array(E) | array(E) | scalar | true | Sorts the given array in ascending order according to the natural ordering of its elements. | false | true array_sort | array(T) | array(T), function(T,T,integer) | scalar | true | Sorts the given array with a lambda comparator. | false | true array_union | array(E) | array(E), array(E) | scalar | true | Union elements of the two given arrays | false | true --查看所有JAVA函数 SHOW external functions; Function | Owner ----------------------------|----------- example.namespace02.repeat | admintest hetu.default.add_two | admintest (2 rows) --查看给定函数的定义信息 SHOW external function example.namespace02.repeat; External Function -------------------------------------- External FUNCTION example.namespace02.repeat ( s varchar, n integer ) RETURNS varchar COMMENT 'repeat' LANGUAGE JAVA DETERMINISTIC CALLED ON NULL INPUT SYMBOL com.test.udf.hetuengine.functions.repeat URI hdfs://hacluster/user/hetuserver/udf/data/hetu_udf/udf-test-0.0.1-SNAPSHOT.jar FUNCPROPERTIES ( owner = 'admintest' )
  • 示例 --查看show_table1的所有表属性 SHOW TBLPROPERTIES ----------------------------------------------------------------------------- STATS_GENERATED_VIA_STATS_TASK 'workaround for potential lack of HIVE-12730' auto.purge 'false' numFiles '0' numRows '0' orc.compress.size '262144' orc.compression.codec 'GZIP' orc.row.index.stride '10000' orc.stripe.size '67108864' presto_query_id '20230909_095107_00042_2hwbg@default@HetuEngine' presto_version '399' rawDataSize '0' totalSize '0' transient_lastDdlTime '1694253067' (1 row) --查看show_table1的压缩算法 SHOW TBLPROPERTIES show_table1('orc.compression.codec'); SHOW TBLPROPERTIES --------------------- GZIP (1 row)
  • 示例 列出当前catalog所有的schemas: SHOW SCHEMAS; 列出指定catalog下的schema_name前缀为"t"的所有schemas: SHOW SCHEMAS FROM hive LIKE 't%'; --等价写法: SHOW SCHEMAS IN hive LIKE 't%'; 如果匹配字符串中有字符与通配符冲突,可以指定转义字符来标识,示例为查询hive这个catalog下,schema_name前缀为“pm_”的所有schema,转义字符为“/”: SHOW SCHEMAS IN hive LIKE 'pm/_%' ESCAPE '/';
  • HYPERLOGLOG 基数统计。 用HyperLogLog来近似计算唯一数的计数值,其代价要远远小于用count来计算。 参见HyperLogLog函数函数。 HyperLogLog A HyperLogLog sketch可以用来高效的计算distinct()的近似值。 它以一个稀疏的表征开始,然后变成一个密集的表征,此时效率将变得更高。 P4HyperLogLog 类似于A HyperLogLog sketch,但是它以一个密集的表征开始。
  • ROW ROW的字段可是任意所支持的数据类型,也支持各字段数据类型不同的混合方式。 --创建ROW表 create table row_tb (id int,col1 row(a int,b varchar)); --插入ROW类型数据 insert into row_tb values (1,ROW(1,'HetuEngine')); --查询数据 select * from row_tb; id | col1 ----|-------------- 1 | {a=1, b=HetuEngine} --字段是支持命名的,默认情况下,Row的字段是未命名的 select row(1,2e0),CAST(ROW(1, 2e0) AS ROW(x BIGINT, y DOUBLE)); _col0 | _col1 ------------------------|-------------- {1, 2.0} | {x=1, y=2.0} (1 row) --命名后的字段,可以通过域操作符"."访问 select col1.b from row_tb; -- HetuEngine --命名和未命名的字段,都可以通过位置索引来访问,位置索引从1开始,且必须是一个常量 select col1[1] from row_tb; -- 1
  • UUID 标准UUID (Universally Unique IDentifier),也被称为GUID (Globally Unique IDentifier)。 遵从RFC 4122标准所定义的格式。 示例: select UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'; _col0 -------------------------------------- 12151fd2-7586-11e9-8f9e-2a86e4085a59 (1 row)
共100000条