如何使用Hive MACRO减少样板



我的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()来解决这个问题。

最新更新