华为云用户手册

  • 示例 CREATE TABLE IF NOT EXISTS productdb.productSalesTable ( productNumber Int, productName String, storeCity String, storeProvince String, productCategory String, productBatch String, saleQuantity Int, revenue Int) STORED AS carbondata TBLPROPERTIES ( 'table_blocksize'='128', 'SORT_COLUMNS'='productBatch, productName')
  • 参数描述 表1 CREATE TABLE参数描述 参数 描述 db_name Database名称,由字母、数字和下划线(_)组成。 col_name data_type 以逗号分隔的带数据类型的列表。列名由字母、数字和下划线(_)组成。 说明: 在CarbonData表创建过程中,不允许使用tupleId,PositionId和PositionReference为列命名,因为具有这些名称的列由二级索引命令在内部使用。 table_name Database中的表名,由字母、数字和下划线(_)组成。 STORED AS 参数carbondata,定义和创建CarbonData table。 TBLPROPERTIES CarbonData table属性列表。
  • SHOW语法使用概要 SHOW语法主要用来查看数据库对象的相关信息,其中LIKE子句用来对数据库对象过滤,匹配规则如下,具体示例可参看SHOW TABLES: 规则1:_可以用来匹配单个任意字符。 规则2:%可以用来匹配0个或者任意个任意字符。 规则3:* 可以用来匹配0个或者任意个任意字符。 规则4:|可以用来配置多种规则,规则之间用“|”分隔。 规则5:当想将“_”作为匹配条件时,可以使用ESCAPE 指定一个转义字符,对“_”进行转义,以免按照规则1对“_”进行解析。 父主题: DDL 语法
  • 参考信息 被广播的表执行超时,导致任务结束。 默认情况下,BroadCastJoin只允许被广播的表计算5分钟,超过5分钟该任务会出现超时异常,而这个时候被广播的表的broadcast任务依然在执行,造成资源浪费。 这种情况下,有两种方式处理: 调整“spark.sql.broadcastTimeout”的数值,加大超时的时间限制。 降低“spark.sql.autoBroadcastJoinThreshold”的数值,不使用BroadCastJoin的优化。
  • 示例 -- 创建事务表 create table upd_tb(col1 int,col2 string) with (format='orc',transactional=true); --插入数据 insert into upd_tb values (3,'A'),(4,'B'); --修改col1 = 4的数据 update upd_tb set col1=5 where col1=4; --查询表,col1=4的记录已被修改 select * from upd_tb; -- col1 | col2 ------|------ 5 | B 3 | A
  • 示例 --创建测试表 Create table show_table1(a int); Create table show_table2(a int); Create table showtable5(a int); Create table intable(a int); Create table fromtable(a int); --匹配单字符'_' show tables in default like 'show_table_'; Table ------------- show_table1 show_table2 (2 rows) --匹配多字符'*','%' show tables in default like 'show%'; Table ------------- show_table1 show_table2 showtable5 (3 rows) show tables in default like 'show*'; Table ------------- show_table1 show_table2 showtable5 (3 rows) --转义字符使用,第二个示例将'_'作为过滤条件,结果集不包含showtable5 show tables in default like 'show_%'; Table ------------- show_table1 show_table2 showtable5 (3 rows) show tables in default like 'show$_%' ESCAPE '$'; Table ------------- show_table1 show_table2 (2 rows) --同时满足多个条件,查询default中'show_'开头或者'in'开头的表 show tables in default like 'show$_%|in%' ESCAPE '$'; Table ------------- intable show_table1 show_table2 (3 rows)
  • 示例 START TRANSACTION; START TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION READ WRITE; START TRANSACTION ISOLATION LEVEL READ COMMITTED, READ ONLY; START TRANSACTION READ WRITE, ISOLATION LEVEL SERIALIZABLE; 不支持嵌套事务,也就是开启事务后,在commit之前不能再开启其它事务。
  • 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)。
  • 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'); -- 1 SELECT parse_presto_data_size('1kB'); -- 1024 SELECT parse_presto_data_size('1MB'); -- 1048576 SELECT parse_presto_data_size('2.3MB'); -- 2411724
  • 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
  • ORDER BY ORDER BY子句用于按一个或多个输出表达式对结果集排序。 ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] 每个expression可以由输出列组成,也可以是按位置选择输出列的序号。 ORDER BY子句在GROUP BY或HAVING子句之后,在OFFSET、LIMIT或FETCH FIRST子句之前进行计算。 按照SQL规范,ORDER BY子句只影响包含该子句的查询结果的行顺序。HetuEngine遵循该规范,并删除该子句的冗余用法,以避免对性能造成负面影响。 例如在执行INSERT语句时,ORDER BY子句不会对插入的数据产生影响,是个冗余的操作,会对整个INSERT语句的整体性能产生负面影响,因此HetuEngine会跳过ORDER BY操作。 ORDER BY只作用于SELECT子句: INSERT INTO some_table SELECT * FROM another_table ORDER BY field; ORDER BY冗余的例子是嵌套查询,不影响整个语句的结果: SELECT * FROM some_table JOIN (SELECT * FROM another_table ORDER BY field) u ON some_table.key = u.key;
  • CREATE/DROP/SHOW VIRTUAL SCHEMA(S) CREATE HetuEngine中的CREATE语句用来创建SCHEMA映射,通过映射信息对外开放本域数据源。 语法如下: CREATE VIRTUAL SCHEMA [ IF NOT EXISTS ] [ ctlg_dest.]schema_name WITH ( [catalog = ctlg_name,] schema = schm_name, [property_name = expression, ...] ) 创建一个virtual schema,需要在WITH中提供具体映射的schema信息。 ctlg_dest为在哪个数据源创建virtual schema,参数可选,如果不指定则取当前Session中的catalog,如果当前Session中也未指定catalog则会创建失败。 WITH必选,schema参数必选,catalog参数可选(如果不指定则取当前Session中的catalog)。 样例语句: CREATE VIRTUAL SCHEMA hive_default WITH (catalog = 'hive', schema = 'default'); DROP HetuEngine中的DROP语句用来删除SCHEMA映射。 语法如下: DROP VIRTUAL SCHEMA [ IF EXISTS ] schema_name schema_name也可以替换为全限定名(catalogName.virtualSchema)。 样例语句: DROP VIRTUAL SCHEMA hive_default; SHOW HetuEngine中的SHOW语句用来查询所有SCHEMA映射。 语法如下: SHOW VIRTUAL SCHEMAS [ FROM catalog ] [ LIKE pattern ] 样例语句: SHOW VIRTUAL SCHEMAS;
  • 浮点型 名称 描述 存储空间 取值范围 字面量 REAL 实数 32位 1.40129846432481707e-45 ~3.40282346638528860e+38,正或负 REAL DOUBLE 双精度浮点数,15到17个有效位,具体取决于使用场景,有效位位数并不取决于小数点位置 64位 4.94065645841246544e-324 ~1.79769313486231570e+308,正或负 DOUBLE FLOAT 单精度浮点数,6到9个有效位,具体取决于使用场景,有效位位数并不取决于小数点位置 32位 1.40129846432481707e-45 ~3.40282346638528860e+38,正或负 FLOAT 用法说明: 分布式查询使用高性能硬件指令进行单精度或者双精度运算时,由于每次执行的顺序不一样,在调用聚合函数,比如SUM(),AVG(),特别是当数据规模非常大时,达到数千万甚至数十亿,其运算结果可能会略有不同。这种情况下,建议使用DECIMAL数据类型来运算。 可以使用别名来指定数据类型。 示例: --创建具有float类型数据的表 CREATE TABLE float_t1 (float_col1 FLOAT) ; --插入具有float类型数据 insert into float_t1 values (float '3.50282346638528862e+38'); --查看数据 SELECT * FROM float_t1; float_col1 ------------ Infinity (1 row) --删除表 DROP TABLE float_t1; 当小数部分为0时,可以通过cast()转为对应范围的整数处理,小数部分会四舍五入。 示例: select CAST(1000.0001 as INT); _col0 ------- 1000 (1 row) select CAST(122.5001 as TINYINT); _col0 ------- 123 (1 row) 使用指数表达式时,可以将字符串转为对应类型。 示例: select CAST(152e-3 as double); _col0 ------- 0.152 (1 row) 父主题: 数据类型
  • 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指定的行数等于或超过了结果集的大小,则最终返回的结果为空。
  • 示例 --PREPARE my_select1 FROM SELECT * FROM fruit; DESCRIBE OUTPUT my_select1; --PREPARE my_select2 FROM SELECT count(*) as my_count, 1+2 FROM fruit; DESCRIBE OUTPUT my_select2; --PREPARE my_create FROM CREATE TABLE foo AS SELECT * FROM fruit; DESCRIBE OUTPUT my_create;
  • 编码函数 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
  • 提取函数 描述:提取函数用于从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
  • 语法 [/*+ query_rewrite_hint*/] [ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT { count | ALL } ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES } ] from_item 可以是以下形式: table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] from_item join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ] table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] MATCH_RECOGNIZE pattern_recognition_specification [ [ AS ] alias [ ( column_alias [, ...] ) ] ] join_type 可以是以下形式: [ INNER ] JOIN LEFT [ OUTER ] JOIN RIGHT [ OUTER ] JOIN FULL [ OUTER ] JOIN LEFT [SEMI] JOIN RIGHT [SEMI] JOIN LEFT [ANTI] JOIN RIGHT [ANTI] JOIN CROSS JOIN grouping_element 可以是以下形式: () expression GROUPING SETS ( ( column [, ...] ) [, ...] ) CUBE ( column [, ...] ) ROLLUP ( column [, ...] )
  • 示例 将表名从users 修改为 people: ALTER TABLE users RENAME TO people; 在表users中增加名为zip的列: ALTER TABLE users ADD COLUMN zip varchar; 从表users中删除名为zip的列: ALTER TABLE users DROP COLUMN zip; 将表users中列名id更改为user_id: ALTER TABLE users RENAME COLUMN id TO user_id; 修改分区操作: --创建两个分区表 CREATE TABLE IF NOT EXISTS hetu_int_table5 (eid int, name String, salary String, destination String, dept String, yoj int) COMMENT 'Employee Names' partitioned by (dt timestamp,country String, year int, bonus decimal(10,3)) STORED AS TEXTFILE; CREATE TABLE IF NOT EXISTS hetu_int_table6 (eid int, name String, salary String, destination String, dept String, yoj int) COMMENT 'Employee Names' partitioned by (dt timestamp,country String, year int, bonus decimal(10,3)) STORED AS TEXTFILE; --添加分区 ALTER TABLE hetu_int_table5 ADD IF NOT EXISTS PARTITION (dt='2008-08-08 10:20:30.0', country='IN', year=2001, bonus=500.23) PARTITION (dt='2008-08-09 10:20:30.0', country='IN', year=2001, bonus=100.50) ; --查看分区 show partitions hetu_int_table5; dt | country | year | bonus -------------------------|---------|------|--------- 2008-08-09 10:20:30.000 | IN | 2001 | 100.500 2008-08-08 10:20:30.000 | IN | 2001 | 500.230 (2 rows) --删除分区 ALTER TABLE hetu_int_table5 DROP IF EXISTS PARTITION (dt=timestamp '2008-08-08 10:20:30.0', country='IN', year=2001, bonus=500.23); --查看分区 show partitions hetu_int_table5; dt | country | year | bonus -------------------------|---------|------|--------- 2008-08-09 10:20:30.000 | IN | 2001 | 100.500 (1 row) --迁移分区示例 CREATE SCHEMA part_test; CREATE TABLE hetu_exchange_partition1 (a string, b string) PARTITIONED BY (ds string); CREATE TABLE part_test.hetu_exchange_partition2 (a string, b string) PARTITIONED BY (ds string); ALTER TABLE hetu_exchange_partition1 ADD PARTITION (ds='1'); --查看分区 show partitions hetu_exchange_partition1; ds ---- 1 (1 row) show partitions part_test.hetu_exchange_partition2; ds ---- (0 rows) --迁移分区,从 T1 到 T2 ALTER TABLE part_test.hetu_exchange_partition2 EXCHANGE PARTITION (ds='1') WITH TABLE hetu_exchange_partition1; --再次查看分区,可以看到分区迁移成功 show partitions hetu_exchange_partition1; ds ---- (0 row) show partitions part_test.hetu_exchange_partition2; ds ---- 1 (1 rows) --重命名分区 CREATE TABLE IF NOT EXISTS hetu_rename_table ( eid int, name String, salary String, destination String, dept String, yoj int) COMMENT 'Employee details' partitioned by (year int) STORED AS TEXTFILE; ALTER TABLE hetu_rename_table ADD IF NOT EXISTS PARTITION (year=2001); SHOW PARTITIONS hetu_rename_table; year ------ 2001 (1 row) ALTER TABLE hetu_rename_table PARTITION (year=2001) rename to partition (year=2020); SHOW PARTITIONS hetu_rename_table; year ------ 2020 (1 row) --修改分区表 create table altercolumn4(a integer, b string) partitioned by (c integer); --修改表的文件格式 alter table altercolumn4 SET FILEFORMAT textfile; insert into altercolumn4 values (100, 'Daya', 500); alter table altercolumn4 partition (c=500) change column b empname string comment 'changed column name to empname' first; --修改分区表的存储位置(需要先在hdfs上创建目录,执行语句后,无法查到之前插入的那条数据) alter table altercolumn4 partition (c=500) set Location '/user/hive/warehouse/c500'; --修改列 b 改名为name,同时类型从integer转为string create table altercolumn1(a integer, b integer) stored as textfile; alter table altercolumn1 change column b name string; --修改altercolumn1的存储属性 ALTER TABLE altercolumn1 CLUSTERED BY(a, name) SORTED BY(name) INTO 25 BUCKETS; --查看altercolumn1的属性 describe formatted altercolumn1; Describe Formatted Table ---------------------------------------------------------------------------------------- # col_name data_type comment a integer name varchar # Detailed Table Information Database: default Owner: admintest LastAccessTime: 0 Location: hdfs://hacluster/user/hive/warehouse/altercolumn1 Table Type: MANAGED_TABLE # Table Parameters: STATS_GENERATED_VIA_STATS_TASK workaround for potential lack of HIVE-12730 numFiles 0 numRows 0 orc.compress.size 262144 orc.compression.codec GZIP orc.row.index.stride 10000 orc.stripe.size 67108864 presto_query_id 20210325_025238_00034_f63xj@default@HetuEngine presto_version rawDataSize 0 totalSize 0 transient_lastDdlTime 1616640758 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: 25 Bucket Columns: [a, name] Sort Columns: [SortingColumn{columnName=name, order=ASCENDING}] Storage Desc Params: serialization.format 1 (1 row) Query 20210325_090522_00091_f63xj@default@HetuEngine, FINISHED, 1 node Splits: 1 total, 1 done (100.00%) 0:00 [0 rows, 0B] [0 rows/s, 0B/s]
  • 限制 EXCHANGE PARTITION: 被迁移的单个或多个分区,迁移前必须都是已存在的分区,并归属于来源表,且在目标表中不包含这些分区; 该操作涉及的表需要有相同的列定义,并且有相同的分区键; 如果表中包含索引,该操作会失败; 来源表和目标表中任意一个为事务表时,不允许Exchange partition操作; 对于目标表,在一次操作中,多个分区要么同时迁移成功,要么全部失败。对于来源表,操作成功后,所有迁移的分区都会被释放; Alter table change column不支持orc格式的表。 ALTER TABLE table_name ADD | DROP col_name命令仅对于ORC/PARQUET存储格式的非分区表可用。
  • 语法 CREATE FUNCTION qualified_function_name ( parameter_name parameter_type [, ...] ) RETURNS return_type [ COMMENT function_description ] [ LANGUAGE [ JAVA ] ] [ SPECIFIC specificName ] [ DETERMINISTIC | NOT DETERMINISTIC ] [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ] [ SYMBOL class_name ] [ URI hdfs_path_to_jar ]
  • 示例 创建一个新的JAVA函数“example.default.add_two”(需要先构建和部署UDF) CREATE FUNCTION example.default.add_two ( num integer ) RETURNS integer LANGUAGE JAVA DETERMINISTIC SYMBOL "com.example.functions.AddTwo" URI "hdfs://hacluster/udfs/function-1.0.jar"; --执行函数 select hetu.default.add_two(2);
  • 描述 通过给定的定义创建一个新的函数。 每一个函数都由其限定函数名称和参数类型列表唯一标识。“qualified_function_name”的格式需要为“catalog.schema.function_name”,函数命名空间(格式为“catalog.schema”)可以自行规划管理,与HetuEngine中的catalog、schema概念无关联;“parameter_type”需要为HetuEngine支持的数据类型。 “return_type”需要为HetuEngine支持的数据类型,要与函数的返回实际类型匹配,不做类型强制转换。 可以指定一组特征来修饰函数并指定其行为,每个特征最多只能指定一次,详情请参考表1。 表1 特征说明 特征 默认值 描述 Language clause - 定义函数的语言。目前支持JAVA语言。 JAVA函数:需要提供函数实现的JAR文件,并将JAR文件放入HetuEngine可以读取的HDFS中。 Deterministic characteristic NOT DETERMINISTIC 函数是否确定性。 DETERMINISTIC:如果函数在使用相同的输入集调用时总是返回相同的结果集,则该函数被视为确定性。 NOT DETERMINISTIC:如果函数在使用相同的输入集调用时不返回相同的结果集,则该函数将被视为非确定性。 Null-call clause CALLED ON NULL INPUT 函数的行为。 RETURNS NULL ON NULL INPUT:当“NULL”作为函数参数时,返回“NULL”。 CALLED ON NULL INPUT:当“NULL”作为函数参数时调用。 Symbol class_name - JAVA函数使用,指定函数实现的限定类名。 Uri hdfs_path_to_jar - JAVA函数使用,指定函数实现的JAR文件路径。
  • 语法 CREATE [EXTERNAL]① TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name [ ( column_alias, ... ) ] [[PARTITIONED BY ①(col_name, ....)] [SORT BY① ([column [, column ...]])] ]① [COMMENT 'table_comment'] [ WITH ( property_name = expression [, ...] ) ]② [[STORED AS file_format]① [LOCATION 'hdfs_path']① [TBLPROPERTIES (orc_table_property = value [, ...] ) ] ]① AS query [ WITH [ NO ] DATA ]②
  • 示例 用指定列的查询结果创建新表orders_column_aliased: CREATE TABLE orders_column_aliased (order_date, total_price) AS SELECT orderdate, totalprice FROM orders; 用表orders的汇总结果新建一个表orders_by_data: CREATE TABLE orders_by_date COMMENT 'Summary of orders by date' WITH (format = 'ORC') AS SELECT orderdate, sum(totalprice) AS price FROM orders GROUP BY orderdate; 如果表orders_by_date不存在,则创建表orders_by_date: CREATE TABLE IF NOT EXISTS orders_by_date AS SELECT orderdate, sum(totalprice) AS price FROM orders GROUP BY orderdate; 用和表orders具有相同schema创建新表empty_orders table,但是没数据: CREATE TABLE empty_orders AS SELECT * FROM orders WITH NO DATA; 使用VALUES 创建表,参考 VALUES。 分区表示例: CREATE EXTERNAL TABLE hetu_copy(corderkey, corderstatus, ctotalprice, corderdate, cds) PARTITIONED BY(cds) SORT BY (corderkey, corderstatus) COMMENT 'test' STORED AS orc LOCATION '/user/hetuserver/tmp' TBLPROPERTIES (orc_bloom_filter_fpp = 0.3, orc_compress = 'SNAPPY', orc_compress_size = 6710422, orc_bloom_filter_columns = 'corderstatus,ctotalprice') as select * from hetu_test; CREATE TABLE hetu_copy1(corderkey, corderstatus, ctotalprice, corderdate, cds) WITH (partitioned_by = ARRAY['cds'], bucketed_by = ARRAY['corderkey', 'corderstatus'], sorted_by = ARRAY['corderkey', 'corderstatus'], bucket_count = 16, orc_compress = 'SNAPPY', orc_compress_size = 6710422, orc_bloom_filter_columns = ARRAY['corderstatus', 'ctotalprice'], external = true, format = 'orc', location = '/user/hetuserver/tmp ') as select * from hetu_test;
  • Bitwise函数 bit_count(x, bits) → bigint 计算2的补码表示法中x中设置的位数(视为有符号位的整数)。 SELECT bit_count(9, 64); -- 2 SELECT bit_count(9, 8); -- 2 SELECT bit_count(-7, 64); -- 62 SELECT bit_count(-7, 8); -- 6 bitwise_and(x, y) → bigint 以二进制补码形式返回x和y按位与的结果。 select bitwise_and(8, 7); -- 0 bitwise_not(x) → bigint 以二进制补码形式返回x按位非的结果。 select bitwise_not(8);-- -9 bitwise_or(x, y) → bigint 以二进制补码形式返回x和y按位或的结果。 select bitwise_or(8,7);-- 15 bitwise_xor(x, y) → bigint 以二进制补码形式返回x和y按位异或的结果。 SELECT bitwise_xor(19,25); -- 10 bitwise_left_shift(value, shift) → [same as value] 描述:返回value左移shift位后的值。 SELECT bitwise_left_shift(1, 2); -- 4 SELECT bitwise_left_shift(5, 2); -- 20 SELECT bitwise_left_shift(0, 1); -- 0 SELECT bitwise_left_shift(20, 0); -- 20 bitwise_right_shift(value, shift) → [same as value] 描述:返回value右移shift位后的值。 SELECT bitwise_right_shift(8, 3); -- 1 SELECT bitwise_right_shift(9, 1); -- 4 SELECT bitwise_right_shift(20, 0); -- 20 SELECT bitwise_right_shift(0, 1); -- 0 -- 右移超过64位,返回0 SELECT bitwise_right_shift( 12, 64); -- 0 bitwise_right_shift_arithmetic(value, shift) → [same as value] 描述:返回value的算术右移值,当shift小于64位时,返回结果与bitwise_right_shift一样,当移动位数达到或者超过64位时,value是正数时返回0,负数时返回-1: SELECT bitwise_right_shift_arithmetic( 12, 64); -- 0 SELECT bitwise_right_shift_arithmetic(-45, 64); -- -1 父主题: SQL函数和操作符
  • 示例 -- 删除原生/管控表 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)
  • 整数类型 表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; 父主题: 数据类型
共100000条