【问题标题】:Hive conditionally select column nameHive 有条件地选择列名
【发布时间】:2020-12-02 01:54:17
【问题描述】:

除了一列可以有不同的名称外,我有多个具有非常相似架构的表。 我想使用 Hive 进行一些复杂的计算,并希望为所有可能参数化的表提供一个代码。由于某些原因,我无法使用 Python、Scala 等语言对查询进行参数化,因此决定使用纯 Hive SQL。

我想有条件地选择适当的列,但似乎 Hive 会评估条件表达式/语句的所有部分,而不管条件如何。 我做错了什么?

DROP TABLE IF EXISTS `so_sample`;
CREATE TABLE `so_sample` (
  `app_version` string
);
SELECT
  if (true, app_version, software_version) AS firmware
FROM so_sample
;

输出:

错误:编译语句时出错:FAILED:SemanticException [错误 10004]:第 2:25 行无效的表别名或列引用“software_version”:(可能的列名称为:app_version)(状态=42000,代码=10004)

问候 帕维尔

【问题讨论】:

    标签: hive


    【解决方案1】:

    尝试使用正则表达式选择不同名称的列,更多信息请参见manual,不要忘记

    set hive.support.quoted.identifiers=none;
    

    【讨论】:

    • 如果我使用正则表达式,最终会得到原始列名,这不是我想要的。抱歉,描述不清楚 - 刚刚编辑了我的示例以涵盖这一点。
    猜你喜欢
    • 2012-10-24
    • 2019-04-20
    • 2017-07-25
    • 2023-03-10
    • 2016-08-08
    • 2017-05-16
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多