如何使用 Hive MACRO 减少样板文件

Posted

技术标签:

【中文标题】如何使用 Hive MACRO 减少样板文件【英文标题】:How to use Hive MACRO to reduce boilerplate 【发布时间】:2021-10-14 20:11:57 【问题描述】:

我的 Hive 代码具有包含 15 个复杂 LATER VIEW 的重复模式。

为了简洁起见,下面我简化了分解代码:

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 [错误 10081]:在 SELECT 子句之外不支持 UDTF,也不支持嵌套在表达式中

我理解错误。 我不明白如何让我的代码更紧凑。

【问题讨论】:

我能够通过从宏体中删除explode()并在宏中只保留split()来解决它。 【参考方案1】:

我能够通过从宏主体中删除explode()并在宏中只保留split()来解决它。

【讨论】:

以上是关于如何使用 Hive MACRO 减少样板文件的主要内容,如果未能解决你的问题,请参考以下文章

如何减少 responseJSON 中的样板,就像我使用 URLRequestConvertible 对相关的 Web 调用进行分组一样

创建 Oracle 函数 - 如何减少样板代码

如何减少 Hive 中 SQL“Alter Table/Partition Concatenate”的生成文件?

如何配置hive,使hive能使用spark引擎

Hive之MACRO(宏)的使用

如何在宏中获取Scala-macro-annotated类或对象的扩展类路径?