请解释 Hive 中的 UDTF(User-Defined Table-Generating Functions)的概念,并说明实现一个 UDTF 的具体步骤和方法。
考察说明
考查对 Hive 自定义函数体系中 UDTF 概念的理解和实现能力。
回答思路
- 【回答框架 1】UDTF 是 Hive 中用户自定义表生成函数,输入一行数据,输出多行或多列,常用于行转列场景,如 explode 函数。继承 GenericUDTF 类实现。
- 【回答框架 2】实现 UDTF 需继承 GenericUDTF,重写 initialize 方法定义输出列名和类型,process 方法处理输入并 forward 输出,close 方法做清理。
- 【回答框架 3】使用 @UDTFTypeAnnotation 注解指定输入输出类型,或通过 StructObjectInspector 定义。
- 【回答框架 4】实现后打包为 jar,在 Hive 中通过 ADD JAR 和 CREATE TEMPORARY FUNCTION 注册,即可在 SQL 中使用。
- 【关键点 1】UDTF 输入一行输出多行,用于行转列。
- 【关键点 2】继承 GenericUDTF,实现 initialize、process、close。
- 【关键点 3】通过别名指定输出列名,如 AS (col1, col2)。
- 【易错点 1】UDTF 不能在 select 子句中与其他字段同时使用,除非使用 lateral view。
- 【易错点 2】输出列类型需与 ObjectInspector 定义一致,否则报错。