华为云用户手册

  • 示例 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, ...);
  • 描述 向表中插入新的数据行。 如果指定了列名列表,那么这些列名列表必须与query语句产生列列表名完全匹配。表中不在列名列表中的每一列,其值会设置为null。 如果没有指定列名列表,则query语句产生的列必须与将要插入的列完全匹配。 使用insert into时,会往表中追加数据,而使用insert overwrite时,如果表属性“auto.purge”被设置为“true”,直接删除原表数据,再写入新的数据。 如果对象表是分区表时,insert overwrite会删除对应分区的数据而非所有数据。 insert into后面的table关键字为可选,以兼容hive语法。
  • 示例 创建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;
  • 语法 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'));
  • 日期函数 本节中的函数使用与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指定的行数等于或超过了结果集的大小,则最终返回的结果为空。
  • 浮点函数 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
  • 三角函数 所有三角函数的参数都是以弧度表示。参考单位转换函数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
  • 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 转其它类型 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']
  • 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]'
  • 描述 调用指定的存储过程。 存储过程由各个连接(connnectors)提供,实现数据操作或者管理任务。例如,系统连接器(System Connector)就定义了存储过程可以取消一个正在运行的查询。有些数据源,例如PostgreSQL,其系统有定义自己的存储过程,这与连接器定义的存储过程不同,是无法被CALL调用的。 检查并更新metastroe中分区数组,它支持3种模式: ADD:将文件系统中存在但metastore里没有的分区系统同步到metastroe中。 DROP:drop元数据表中存在但文件系统中不存在的分区。 FULL:同时进行ADD和DROP操作。
  • 多个子查询 with t1 as(select name,max(price) as maxprice from fruit group by name), t2 as(select name,avg(price) as avgprice from fruit group by name) select t1.*,t2.* from t1 join t2 on t1.name = t2.name;
  • 描述 该语法是使用SELECT查询结果创建物化视图。物化视图是一个数据库对象,它包含了一个查询的结果,例如:它可以是远程数据的本地副本,单表查询或者多表join后查询的结果的行或列、行和列的子集,也可以是使用聚合函数的汇总表。 物化视图通常基于对数据表进行聚合和连接的查询结果创建。物化视图支持“查询重写”,这是一种优化技术,它将以原始表编写的用户查询转换为包括一个或多个物化视图的等效请求。 语法支持的属性包括: storage_table:指定存储表表名。 need_auto_refresh: 管理计算实例时,预先创建维护实例后,可通过设置need_auto_refresh为true,创建具备自动刷新能力的物化视图,它会自动创建并提交物化视图刷新任务,在此基础上,可对refresh_duration,start_refresh_ahead_of_expiry,refresh_priority等属性做进一步配置来调整自动刷新任务。 mv_validity:物化视图生命周期。0表示永久有效,最短为1分钟。need_auto_refresh设置为false时,mv_validity默认值为0;设置为true时,默认值为24小时。 refresh_duration:物化视图自动刷新任务的最长等待时间。默认为5分钟,取值范围为1分钟到24小时。若自动刷新任务的等待时间超过设定的最长等待时间,自动化任务界面对应的任务状态显示为"timeout"。 start_refresh_ahead_of_expiry:基于mv _validity设置物化视图自动刷新任务的提交时间,表示达到物化生命周期的指定百分比时,提交自动刷新任务,默认值为0.2,最小值为0.05。 refresh_priority:物化视图提交自动刷新任务的优先级。默认值为3,最大值为3,1表示最高优先级。高优先级的任务会有更大机会先被执行。
  • 示例 返回一个1列3行的表: VALUES 1, 2, 3 返回一个2列3行的表: VALUES (1, 'a'), (2, 'b'), (3, 'c') 返回具有列名id、name的表: SELECT * FROM (values (1, 'a'), (2, 'b'),(3, 'c')) AS t (id, name); 创建一个具有列名id、name的新表: CREATE TABLE example AS SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t (id, name);
  • INTERSECT query INTERSECT [DISTINCT] query INTERSECT仅返回第一个和第二个查询的结果相交的行。以下是最简单的INTERSECT子句之一的示例。它选择值13和42,并将此结果集与选择值13的第二个查询合并。由于42仅在第一个查询的结果集中,因此不包含在最终结果中。 SELECT * FROM (VALUES 13,42) INTERSECT SELECT 13; _col0 ------- 13 (1 row)
  • EXCEPT query EXCEPT [DISTINCT] query EXCEPT返回在第一个查询结果而不在第二个查询结果中的行。 SELECT * FROM (VALUES 13, 42) EXCEPT SELECT 13; _col0 ------- 42 (1 row) Having子句目前不支持使用列的别名,例如: select count(userid) as num ,dept as aaa from salary group by dept having aaa='d1'; 报错如下: Query 20210630_085136_00024_wc8n9@default@HetuEngine failed: line 1:75: Column 'aaa' cannot be resolved
  • 函数 make_set_digest(x) → setdigest 描述:将所有的输入值X,组合到setdigest中。 SELECT make_set_digest(value) FROM (VALUES 1, 2, 3) T(value); _col0 ------------------------------------------------- 01 10 00 00 00 02 0b 03 00 80 03 44 00 00 58 3d 5b 80 20 08 de 00 20 00 00 03 00 00 00 a8 c0 76 6c a0 20 08 de 4a c4 05 fb b7 03 44 00 0c 8b 48 b2 39 58 3d 5b 01 00 01 00 01 00 (1 row) SELECT make_set_digest(value) FROM (VALUES 'Trino', 'SQL', 'on', 'everything') T(value); _col0 ------------------------------------------------- 01 14 00 00 00 02 0b 04 00 c0 8c 7d 1e c0 75 c9 2d c0 1a 1a 66 03 11 c3 a5 00 20 00 00 04 00 00 00 06 e5 2d 45 05 11 c3 a5 48 85 6b d5 e0 8c 7d 1e b9 1a 8a 39 ff 75 c9 2d 02 ad 0c 7c ed 1a 1a 66 01 00 01 00 01 00 01 00 (1 row) merge_set_digest(setdigest) → setdigest 描述:返回由输入值setdigest聚合组成的setdigest。 cardinality(setdigest) → long 描述:基于内部HyperLogLog组件返回setdigest的基数。 SELECT cardinality(make_set_digest(value)) FROM (VALUES 1, 2, 2, 3, 3,4, 4, 4, 5) T(value); -- 5 intersection_cardinality(x, y) → long 描述:返回两个集合摘要交集的基数估计。其中x,y 都是setdigest类型。 SELECT intersection_cardinality(make_set_digest(v1), make_set_digest(v2)) FROM (VALUES (1, 1), (NULL, 2), (2, 3), (3, 4)) T(v1, v2); -- 3 jaccard_index(x, y) → double 描述:返回两个集合摘要的Jaccard索引估计值。其中x,y 都是setdigest类型。 SELECT jaccard_index(make_set_digest(v1), make_set_digest(v2)) FROM (VALUES (1, 1), (NULL,2), (2, 3), (NULL, 4)) T(v1, v2); -- 0.5 hash_counts(x) 描述:返回一个包含Murmur3Hash128哈希值及其在属于x的内部MinHash结构中出现的计数的Map。其中x是setdigest类型。 SELECT hash_counts(make_set_digest(value)) FROM (VALUES 1, 1, 1, 2, 2) T(value); -- {19144387141682250=3, -2447670524089286488=2}
  • 调优案例 某用户使用Hudi MOR表存储其设备的订单出借信息,可通过订单号查询订单详细信息,每天订单量相对稳定,部分节假日可能存在小高峰,该场景存在以下特点: 订单号作为唯一值,并且80%以上的查询场景使用订单号进行等值查询,SQL形如select * from table where order_id = 'id1'; 每天订单量稳定,可采用天作为分区键。 历史分区更新不频繁,主要数据更新在新分区。 调优建议: 使用Bucket索引建表(Spark-SQL),并且索引键为订单ID, 分区键为日期。 定期使用compaction合并日志,提高查询性能。 SQL示例: set hoodie.compact.inline=true; set hoodie.schedule.compact.only.inline=true; set hoodie.run.compact.only.inline=false; create table hudi_mor (order_id int, comb int, col1 string, col2 string, dt int) using hudi partitioned by(dt) options(type='mor', primaryKey='order_id', preCombineField='comb', hoodie.index.type = 'BUCKET', hoodie.bucket.index.num.buckets=100, hoodie.bucket.index.hash.field = 'order_id')
  • 示例 删除schema web: DROP SCHEMA web; 如果schema sales存在,删除该schema: DROP SCHEMA IF EXISTS sales; 级联删除schema test_drop,schema test_drop中存在表tb_web,会先删除tb_web,再删除test_drop: CREATE SCHEMA test_drop; USE test_drop; CREATE TABLE tb_web(col1 int); DROP DATABASE test_drop CASCADE;
  • 描述 DATABASE和SCHEMA在概念上是等价可互换的。 该语法用于删除数据库databasename,如果目标数据库不存在,将抛出错误提示,但如果使用了IF EXISTS子句则不会抛出错误提示。 可选参数RESTRICT|CASCADE用于指定删除的模式,默认是RESTRICT模式,在这种模式下,数据库必须为空,不包含任何表才能删除,如果是CASCADE模式,表示级联删除,会先删除数据库下面的表 ,再删除数据库。
  • 示例 -- 删除原生/管控表 Create table simple(id int, name string); Insert into simple values(1,'abc'),(2,'def'); select * from simple; id | name ----|------ 1 | abc 2 | def (2 rows) Truncate table simple; select * from simple; id | name ----|------ (0 rows) --删除表分区 Create table tb_truncate_part (id int, name string) partitioned by (age int, state string); Insert into tb_truncate_part values (1,'abc',10,'ap'),(2,'abc',10,'up'),(3,'abc',20,'ap'),(4,'abc',20,'up'); select * from tb_truncate_part; id | name | age | state ----|------|-----|------- 2 | abc | 10 | up 3 | abc | 20 | ap 1 | abc | 10 | ap 4 | abc | 20 | up (4 rows Truncate table tb_truncate_part partition (state = 'ap', age = 10); select * from tb_truncate_part; id | name | age | state ----|------|-----|------- 4 | abc | 20 | up 2 | abc | 10 | up 3 | abc | 20 | ap (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) 父主题: HetuEngine SQL函数和操作符说明
  • 示例 创建一个名为web的schema: CREATE SCHEMA web; 在指定路径创建schema,兼容写法示例: CREATE SCHEMA test_schema_5 LOCATION '/user/hive'; 在名为Hive的CATALOG下创建一个名为sales的schema: CREATE SCHEMA hive.sales; 如果当前catalogs下名为traffic的schema不存在时,则创建一个名为traffic的schema: CREATE SCHEMA IF NOT EXISTS traffic; 创建一个带属性的schema: CREATE DATABASE createtestwithlocation COMMENT 'Holds all values' LOCATION '/user/hive/warehouse/create_new' WITH dbproperties('name'='akku', 'id' ='9'); --通过describe schema|database 语句来查看刚创建的schema describe schema createtestwithlocation;
共100000条