在HiveQL(和SQL一般)中,常见的查询构建模式是选择所有列(
有各种机制可以排除一些列,如此SO问题所述,但没有一个自然适用于HiveQL。(例如,使用
忽略关于是否选择所有但某些列是个好主意的思想讨论,这个问题是关于扩展Hive以具备这种功能的可能方法。
在Hive 0.13.0之前,SELECT可以采用基于正则表达式的列,例如,在反引号引用的字符串内部使用
一个通用的表生成UDF(UDTF)肯定可以做到这一点,因为它可以操纵模式。既然我们不会产生新的行,那么有没有一种方式可以使用简单的基于行的UDF来解决这个问题?
这似乎是一个常见的问题,许多网络帖子显示如何解决各种数据库的问题,但我还没有找到Hive的解决方案。是否有某个地方有可用的代码?
SELECT *
)或一个明确指定的列集合SELECT A, B, C
)。 SQL没有内置机制来选择除了指定的列集之外的所有列。有各种机制可以排除一些列,如此SO问题所述,但没有一个自然适用于HiveQL。(例如,使用
SELECT *
然后 ALTER TABLE DROP
其中的一些列创建临时表,在大数据环境中会造成混乱)忽略关于是否选择所有但某些列是个好主意的思想讨论,这个问题是关于扩展Hive以具备这种功能的可能方法。
在Hive 0.13.0之前,SELECT可以采用基于正则表达式的列,例如,在反引号引用的字符串内部使用
property_.*
。@invoketheshell的下面的答案提到了这种能力,但代价是,当这种能力开启时,Hive无法接受其中包含非标准字符的列名,例如,$foo
或x/y
。这就是为什么Hive开发人员在0.13.0中默认关闭了此行为。我正在寻找一种适用于任何列名的通用解决方案。一个通用的表生成UDF(UDTF)肯定可以做到这一点,因为它可以操纵模式。既然我们不会产生新的行,那么有没有一种方式可以使用简单的基于行的UDF来解决这个问题?
这似乎是一个常见的问题,许多网络帖子显示如何解决各种数据库的问题,但我还没有找到Hive的解决方案。是否有某个地方有可用的代码?