什么是表函数?
表函数(Table Function)针对每个输入行返回一个数据行的集合,即一个二维表。
返回的数据集合可能为空,可能包含一行或者多行数据,每行数据包含一个或者多个列。普通的标量函数的返回值是一个标量值(Scalar Value)。
为什么需要表函数
表函数在如下两个方面有着重要的作用:
数据的解析
数据的获取
除了内置的表函数之外,用户可以根据需求自定义表函数,提高数据分析效率。
在鸿鹄中如何使用表函数
在鸿鹄中,可以在任何需要二维表结构的地方使用表函数。表函数分为SQL表函数和非SQL表函数:
SQL表函数
SQL表函数可以看成是一个带参数的视图(Parameterized View),支持用户自定义函数(User Defined Table Function, UDTF)。
创建SQL表函数:
-
get_events_from_dataset即创建的SQL表函数名称。
-
@data_set table, @key string对应语法中的named_parameter,表明这个表函数有两个参数,参数data_set的类型为table,参数key的类型为string。
-
SELECT * FROM @data_set WHERE
CONTAINS(@key)是SQL表函数对应的查询表达式。
查看SQL表函数
使用SQL表函数
定义了上述名称为get_events_from_dataset的SQL表函数后我们可以这样使用它:
这个查询等价于查询:
删除SQL表函数
删除表函数定义时,需要指定函数签名(signature),即参数类型必须和定义的参数类型完全匹配。
非SQL表函数
内置非SQL表函数
鸿鹄提供了一系列内置非SQL表函数,用于丰富查询的内容。内置非SQL表函数主要使用C++和Python来实现。
场景:生成从1到5的5个整数,每行一个整数。
场景:解析类型为json的字段
更多关于内置非SQL表函数的用法说明请参考使用手册。
自定义非SQL表函数
当前鸿鹄仅支持用户自定义Python函数(Python User Defined Table Function, Python UDTF)。自定义Python表函数,参见 Python UDTF开发。
表函数的最佳实践
在鸿鹄中,表函数的使用需要结合实际的数据分析需求来使用。通常我们在遇到一些无法通过通用的SQL查询来满足的需求时,可以按照如下步骤考虑需求是否能通过表函数功能来实现:
-
是否可以通过自定义SQL表函数来实现
-
是否有内置的表函数可以直接使用
-
是否可以自己通过鸿鹄提供的SDK来实现自己独特需求的表函数