华为云用户手册

  • IPADDRESS IP地址,可以表征IPv4或者IPv6地址。但在系统内,该类型是一个统一的IPv6地址。 对于IPv4的支持,是通过将IPv4映射到IPv6的取值范围(RFC 4291#section-2.5.5.2)来实现的。当创建一个IPv4时,会被映射到IPv6。当格式化时,如果数据是IPv4又会被重新映射为IPv4。 其他的地址则会按照RFC 5952所定义的规范格式来进行格式化。 示例: select IPADDRESS '10.0.0.1', IPADDRESS '2001:db8::1'; _col0 | _col1 ----------|------------- 10.0.0.1 | 2001:db8::1 (1 row)
  • 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
  • 整数类型 表1 整数类型 名称 描述 存储空间 取值范围 字面量 TINYINT 微整数 8位 -128~127 TINYINT SMALLINT 小整数 16位 -32,768 ~ +32,767 SMALLINT INTEGER 整数 32位 -2,147,483,648 ~ +2,147,483,647 INT BIGINT 大整数 64位 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 BIGINT 示例: --创建具有TINYINT类型数据的表。 CREATE TABLE int_type_t1 (IT_COL1 TINYINT) ; --插入TINYINT类型数据 insert into int_type_t1 values (TINYINT'10'); --查看数据。 SELECT * FROM int_type_t1; it_col1 --------- 10 (1 row) --删除表。 DROP TABLE int_type_t1;
  • 固定精度型 名称 描述 存储空间 取值范围 字面量 DECIMAL 固定精度的十进制数。精度最高支持到38位,但精度小于18位能保障性能最好。 Decimal有两个输入参数: precision:总位数,默认38 scale:小数部分的位数,默认0 说明: 如果小数位为零,即十进制(38,0),则支持最高19位精度。 64位 DECIMAL NUMERIC 同DECIMAL 128位 NUMERIC 表2 字面量示例 字面量示例 数据类型 DECIMAL '0' DECIMAL(1) DECIMAL '12345' DECIMAL(5) DECIMAL '0000012345.1234500000' DECIMAL(20, 10) --创建具有DECIMAL类型数据的表 CREATE TABLE decimal_t1 (dec_col1 DECIMAL(10,3)) ; --插入具有DECIMAL类型数据 insert into decimal_t1 values (DECIMAL '5.325'); --查看数据 SELECT * FROM decimal_t1; dec_col1 --------- 5.325 (1 row) --反例:小数位数超出定义长度,sql执行失败 insert into decimal_t1 values (DECIMAL '5.3253'); Query 20201126_034601_00053_tq98i@default@HetuEngine failed: Insert query has mismatched column types: Table: [decimal(10,3)], Query: [decimal(5,4)] --删除表 DROP TABLE decimal_t1; --创建NUMERIC 类型表 CREATE TABLE tb_numberic_hetu(col1 NUMERIC(9,7)); CREATE TABLE --插入数据 INSERT INTO tb_numberic_hetu values(9.12); INSERT: 1 row --查看数据 SELECT * FROM tb_numberic_hetu; col1 ------------ 9.1200000 (1 row)
  • 布尔类型 “真”值的有效文本值是:TRUE、't'、'true'、'1'。 “假”值的有效文本值是:FALSE、'f'、'false'、'0'。 使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。 示例: select BOOLEAN '0'; _col0 ------- false (1 row) select BOOLEAN 'TRUE'; _col0 ------- true (1 row) select BOOLEAN 't'; _col0 ------- true (1 row)
  • 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;
  • SEMI JOIN、ANTI JOIN 当一张表在另一张表找到匹配的记录之后,半连接(semi-join)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。半连接通常使用IN或EXISTS作为连接条件。 而anti-join则与semi-join相反,即当在第二张表没有发现匹配记录时,才会返回第一张表里的记录;当使用not exists/not in的时候会用到。 其他支持的条件包括如下内容: where子句中的多个条件 别名关系 下标表达式 解引用表达式 强制转换表达式 特定函数调用 目前,只在如下情况下支持多个semi/anti join表达式:第一个表中的列在其直接后续的join表达式中被查询,且不与其它join表达式有关系。 示例如下:
  • 统计聚合函数 corr(y,x) 描述:返回输入值的相关系数。 select corr(y,x) from (values (1,5),(2,6),(3,7),(4,8)) as t(x,y);-- 1.0 covar_pop(y, x) 描述:返回输入值的总体协方差。 select covar_pop(y,x) from (values (1,5),(2,6),(3,7),(4,8)) as t(x,y); --1.25 covar_samp(y, x) 描述:返回输入值的样本协方差。 select covar_samp(y,x) from (values (1,5),(2,6),(3,7),(4,8)) as t(x,y);-- 1.6666666 kurtosis(x) 描述:峰度又称峰态系数,表征概率密度分布曲线在平均值处峰值高低的特征数,即是描述总体中所有取值分布形态陡缓程度的统计量。直观看来,峰度反映了峰部的尖度。这个统计量需要与正态分布相比较。 定义上峰度是样本的标准四阶中心矩(standardized 4th central moment)。 随机变量的峰度计算方法为随机变量的四阶中心矩与方差平方的比值。 具体计算公式为: select kurtosis(x) from (values (1),(2),(3),(4)) as t(x); -- -1.1999999999999993 regr_intercept(y, x) 描述:返回输入值的线性回归截距。y是从属值。x是独立值。 select regr_intercept(y,x) from (values (1,5),(2,6),(3,7),(4,8)) as t(x,y);-- 4.0 regr_slope(y, x) 描述:返回输入值的线性回归斜率。y是从属值。x是独立值。 select regr_slope(y,x) from (values (1,5),(2,6),(3,7),(4,8)) as t(x,y);-- 1.0 skewness(x) 描述:返回所有输入值的偏斜度。 select skewness(x) from (values (1),(2),(3),(4)) as t(x); -- 0.0 stddev(x) 描述:stedev_samp()的别名。 stddev_pop(x) 描述:返回所有输入值的总体标准差。 select stddev_pop(x) from (values (1),(2),(3),(4)) as t(x);-- 1.118033988749895 stddev_samp(x) 描述:返回所有输入值的样本标准偏差。 select stddev_samp(x) from (values (1),(2),(3),(4)) as t(x);-- 1.2909944487358056 variance(x) 描述:var_samp()的别名。 var_pop(x) 描述:返回所有输入值的总体方差。 select var_pop(x) from (values (1),(2),(3),(4)) as t(x);-- 1.25 var_samp(x) 描述:返回所有输入值的样本方差。 select var_samp(x) from (values (1),(2),(3),(4)) as t(x);-- 1.6666666666666667
  • Bitwise聚合函数 bitwise_and_agg(x) 描述:用补码表示输入字段x的按位与,返回类型为bigint。 select bitwise_and_agg(x) from (values (31),(32)) as t(x);-- 0 bitwise_or_agg(x) 描述:用补码表示输入字段x的按位或,返回类型为bigint。 select bitwise_or_agg(x) from (values (31),(32)) as t(x);-- 63
  • 限制 仅Hive数据源的Catalog支持视图的列描述。 在HetuEngine中创建的视图,视图的定义以编码方式存储在数据源里。在数据源可以查询到该视图,但无法对该视图执行操作。 视图是只读的,不可对它执行LOAD、INSERT操作。 视图可以包含ORDER BY和LIMIT子句,如果关联了该视图的查询语句也包含了这些子句,那么查询语句中的ORDER BY和LIMIT子句将以视图的结果为基础进行运算。
  • 示例 通过表orders创建一个视图test: CREATE VIEW test (oderkey comment 'orderId',orderstatus comment 'status',half comment 'half') AS SELECT orderkey, orderstatus, totalprice / 2 AS half FROM orders; 通过表orders的汇总结果创建视图orders_by_date: CREATE VIEW orders_by_date AS SELECT orderdate, sum(totalprice) AS price FROM orders GROUP BY orderdate; 创建一个新视图来替换已经存在的视图: CREATE OR REPLACE VIEW test AS SELECT orderkey, orderstatus, totalprice / 4 AS quarter FROM orders 创建一个视图的同时设置表属性: create or replace view view1 comment 'the first view' TBLPROPERTIES('format'='orc') as select * from fruit;
  • 描述 “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条数据返回。
  • 示例 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)
  • 示例 显示能够创建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)
  • 示例 创建文件“f1.txt”,填入3行数字,并通过HDFS上传到“/opt/load_test/”目录下。 --读取f1.txt的数据填充表f1 CREATE TABLE tb_load_f1(id int) with (format='TEXTFILE'); LOAD DATA INPATH '/opt/load_test/f1.txt' into table tb_load_f1; select * from tb_load_f1; id ---- 1 2 3 (3 rows) --读取/opt/load_test/目录下的文件,填充表f2 CREATE TABLE tb_load_f2(id int) with (format='TEXTFILE'); LOAD DATA INPATH '/opt/load_test/' into table tb_load_f2; select * from tb_load_f2; id ---- 1 2 3 (3 rows) --读取f3.txt文件内容填充表f3(多字段,数据分割符为'-'),并通过HDFS上传到/opt/load_test/ 目录下,f3.txt文件内容如下: 1-n1 2-n2 -- 创建目标表tb_load_f3 CREATE TABLE tb_load_f3(id int,name varchar) with(format='TEXTFILE',textfile_field_separator='-'); Load data inpath '/opt/load_test/f3.txt' into table tb_load_f3; Select * from tb_load_f3; id | name ----|------ 1 | n1 2 | n2 (2 rows)
  • 语法 ALTER (DATABASE|SCHEMA) schema_name SET LOCATION hdfs_location ALTER (DATABASE|SCHEMA) database_name SET OWNER USER username ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);
  • 语法 INSERT { INTO | OVERWRITE } [TABLE] table_name [(column_list)] [ PARTITION (partition_clause)] {select_statement | VALUES (value [, value ...]) [, (value [, value ...]) ...] } FROM from_statement INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement FROM from_statement INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) select_statement
  • 限制 如果数据表中只有一个字段,且字段类型为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'));
  • 示例 创建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 ordr; 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;
  • 描述 向表中插入新的数据行。 如果指定了列名列表,那么这些列名列表必须与query语句产生列列表名完全匹配。表中不在列名列表中的每一列,其值会设置为null。 如果没有指定列名列表,则query语句产生的列必须与将要插入的列完全匹配。 使用insert into时,会往表中追加数据,而使用insert overwrite时,如果表属性“auto.purge”被设置为“true”,直接删除原表数据,再写入新的数据。 如果对象表是分区表时,insert overwrite会删除对应分区的数据而非所有数据。 insert into后面的table关键字为可选,以兼容hive语法。
  • 日期函数 本节中的函数使用与Teradata datetime函数兼容的格式字符串。下表基于Teradata参考手册,描述了受支持的格式说明符。 说明符 说明 - / , . ; : 忽略标点符号 dd 一个月中的第几日(1-31) hh 一天中的第几个小时(1-12) hh24 一天中的第几个小时(0-23) mi 分钟(0-59) mm 月份(01-12) ss 秒(0-59) yyyy 四位年份 yy 两位年份 当前不支持不区分大小写。 所有说明符必须小写。 to_char(timestamp, format) 描述:将时间戳按指定格式输出为字符串。 select to_char(timestamp '2020-12-18 15:20:05','yyyy/mmdd hh24:mi:ss');-- 2020/1218 15:20:05 to_timestamp(string, format) 描述:将字符串按规定格式解析为timestamp。 select to_timestamp('2020-12-18 15:20:05','yyyy-mm-dd hh24:mi:ss'); -- 2020-12-18 15:20:05.000 to_date(string, format) 描述:将字符串按格式转换为日期。 select to_date('2020/12/04','yyyy/mm/dd'); -- 2020-12-04
  • 二进制算术 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)。
  • DECIMAL 字面量 可以使用 DECIMAL 'xxxxxxx.yyyyyyy' 语法来定义 DECIMAL 类型的字面量。 DECIMAL 类型的字面量精度将等于字面量(包括尾随零和前导零)的位数。范围将等于小数部分(包括尾随零)的位数。 示例字面量 数据类型 DECIMAL '0' DECIMAL(1) DECIMAL '12345' DECIMAL(5) DECIMAL '0000012345.1234500000' DECIMAL(20, 10)
  • OFFSET OFFSET的作用是丢弃结果集中的前若干行数据。 OFFSET count [ ROW | ROWS ] 如果有ORDER BY,则OFFSET将会作用于排序后的结果集,OFFSET丢弃前若干行数据后保留的数据集,仍然是排序的: SELECT name FROM fruit ORDER BY name OFFSET 3; name ------------ peach pear watermelon (3 rows) 否则,如果没有使用ORDER BY,被丢弃的行可能是任意的行。如果OFFSET指定的行数等于或超过了结果集的大小,则最终返回的结果为空。
  • 三角函数 所有三角函数的参数都是以弧度表示。参考单位转换函数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
  • 浮点函数 infinity() → double 返回表示正无穷大的常数。 select infinity();-- Infinity is_finite(x) → boolean 判断x是否有限值。 select is_finite(infinity());-- false select is_finite(50000);--true is_infinite(x) → boolean 判断x是否无穷大。 select is_infinite(infinity());-- true select is_infinite(50000);--false is_nan(x) → boolean 判断x是否非数字。 --输入的值必须为double类型 select is_nan(null); -- NULL select is_nan(nan()); -- true select is_nan(45);-- false nan() → double 返回表示非数字的常数。 select nan(); -- NaN
  • 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 父主题: HetuEngine SQL函数和操作符说明
  • JSON函数 NULL到JSON的转换并不能简单地实现。从独立的NULL进行转换将产生一个SQLNULL,而不是JSON 'null'。不过,在从包含NULL的数组或Map进行转换时,生成的JSON将包含NULL。 在从ROW转换为JSON时,结果是一个JSON数组,而不是一个JSON对象。这是因为对于SQL中的行,位置比名称更重要。 支持从BOOLEAN、TINYINT、SMALLINT、INTEGER、BIGINT、REAL、DOUBLE或VARCHAR进行转换。当数组的元素类型为支持的类型之一、Map的键类型是VARCHAR且Map的值类型是支持的类型之一或行的每个字段类型是支持的类型之一时支持从ARRAY、MAP或ROW进行转换。下面通过示例展示了转换的行为: SELECT CAST(NULL AS JSON);-- NULL SELECT CAST(1 AS JSON);-- JSON '1' SELECT CAST(9223372036854775807 AS JSON);-- JSON '9223372036854775807' SELECT CAST('abc' AS JSON);-- JSON '"abc"' SELECT CAST(true AS JSON);-- JSON 'true' SELECT CAST(1.234 AS JSON);-- JSON '1.234' SELECT CAST(ARRAY[1, 23, 456] AS JSON);-- JSON '[1,23,456]' SELECT CAST(ARRAY[1, NULL, 456] AS JSON);-- JSON '[1,null,456]' SELECT CAST(ARRAY[ARRAY[1, 23], ARRAY[456]] AS JSON);-- JSON '[[1,23],[456]]' SELECT CAST(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[1, 23, 456]) AS JSON);-- JSON '{"k1":1,"k2":23,"k3":456}' SELECT CAST(CAST(ROW(123, 'abc', true) AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN)) AS JSON);-- JSON '[123,"abc",true]'
  • JSON 转其它类型 SELECT CAST(JSON 'null' AS VARCHAR);-- NULL SELECT CAST(JSON '1' AS INTEGER);-- 1 SELECT CAST(JSON '9223372036854775807' AS BIGINT);-- 9223372036854775807 SELECT CAST(JSON '"abc"' AS VARCHAR);-- abc SELECT CAST(JSON 'true' AS BOOLEAN);-- true SELECT CAST(JSON '1.234' AS DOUBLE);-- 1.234 SELECT CAST(JSON '[1,23,456]' AS ARRAY(INTEGER));-- [1, 23, 456] SELECT CAST(JSON '[1,null,456]' AS ARRAY(INTEGER));-- [1, NULL, 456] SELECT CAST(JSON '[[1,23],[456]]' AS ARRAY(ARRAY(INTEGER)));-- [[1, 23], [456]] SELECT CAST(JSON '{"k1":1, "k2":23, "k3":456}' AS MAP(VARCHAR, INTEGER));-- {k1=1, k2=23, k3=456} SELECT CAST(JSON '{"v1":123, "v2":"abc","v3":true}' AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN));-- {v1=123, v2=abc, v3=true} SELECT CAST(JSON '[123, "abc",true]' AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN));-- {value1=123, value2=abc, value3=true} SELECT CAST(JSON'[[1, 23], 456]'AS ARRAY(JSON));-- [JSON '[1,23]', JSON '456'] SELECT CAST(JSON'{"k1": [1, 23], "k2": 456}'AS MAP(VARCHAR,JSON));-- {k1 = JSON '[1,23]', k2 = JSON '456'} SELECT CAST(JSON'[null]'AS ARRAY(JSON));-- [JSON 'null']
  • 描述 调用指定的存储过程。 存储过程由各个连接(connnectors)提供,实现数据操作或者管理任务。例如,系统连接器(System Connector)就定义了存储过程可以取消一个正在运行的查询。有些数据源,例如PostgreSQL,其系统有定义自己的存储过程,这与连接器定义的存储过程不同,是无法被CALL调用的。 检查并更新metastroe中分区数组,它支持3种模式: ADD:将文件系统中存在但metastore里没有的分区系统同步到metastroe中。 DROP:drop元数据表中存在但文件系统中不存在的分区。 FULL:同时进行ADD和DROP操作。
共100000条