我的Hive代码有一个重复模式,后面有15个复杂的视图。
下面,为了简洁起见,我简化了爆炸代码:
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
...我试着使用宏来消除输入15倍的复杂爆炸表达式,这是非常相似的(只有一个参数不同)。
我创建了以下宏:
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错误10081:在SELECT子句之外不支持UDTF,表达式中也不支持UDTF
我明白这个错误。我不知道如何使我的代码更紧凑。
发布于 2021-10-19 17:13:36
我能够解决这个问题,方法是从宏体中移除body (),并且只在宏中保留split()。
https://stackoverflow.com/questions/69576832
复制相似问题