我的Hive代码有15个复杂的LATER视图的重复模式。
为了简洁起见,下面我简化了爆炸代码:
SELECT a,b,c,d FROM t
LATERAL VIEW explode(split(regexp(s,'A',''),',')) a as a
LATERAL VIEW explode(split(regexp(s,'B',''),',')) b as b
LATERAL VIEW explode(split(regexp(s,'C',''),',')) c as c
LATERAL VIEW explode(split(regexp(s,'D',''),',')) d as d
...
我尝试使用MACRO来消除键入15次复杂的爆炸表达式,这些表达式非常相似(仅相差1个参数)。
我创建了以下宏:
CREATE TEMPORARY MACRO explode_me(s string, p string)
explode(split(regexp(s,p,''),','))
;
SELECT a FROM t
LATERAL VIEW explode_me(s,'A') a as a
我得到了错误:
SemanticException [Error 10081]:在SELECT子句之外不支持UDTF,也不支持嵌套在表达式
我理解这个错误。我不知道如何使我的代码更紧凑。
我可以通过从宏体中删除explosion()并在宏中只保留split()来解决这个问题。