联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.8.4.14 表生成函数
更新时间:10/24/2023, 7:20:26 AM

表生成函数(User-Defined Table-Generating Functions),简称 UDTF,是用于解决将一行输出为多行需求的一类函数。

analyze_file
函数语法 返回类型 描述

analyze_file(file_path)

多行数据

分析指定文件中的 SQL 语句,并以表格的形式返回表之间的关联关系和过滤等逻辑,可帮助您快速了解 SQL 语句的全貌。

参数说明:

  • file_path:包含 SQL 语句的文件的绝对路径,该文件需提前存放至 Quark Server 的 Pod 中。

您可以在集群所属的设备上执行 kubectl get po -owide |grep quark-server 命令查看 Pod 名称,然后执行 kubectl cp 命令将包含 SQL 语句的文件上传至该 Pod。

使用示例:

SELECT analyze_file("/root/demosql");
复制

返回示例:

+------------------------------+----------------------+--------------+------+--------+
|        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 类型。

  • p1p2 …​:分别指定要提取元组信息的位置,指定多个时采用英文逗号(,)分隔。

使用示例

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 的整数。

  • expr1expr2 …​:指定表达式,多个表达式的数据类型需相同,例如类型均为 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
复制