SELECT analyze_file("/root/demosql");
复制
表生成函数(User-Defined Table-Generating Functions),简称 UDTF,是用于解决将一行输出为多行需求的一类函数。
analyze_file
函数语法 | 返回类型 | 描述 |
---|---|---|
analyze_file(file_path) |
多行数据 |
分析指定文件中的 SQL 语句,并以表格的形式返回表之间的关联关系和过滤等逻辑,可帮助您快速了解 SQL 语句的全貌。 |
参数说明:
-
file_path:包含 SQL 语句的文件的绝对路径,该文件需提前存放至 Quark Server 的 Pod 中。
您可以在集群所属的设备上执行 |
使用示例:
返回示例:
+------------------------------+----------------------+--------------+------+--------+ | tab | column | related | udf | type | +------------------------------+----------------------+--------------+------+--------+ | tpcds.customer_demographics | cd_education_status | 'Secondary' | = | where | | tpcds.customer_demographics | cd_gender | 'F' | = | where | +------------------------------+----------------------+--------------+------+--------+
复制
current_roles
函数语法 | 返回类型 | 描述 |
---|---|---|
current_roles() |
多行数据 |
以表格形式返回当前用户的角色信息。 |
使用示例:
SELECT current_roles();
复制
返回示例:
+---------+ | role | +---------+ | public | | admin | | ADMIN | +---------+
复制
databases_v
函数语法 | 返回类型 | 描述 |
---|---|---|
databases_v() |
多行数据 |
以表格的形式返回所有数据库信息。 |
使用示例:
SELECT databases_v();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
database_id 2 database_name default commentstring Default Hive database database_location hdfs://nameservice1/quark1/user/hive/warehouse/default.db owner_name PUBLIC owner_type ROLE ... ...
复制
explode
函数名 | 返回类型 | 描述 |
---|---|---|
explode(expr) |
多行数据 |
以表格形式返回表达式中的元素。 |
参数说明:
-
expr:指定用于计算的表达式,可传入 ARRAY 或 MAP。传入 ARRAY 时,每个元素为一条记录;传入 MAP 时,每个键值对为一条记录。
使用示例:
SELECT explode(array('name','age','sex')) FROM system.dual;
复制
返回示例:
+-------+ | col | +-------+ | name | | age | | sex | +-------+
复制
jar_info
函数语法 | 返回类型 | 描述 |
---|---|---|
jar_info() |
多行数据 |
以表格的形式,返回当前系统使用的 Jar 包信息。 |
使用示例:
SELECT jar_info();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
name Transwarp Inceptor author root jdk 1.8.0_131 version 8.31.0 commit e813a48baf9a105cbc02f103baab5f1dd63a3757 time 2022-12-12 18:46:58 location file:/usr/lib/inceptor/inceptor-engine-8.31.0.jar name Inceptor Batch Operator author root jdk 1.8.0_131 version 8.31.0 commit b2e5de0ce34f8eaa0ef2a5bb4508dcac00b5b169 time 2022-12-08 21:15:53 location file:/usr/lib/inceptor/lib/inceptor-batch-operator-8.31.0.jar ... ... ...
复制
json_tuple
函数名 | 返回类型 | 描述 |
---|---|---|
json_tuple(expr, p1, p2 …) |
多行数据 |
以表格的形式,返回 JSON 中的元组。 |
参数说明:
-
expr:指定 JSON 格式的表达式,支持向该函数传递 STRING、CHAR、VARCHAR、VARCHAR2 类型。
-
p1、p2 …:分别指定要提取元组信息的位置,指定多个时采用英文逗号(,)分隔。
使用示例:
SELECT json_tuple( '{"firstName":"Brett","lastName":"McLaughlin","email":"demo@transwarp.io"}', 'firstName', 'email') FROM system.dual;
复制
返回示例:
+--------+--------------------+ | c0 | c1 | +--------+--------------------+ | Brett | demo@transwarp.io | +--------+--------------------+
复制
inline
函数名 | 返回类型 | 描述 |
---|---|---|
inline( ARRAY( STRUCT(expr)[,STRUCT(expr)] |
多行数据 |
以表格的形式返回数组中的信息,每个 Struct(结构体)作为一行。 |
参数说明:
-
expr:指定数组中的结构体。
使用示例:
SELECT inline(array(struct('name','age','sex'))) FROM system.dual;
复制
返回示例:
+-------+-------+-------+ | col1 | col2 | col3 | +-------+-------+-------+ | name | age | sex | +-------+-------+-------+
复制
lateral view
适用场景
为实现在返回表生成函数(UDTF)的结果同时查询其他对象,须引用关键字 LATERAL VIEW
,通过该子句将 UDTF 的结果存放至虚拟表中,然后使该虚拟表和输入行进行 JOIN,以达到连接 UDTF 外的 SELECT
对象的目的。
语法参考
SELECT <selectexpr1>, <columnAlias1> [, <columnAlias2>, ...] FROM baseTable ATERAL VIEW udtf(expression) <tableAlias> AS <columnAlias1> [, <columnAlias2>, ...]
复制
-
tableAlias:存放 UDTF 结果的虚拟表名称。
-
columnAlias:虚拟表中列的名称,在 SELECT 中必须以该名称访问被展开结果。
使用示例
假设我们有一个 table_array 表,存在 name 和 score 列,其类型分别为 array<string>
和 array<int>
,表数据:
+-------------------------+-------------+ | name | score | +-------------------------+-------------+ | ["Jack","Joe ","Phil"] | [88,78,90] | | ["Alice ","Willem"] | [79,82] | +-------------------------+-------------+
复制
下述示例中,我们借助 explode 函数返回表达式中的元素,然后将其存放至虚拟的列中,从而实现铺展显示 table_array 中 name 和 score 的值,使用示例如下:
SELECT slip_name, slip_score FROM table_array LATERAL VIEW explode(name) a AS slip_name LATERAL VIEW explode(score) b AS slip_score;
复制
返回示例:
+------------+-------------+ | slip_name | slip_score | +------------+-------------+ | Jack | 88 | | Jack | 78 | | Jack | 90 | | Joe | 88 | | Joe | 78 | | Joe | 90 | | Phil | 88 | | Phil | 78 | | Phil | 90 | | Alice | 79 | | Alice | 82 | | Willem | 79 | | Willem | 82 | +------------+-------------+
复制
license
函数语法 | 返回类型 | 描述 |
---|---|---|
license() |
多行数据 |
以表格的形式返回 License(许可证)信息,包含版本、到期时间等。 |
使用示例:
SELECT license();
复制
返回示例:
+------------------------------+-------------------------------+-------+ | edition | expire_date | size | +------------------------------+-------------------------------+-------+ | HIGH_PERFORM_REALTIME_DW_DM | Thu Jul 20 00:00:00 CST 2023 | 50 | +------------------------------+-------------------------------+-------+
复制
parse_url_tuple
函数名 | 返回类型 | 描述 |
---|---|---|
parse_url_tuple(expr, partToExtract1 [, partToExtract2] [, …]) |
多行数据 |
以表格形式,返回 URL 的解析提取结果。 |
参数说明:
-
expr:指定用于解析的 URL 表达式。
-
partToExtract1, partToExtract2, …:依次指定要解析并提取的部分,取值:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE、USERINFO、QUERY:<KEY_NAME>。
使用示例:
由于向该函数传递的字符串要求必须是 STRING,为防止系统将传递的字符串参数识别为 CHAR,我们首先设置 character.literal.as.string
的值为 true
,即强制将字符串识别为 STRING。
SET character.literal.as.string=true; SELECT parse_url_tuple('https://www.transwarp.cn/product/argodb', 'HOST', 'PATH', 'PROTOCOL', 'FILE') AS (host, path, protocol, file);
复制
返回示例:
+-------------------+------------------+-----------+------------------+ | host | path | protocol | file | +-------------------+------------------+-----------+------------------+ | www.transwarp.cn | /product/argodb | https | /product/argodb | +-------------------+------------------+-----------+------------------+
复制
plan_cache
函数语法 | 返回类型 | 描述 |
---|---|---|
plan_cache() |
多行数据 |
以表格的形式返回执行计划的缓存。 |
使用示例:
SELECT plan_cache();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
id 0 database demodata sql SELECT * FROM user_info WHERE acc_num =0700735 variable __var_int0 schema name,acc_num,password,citizen_id,bank_acc,reg_date,acc_level
复制
posexplode
函数语法 | 返回类型 | 描述 |
---|---|---|
posexplode(expr) |
多行数据 |
将指定的数组展开,每个值为一行,每行具有两列,分别对应数组从 0 开始的下标和数组元素。 |
参数说明:
-
expr:要拆分的数组,可以是列或表达式。
使用示例:
SELECT posexplode(array('a','c','f','b'));
复制
返回示例:
+------+------+ | pos | val | +------+------+ | 0 | a | | 1 | c | | 2 | f | | 3 | b | +------+------+
复制
running_sql
函数语法 | 返回类型 | 描述 |
---|---|---|
running_sql() |
多行数据 |
以表格的形式,返回当前正在运行的 SQL 语句,包含 Session ID、持续时间、状态、客户端 IP 地址、用户名等信息。 |
使用示例:
SELECT running_sql();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
operation_id 76f664a5-fd6b-48de-b2b3-92a7f2066fe8 session_id aa25671d-de4f-4240-84af-b5892eacf36a statement SELECT running_sql() last_access_time 2023-04-27 14:43:53 duration 31 operation_status RUNNING operation_type EXECUTE_STATEMENT session_ip 172.18.20.1 user_name admin
复制
stack
函数名 | 返回类型 | 描述 |
---|---|---|
stack(int, expr1 [,expr2] [, …]) |
多行数据 |
将各个表达式分隔为指定的行数,以表格返回结果。 |
-
int:指定要生成的行数,大于 0 的整数。
-
expr1、expr2 …:指定表达式,多个表达式的数据类型需相同,例如类型均为 ARRAY。
举例
由于向该函数传递的字符串要求必须是 STRING,为防止系统将传递的字符串参数识别为 CHAR,我们首先设置 character.literal.as.string
的值为 true
,即强制将字符串识别为 STRING。
使用示例:
SELECT stack(2, array('name',1), array('age',2)) FROM system.dual;
复制
返回示例:
+---------------+ | col0 | +---------------+ | ["name","1"] | | ["age","2"] | +---------------+
复制
tables_v
函数语法 | 返回类型 | 描述 |
---|---|---|
tables_v() |
多行数据 |
以表格的形式返回所有非临时表的信息。 |
使用示例:
SELECT tables_v();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
table_id 146 table_name transactions database_name demodata create_time 2023-04-27 16:49:10.0 table_type MANAGED_TABLE owner_name hive commentstring transactional true last_load_time input_format io.transwarp.inceptor.memstore2.MemoryTableInputFormat table_format memory table_location hdfs://nameservice1/quark1/user/hive/warehouse/demodata.db/hive/demodata.transactions@holodesk.stargate row_permission column_permission hbase_name field_delim line_delim collection_delim ... ...
复制
temporary_columns
函数语法 | 返回类型 | 描述 |
---|---|---|
temporary_columns() |
多行数据 |
以表格的形式,返回临时表中所有列的信息。 |
使用示例:
SELECT temporary_columns();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
column_name trans_id column_type int table_name t2_tmp database_name default commentstring default_value table_permission column_name acc_num column_type int table_name t2_tmp database_name default commentstring default_value table_permission
复制
temporary_tables
函数语法 | 返回类型 | 描述 |
---|---|---|
temporary_tables() |
多行数据 |
以表格的形式返回所有临时表的信息 |
使用示例:
SELECT temporary_tables();
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
table_name t2_tmp database_name default create_time 2023-04-27 14:28:03 table_type MANAGED_TABLE owner_name hive table_format text table_location hdfs://nameservice1/quark1/tmp/hive/admin/aa25671d-de4f-4240-84af-b5892eacf36a/_tmp_space.db/1fa3ab4d-afb9-4556-a299-aa855da3a32f row_permission column_permission field_delim line_delim collection_delim
复制
udfs
函数语法 | 返回类型 | 描述 |
---|---|---|
udfs() |
多行数据 |
以表格的形式返回所有用户定义函数(UDF),包含本地/临时/永久 UDF。 |
使用示例:
SELECT udfs() FROM system.dual LIMIT 1;
复制
返回示例:
+-----------+---------------------------------------------------------+-----------+------------+ | udf_name | udf_class | udf_type | is_native | +-----------+---------------------------------------------------------+-----------+------------+ | concat | org.apache.hadoop.hive.ql.udf.generic.GenericUDFConcat | udf | true | +-----------+---------------------------------------------------------+-----------+------------+
复制
views_v
函数语法 | 返回类型 | 描述 |
---|---|---|
views_v() |
多行数据 |
以表格的形式返回所有视图信息。 |
使用示例:
SELECT views_v() FROM system.dual LIMIT 1;
复制
返回示例:
为便于信息阅读和展示,下述信息的展示方式为垂直显示,即通过 Beeline 连接数据库时,添加了参数 --outputformat=vertical
。
view_id 2 view_name buckets_v database_name system create_time 2023-04-20 11:47:52.0 origin_text select * from buckets_v@system_dblink expanded_text select `buckets_v`.`bucket_column`, `buckets_v`.`bucket_number`, `buckets_v`.`table_name`, `buckets_v`.`database_name`, `buckets_v`.`table_type` from `buckets_v`@`system_dblink` owner_name root
复制