华为云用户手册

  • 三角函数 所有三角函数的参数都是以弧度表示。参考单位转换函数degrees()和radians()。 acos(x) → double 求反余弦值。 SELECT acos(-1);-- 3.14159265358979 asin(x) → double 求反正弦值。 SELECT asin(0.5);-- 0.5235987755982989 atan(x) → double 求x的反正切值。 SELECT atan(1);-- 0.7853981633974483 atan2(y, x) → double 返回y/x的反正切值。 SELECT atan2(2,1);-- 1.1071487177940904 cos(x) → double 返回x的余弦值。 SELECT cos(-3.1415927);-- -0.9999999999999989 cosh(x) → double 返回x的双曲余弦值。 SELECT cosh(3.1415967);-- 11.592000006553231 sin(x) → double 求x的正弦值。 SELECT sin(1.57079);-- 0.9999999999799858 tan(x) → double 求x的正切值。 SELECT tan(20);-- 2.23716094422474 tanh(x) → double 求x双曲正切值。 select tanh(3.1415927);-- 0.9962720765661324
  • 示例 创建示例所需视图: Create schema test1;Create table t1(id int, name string);Create view v1 as select * from t1;Create view v2 as select * from t1;Create view t1view as select * from t1;Create view t2view as select * from t1; Show views;Table-------- t1view t2view v1 v2(4 rows) Show views like 'v1'; Table------- v1(1 row) Show views 'v_';Table ------- v1 v2 (2 rows)show views like 't*'; Table-------- t1view t2view Show views in test1; Table-------- t1view t2view v1 v2(4 rows)
  • 示例 显示能够创建orders表的SQL 语句: CREATE TABLE orders ( orderkey bigint, orderstatus varchar, totalprice double, orderdate date ) WITH (format = 'ORC', location='obs://bucket/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 = 'obs://bucket/user', format = 'ORC', orc_compress = 'ZLIB', orc_compress_size = 262144, orc_row_index_stride = 10000, orc_stripe_size = 67108864 ) (1 row)
  • 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,casewhen 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)
  • DECIMAL 字面量 可以使用 DECIMAL 'xxxxxxx.yyyyyyy' 语法来定义 DECIMAL 类型的字面量。 DECIMAL 类型的字面量精度将等于字面量(包括尾随零和前导零)的位数。范围将等于小数部分(包括尾随零)的位数。 示例字面量 数据类型 DECIMAL '0' DECIMAL(1) DECIMAL '12345' DECIMAL(5) DECIMAL '0000012345.1234500000' DECIMAL(20, 10)
  • 二进制算术 decimal 运算符 支持标准数学运算符。下表说明了结果的精度和范围计算规则。假设x的类型为DECIMAL(xp, xs),y的类型为DECIMAL(yp, ys)。 运算 结果类型精度 结果类型范围 x + y 和 x - y min(38, 1 + min(xs, ys) + min(xp - xs, yp - ys) ) max(xs, ys) x * y min(38, xp + yp) xs + ys x / y min(38, xp + ys + max(0, ys-xs) ) max(xs, ys) x % y min(xp - xs, yp - ys) + max(xs, bs) max(xs, ys) 如果运算的数学结果无法通过结果数据类型的精度和范围精确地表示,则发生异常情况:Value is out of range。 当对具有不同范围和精度的decimal类型进行运算时,值首先被强制转换为公共超类型。对于接近于最大可表示精度 (38) 的类型,当一个操作数不符合公共超类型时,这可能会导致“值超出范围”错误。例如:decimal(38, 0) 和decimal(38, 1) 的公共超类型是decimal(38, 1),但某些符合decimal(38, 0) 的值无法表示为decimal(38, 1)。
  • 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 NULLselect 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)
  • 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); -- 3select 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)
  • 描述 向表中插入新的数据行。 如果指定了列名列表,那么这些列名列表必须与query语句产生列列表名完全匹配。表中不在列名列表中的每一列,其值会设置为null。 如果没有指定列名列表,则query语句产生的列必须与将要插入的列完全匹配。 使用insert into时,会往表中追加数据,而使用insert overwrite时,如果表属性“auto.purge”被设置为“true”,直接删除原表数据,再写入新的数据。 如果对象表是分区表时,insert overwrite会删除对应分区的数据而非所有数据。 insert into后面的table关键字为可选,以兼容hive语法。
  • 限制 如果数据表中只有一个字段,且字段类型为row、struct,那么插入数据时需要用row对类型进行包裹。 -- 单字段表插入复杂类型需要用row()包裹CREATE TABLE test_row (id row(c1 int, c2 string));INSERT INTO test_row values row(row(1, 'test'));--多字段表复杂类型可以直接插入CREATE TABLE test_multy_value(id int, col row(c1 int, c2 string));INSERT INTO test_multy_value values (1,row(1,'test'));
  • 示例 LOG ICAL: CREATE TABLE testTable (regionkey int, name varchar);EXPLAIN SELECT regionkey, count(*) FROM testTable GROUP BY 1; Query Plan ------------------------------------------------------------------------------------------------------------------------------------- Output[regionkey, _col1] │ Layout: [regionkey:integer, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} │ _col1 := count └─ RemoteExchange[GATHER] │ Layout: [regionkey:integer, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ Project[] │ Layout: [regionkey:integer, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ Aggregate(FINAL)[regionkey][$hashvalue] │ Layout: [regionkey:integer, $hashvalue:bigint, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} │ count := count("count_8") └─ LocalExchange[HASH][$hashvalue] ("regionkey") │ Layout: [regionkey:integer, count_8:bigint, $hashvalue:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ RemoteExchange[REPARTITION][$hashvalue_9] │ Layout: [regionkey:integer, count_8:bigint, $hashvalue_9:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ Aggregate(PARTIAL)[regionkey][$hashvalue_10] │ Layout: [regionkey:integer, $hashvalue_10:bigint, count_8:bigint] │ count_8 := count(*) └─ ScanProject[table = hive:default:testtable] Layout: [regionkey:integer, $hashvalue_10:bigint] Estimates: {rows: 0 (0B), cpu: 0, memory: 0B, network: 0B}/{rows: 0 (0B), cpu: 0, memory: 0B, network: 0B} $hashvalue_10 := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("regionkey"), 0)) regionkey := regionkey:int:0:REGULAR DISTRIBUTED: EXPLAIN (type DISTRIBUTED) SELECT regionkey, count(*) FROM testTable GROUP BY 1; Query Plan ----------------------------------------------------------------------------------------------------------------------- Fragment 0 [SINGLE] Output layout: [regionkey, count] Output partitioning: SINGLE [] Stage Execution Strategy: UNGROUPED_EXECUTION Output[regionkey, _col1] │ Layout: [regionkey:integer, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} │ _col1 := count └─ RemoteSource[1] Layout: [regionkey:integer, count:bigint] Fragment 1 [HASH] Output layout: [regionkey, count] Output partitioning: SINGLE [] Stage Execution Strategy: UNGROUPED_EXECUTION Project[] │ Layout: [regionkey:integer, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ Aggregate(FINAL)[regionkey][$hashvalue] │ Layout: [regionkey:integer, $hashvalue:bigint, count:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} │ count := count("count_8") └─ LocalExchange[HASH][$hashvalue] ("regionkey") │ Layout: [regionkey:integer, count_8:bigint, $hashvalue:bigint] │ Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?} └─ RemoteSource[2] Layout: [regionkey:integer, count_8:bigint, $hashvalue_9:bigint] Fragment 2 [SOURCE] Output layout: [regionkey, count_8, $hashvalue_10] Output partitioning: HASH [regionkey][$hashvalue_10] Stage Execution Strategy: UNGROUPED_EXECUTION Aggregate(PARTIAL)[regionkey][$hashvalue_10] │ Layout: [regionkey:integer, $hashvalue_10:bigint, count_8:bigint] │ count_8 := count(*) └─ ScanProject[table = hive:default:testtable, grouped = false] Layout: [regionkey:integer, $hashvalue_10:bigint] Estimates: {rows: 0 (0B), cpu: 0, memory: 0B, network: 0B}/{rows: 0 (0B), cpu: 0, memory: 0B, network: 0B} $hashvalue_10 := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("regionkey"), 0)) regionkey := regionkey:int:0:REGULAR VALIDATE: EXPLAIN (TYPE VALIDATE) SELECT regionkey, count(*) FROM testTable GROUP BY 1; Valid------- true IO: EXPLAIN (TYPE IO, FORMAT JSON) SELECT regionkey , count(*) FROM testTable GROUP BY 1; Query Plan --------------------------------- { "inputTableColumnInfos" : [ { "table" : { "catalog" : "hive", "schemaTable" : { "schema" : "default", "table" : "testtable" } }, "columnConstraints" : [ ] } ] }
  • 示例 创建fruit和fruit_copy表: create table fruit (name varchar,price double);create table fruit_copy (name varchar,price double); 向fruit表中插入一行数据: insert into fruit values('LIchee',32);-- 兼容写法示例,带上table关键字insert into table fruit values('Cherry',88); 向fruit表中插入多行数据: insert into fruit values('banana',10),('peach',6),('lemon',12),('apple',7); 将fruit表中的数据行加载到fruit_copy表中,执行后表中有5条记录: insert into fruit_copy select * from fruit; 先清空fruit_copy表,再将fruit中的数据加载到表中,执行之后表中有2条记录: insert overwrite fruit_copy select * from fruit limit 2; 对于varchar类型,仅当目标表定义的列字段长度大于源表的实际字段长度时,才可以使用INSERT... SELECT...的形式从源表中查数据并且插入到目标表: create table varchar50(c1 varchar(50));insert into varchar50 values('hetuEngine');create table varchar100(c1 varchar(100));insert into varchar100 select * from varchar50; 分区表使用insert overwrite语句时,只会清理插入值所在分区的数据,而不是整个表: --创建表create table test_part (id int, alias varchar) partitioned by (dept_id int, status varchar);insert into test_part partition(dept_id=10, status='good') values (1, 'xyz'), (2, 'abc');select * from test_part order by id; id | alias | dept_id | status ----|-------|---------|-------- 1 | xyz | 10 | good 2 | abc | 10 | good (2 rows)--清理分区partition(dept_id=25, status='overwrite'),并插入一条数据insert overwrite test_part (id, alias, dept_id, status) values (3, 'uvw', 25, 'overwrite'); select * from test_part ; id | alias | dept_id | status ----|-------|---------|----------- 1 | xyz | 10 | good 2 | abc | 10 | good 3 | uvw | 25 | overwrite--清理分区partition(dept_id=10, status='good'),并插入一条数据insert overwrite test_part (id, alias, dept_id, status) values (4, 'new', 10, 'good');select * from test_part order by id; id | alias | dept_id | status ----|-------|---------|----------- 3 | uvw | 25 | overwrite 4 | new | 10 | good (2 rows)--分区表插入数据create table test_p_1(name string, age int) partitioned by (provice string, city string); create table test_p_2(name string, age int) partitioned by (provice string, city string); -- 填充数据到test_p_1 insert into test_p_1 partition (provice = 'hebei', city= 'baoding') values ('xiaobei',15),( 'xiaoming',22);-- 根据test_p_1 插入数据到test_p_2-- 方式一from test_p_1 insert into table test_p_2 partition (provice = 'hebei', city= 'baoding') select name,age; -- 方式二insert into test_p_2 partition(provice = 'hebei', city= 'baoding') select name,age from test_p_1;
  • 示例 CREATE SCHEMA web; DESCRIBE SCHEMA web; Describe Schema ------------------------------------------------------------------------- web obs://bucket/user/hive/warehouse/web.db dli USER (1 row)
  • 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)
  • Format format(format, args...) → varchar 描述:对一个字符串,按照格式字符串指定的方式进行格式化,并返回。 SELECT format('%s%%',123);-- '123%'SELECT format('%.5f',pi());-- '3.14159'SELECT format('%03d',8);-- '008'SELECT format('%,.2f',1234567.89);-- '1,234,567.89'SELECT format('%-7s,%7s','hello','world');-- 'hello , world'SELECT format('%2$s %3$s %1$s','a','b','c');-- 'b c a'SELECT format('%1$tA, %1$tB %1$te, %1$tY',date'2006-07-04');-- 'Tuesday, July 4, 2006
  • cast转换函数 HetuEngine会将数字和字符值隐式转换成正确的类型。HetuEngine不会把字符和数字类型相互转换。例如,一个查询期望得到一个varchar类型的值,HetuEngine不会自动将bigint类型的值转换为varchar类型。 如果有必要,可以将值显式转换为指定类型。 cast(value AS type) → type 显式转换一个值的类型。可以将varchar类型的值转为数字类型,反过来转换也可以。 select cast('186' as int );select cast(186 as varchar); try_cast(value AS type) → type 与cast()相似,区别是转换失败返回null。 select try_cast(1860 as tinyint); _col0 ------- NULL (1 row) 当出现数字溢出,null值转换等情况,会返回NULL,但无法转换的情况,还是会报错。 例如:select try_cast(186 as date); Cannot cast integer to date
  • Data Size parse_presto_data_size函数支持以下单位: 单位 描述 值 B Bytes 1 kB Kilobytes 1024 MB Megabytes 10242 GB Gigabytes 10243 TB Terabytes 10244 PB Petabytes 10245 EB Exabytes 10246 ZB Zettabytes 10247 YB Yottabytes 10248 parse_presto_data_size(string) → decimal(38) 将带单位的格式化的值转为数字,值可以是小数,如下所示: SELECT parse_presto_data_size('1B'); -- 1SELECT parse_presto_data_size('1kB'); -- 1024SELECT parse_presto_data_size('1MB'); -- 1048576SELECT parse_presto_data_size('2.3MB'); -- 2411724
  • 参数说明 IN | FROM schema_name 指定schema名称,未指定时默认使用当前的schema。 LIKE 'identifier_with_wildcards' identifier_with_wildcards只支持包含“*”和“|”的规则匹配表达式。 其中“*”可以匹配单个或多个字符,“|”适用于匹配多种规则匹配表达式中的任意一种的情况,它用于分隔这些规则匹配表达式。 规则匹配表达式首尾的空格,不会参与匹配计算。 partition_spec 一个可选参数,使用键值对来指定分区列表,键值对之间通过逗号分隔。需要注意,指定分区时,表名不支持模糊匹配。
  • 示例 -- 演示数据准备create schema 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:obs://bucket/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:obs://bucket/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 obs://bucket/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 obs://bucket/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 obs://bucket/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:obs://bucket/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)
  • 逻辑运算符 逻辑运算符 操作 描述 例子 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函数和操作符
  • 常用提取函数 域 描述 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');-- 33select timezone_hour(timestamp '2020-02-12 15:32:33.215');-- 8 MONTHNAME(date) 描述:获取月份名称。 SELECT monthname(timestamp '2019-09-09 12:12:12.000');-- SEPTEMBERSELECT monthname(date '2019-07-09');--JULY
  • Java 日期函数 在这一章节中使用的格式化字符串都是与Java的SimpleDateFormat样式兼容的。 format_datetime(timestamp, format) → varchar 使用format格式化timestamp parse_datetime(string, format) → timestamp with time zone 使用指定的格式,将字符串格式化为timestamp with time zone select parse_datetime('1960/01/22 03:04', 'yyyy/MM/dd HH:mm'); _col0 --------------------------------------- 1960-01-22 03:04:00.000 Asia/Shanghai (1 row)
  • 提取函数 描述:提取函数用于从HTTP URL(或任何符合RFC 2396标准的URL)中提取内容。 [protocol:][//host[:port]][path][?query][#fragment] 提取的内容不会包含URI的语法分割符,比如“:”或“?”。 url_extract_fragment(url) → varchar 描述:返回url的片段标识符,即#后面的字符串。 select url_extract_fragment('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher');--teacher url_extract_host(url)→ varchar 描述:返回url中的主机 域名 。 select url_extract_host('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher');-- www.example.com url_extract_parameter(url, name)→ varchar 描述:返回url中参数名为name的参数。 select url_extract_parameter('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher','age');-- 25 url_extract_path(url)→ varchar 描述:提取url中的路径。 select url_extract_path('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher');-- /stu/index.html url_extract_port(url)→ bigint 描述:提取url中的端口。 select url_extract_port('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher');-- 80 url_extract_protocol(url)→ varchar 描述:提取url中的协议。 select url_extract_protocol('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher'); -- http url_extract_query(url)→ varchar 描述:提取url中的查询字符串。 select url_extract_query('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher'); -- name=xxx&age=25
  • 编码函数 url_encode(value) → varchar 描述:对value进行转义处理,以便可以安全地将其包含在URL查询参数名和值中: 字母字符不会被编码。 字符 ., -, * 和 _不会被编码。 ASCII 空格字符会被编码为+ 。 所有其他字符都将转换为UTF-8,并且字节被编码为字符串%XX,其中XX是UTF-8字节的大写十六进制值。 select url_encode('http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher');-- http%3A%2F%2Fwww.example.com%3A80%2Fstu%2Findex.html%3Fname%3Dxxx%26age%3D25%23teacher url_decode(value) → varchar 描述:对value编码后的URL进行解码操作。 select url_decode('http%3A%2F%2Fwww.example.com%3A80%2Fstu%2Findex.html%3Fname%3Dxxx%26age%3D25%23teacher');-- http://www.example.com:80/stu/index.html?name=xxx&age=25#teacher
  • FETCH FIRST FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES FETCH FIRST支持FIRST或NEXT关键字以及ROW或ROWS关键字。这些关键字等效,不影响query执行。 如果FETCH FIRST未指定数量,默认为1: SELECT orderdate FROM orders FETCH FIRST ROW ONLY; orderdate -------------- 2020-11-11 SELECT * FROM new_orders FETCH FIRST 2 ROW ONLY; orderkey | orderstatus | totalprice | orderdate --------------|-------------|------------|-------------- 202011181113 | online | 9527.0 | 2020-11-11 202011181114 | online | 666.0 | 2020-11-11 (2 rows) 如果使用了OFFSET,则LIMIT或FETCH FIRST会在OFFSET之后应用于结果集: SELECT * FROM (VALUES 5, 2, 4, 1, 3) t(x) ORDER BY x OFFSET 2 FETCH FIRST ROW ONLY; x --- 3 (1 row) 对于FETCH FIRST子句,参数ONLY或WITH TIES控制结果集中包含哪些行。 如果指定了ONLY参数,则结果集将限制为包含参数数量的前若干行。 如果指定了WITH TIES参数,则要求必须带ORDER BY子句。其结果集中包含符合条件的前若干行基本结果集以及额外的行。这些额外的返回行与基本结果集中最后一行的ORDER BY的参数一样: CREATE TABLE nation (name varchar, regionkey integer);insert into nation values ('ETHIOPIA',0),('MOROCCO',0),('ETHIOPIA',2),('KENYA',2),('ALGERIA',0),('MOZAMBIQUE',0);--返回regionkey与第一条相同的所有记录。SELECT name, regionkey FROM nation ORDER BY regionkey FETCH FIRST ROW WITH TIES; name | regionkey ------------|----------- ALGERIA | 0 ETHIOPIA | 0 MOZAMBIQUE | 0 MOROCCO | 0 (4 rows)
  • 字符串函数 这些函数假定输入字符串包含有效的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,worldselect concat_ws(NULL,'def'); --NULLselect concat_ws(',','hello',NULL,'world'); -- hello,worldselect concat_ws(',','hello','','world'); -- hello,,world concat_ws(string0, array(varchar)) → varchar 描述:将数组中的元素以string0为分隔符进行串联。如果string0为null,则返回值为null。数组中的任何null值都将被跳过。 select concat_ws(NULL,ARRAY['abc']);--NULLselect concat_ws(',',ARRAY['abc',NULL,NULL,'xyz']); -- abc,xyzselect 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);-- 0select locate('aaa','bbaaaaa',1);-- 3select 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
  • Qualifying Column Names 当JOIN的两个relation有相同的列名时,列引用必须使用relation别名(如果relation有别名)或relation名称进行限定: SELECT nation.name, region.name FROM nation CROSS JOIN region;SELECT n.name, r.name FROM nation AS n CROSS JOIN region AS r;SELECT n.name, r.name FROM nation n CROSS JOIN region r;
  • 二进制函数 length(binary) → bigint 返回binary的字节长度。 select length(x'00141f');-- 3 concat(binary1, ..., binaryN) → varbinary 将binary1,binary2,binaryN串联起来。这个函数返回与SQL标准连接符||相同的功能。 select concat(X'32335F',x'00141f'); -- 32 33 5f 00 14 1f to_base64(binary) → varchar 将binary编码为base64字符串表示。 select to_base64(CAST('hello world' as binary)); -- aGVsbG8gd29ybGQ= from_base64(string) → varbinary 将base64编码的string解码为varbinary。 select from_base64('helloworld'); -- 85 e9 65 a3 0a 2b 95 unbase64(string) → varbinary 将base64编码的string解码为varbinary。 SELECT from_base64('helloworld'); -- 85 e9 65 a3 0a 2b 95 to_base64url(binary) → varchar 使用URL安全字符,将binary编码为base64字符串表示。 select to_base64url(x'555555'); -- VVVV from_base64url(string) → varbinary 使用URL安全字符,将base64编码的string解码为二进制数据。 select from_base64url('helloworld'); -- 85 e9 65 a3 0a 2b 95 to_hex(binary) → varchar 将binary编码为16进制字符串表示。 select to_hex(x'15245F'); -- 15245F from_hex(string) → varbinary 将16进制编码的string解码为二进制数据。 select from_hex('FFFF'); -- ff ff to_big_endian_64(bigint) → varbinary 将bigint类型的数字编码为64位大端补码格式。 select to_big_endian_64(1234); _col0 ------------------------- 00 00 00 00 00 00 04 d2 (1 row) from_big_endian_64(binary) → bigint 64位大端补码格式的二进制解码为bigint类型的数字。 select from_big_endian_64(x'00 00 00 00 00 00 04 d2'); _col0 ------- 1234 (1 row) to_big_endian_32(integer) → varbinary 将bigint类型的数字编码为32位大端补码格式。 select to_big_endian_32(1999); _col0 ------------- 00 00 07 cf (1 row) from_big_endian_32(binary) → integer 32位大端补码格式的二进制解码为bigint类型的数字。 select from_big_endian_32(x'00 00 07 cf'); _col0 ------- 1999 (1 row) to_ieee754_32(real) → varbinary 根据IEEE 754算法,将单精度浮点数编码为一个32位大端字节序的二进制块。 select to_ieee754_32(3.14); _col0 ------------- 40 48 f5 c3 (1 row) from_ieee754_32(binary) → real 对采用IEEE 754单精度浮点格式的32位大端字节序binary进行解码。 select from_ieee754_32(x'40 48 f5 c3'); _col0 ------- 3.14 (1 row) to_ieee754_64(double) → varbinary 根据IEEE 754算法,将双精度浮点数编码为一个64位大端字节序的二进制块。 select to_ieee754_64(3.14); _col0 ------------------------- 40 09 1e b8 51 eb 85 1f (1 row) from_ieee754_64(binary) → double 对采用IEEE 754单精度浮点格式的64位大端字节序binary进行解码。 select from_ieee754_64(X'40 09 1e b8 51 eb 85 1f'); _col0 ------- 3.14 (1 row) lpad(binary, size, padbinary) → varbinary 左填充二进制以使用padbinary调整字节大小。如果size小于二进制文件的长度,则结果将被截断为size个字符。size不能为负,并且padbinary不能为空。 select lpad(x'15245F', 11,x'15487F') ; -- 15 48 7f 15 48 7f 15 48 15 24 5f rpad(binary, size, padbinary) → varbinary 右填充二进制以使用padbinary调整字节大小。如果size小于二进制文件的长度,则结果将被截断为size个字符。size不能为负,并且padbinary不能为空。 SELECT rpad(x'15245F', 11,x'15487F'); -- 15 24 5f 15 48 7f 15 48 7f 15 48 crc32(binary) → bigint 计算二进制块的CRC 32值。 md5(binary) → varbinary 计算二进制块的MD 5哈希值。 sha1(binary) → varbinary 计算二进制块的SHA 1哈希值。 sha2(string, integer) → string 安全散列算法2, 是一种密码散列函数算法标准,其输出长度可以取224位,256位, 384位、512位,分别对应SHA-224、SHA-256、SHA-384、SHA512 sha256(binary) → varbinary 计算二进制块的SHA 256哈希值。 sha512(binary) → varbinary 计算二进制块的SHA 512哈希值。 xxhash64(binary) → varbinary 计算二进制块的XXHASH 64哈希值。 spooky_hash_v2_32(binary) → varbinary 计算二进制块的32位SpookyHashV2哈希值。 spooky_hash_v2_64(binary) → varbinary 计算二进制块的64位SpookyHashV2哈希值。 hmac_md5(binary, key) → varbinary 使用给定的key计算二进制块的HMAC值(采用 md5)。 hmac_sha1(binary, key) → varbinary 使用给定的key计算二进制块的HMAC值(采用 sha1)。 hmac_sha256(binary, key) → varbinary 使用给定的key计算二进制块的HMAC值(采用 sha256)。 hmac_sha512(binary, key) → varbinary 使用给定的key计算二进制块的HMAC值(采用 sha512)。 CRC32、MD5、SHA1算法在密码学场景已被攻击者破解,不建议应用于密码学安全场景。
  • SEMI JOIN、ANTI JOIN 当一张表在另一张表找到匹配的记录之后,半连接(semi-join)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。半连接通常使用IN或EXISTS作为连接条件。 而anti-join则与semi-join相反,即当在第二张表没有发现匹配记录时,才会返回第一张表里的记录;当使用not exists/not in的时候会用到。 其他支持的条件包括如下内容: where子句中的多个条件 别名关系 下标表达式 解引用表达式 强制转换表达式 特定函数调用 目前,只在如下情况下支持多个semi/anti join表达式:第一个表中的列在其直接后续的join表达式中被查询,且不与其它join表达式有关系。 示例如下:
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全