Hivesql中select语句中的用户定义列名

问题描述

我需要在 Hivesql 中创建用户定义的列名,如下面的 Postgresql 查询。你能帮我解决这个问题吗。

SELECT
    COUNT(user_id) as "Total Customers"
FROM 
    customer_profiles
WHERE
    profiled_date BETWEEN '2020-01-01' AND '2020-12-31'

解决方法

使用反引号:

SELECT
    COUNT(user_id) as `Total Customers`
FROM 
 ...

但由于 Hive 限制,无法保留大小写。结果列名将是小写:

total customers

看到这个答案:https://stackoverflow.com/a/57183048/2700344

,

首先,不要在标识符中放置空格。改用下划线:

SELECT COUNT(user_id) as Total_Customers
FROM customer_profiles
WHERE profiled_date BETWEEN '2020-01-01' AND '2020-12-31'

这适用于所有数据库,您无需摆弄转义字符。

其次,对于日期/时间比较,我强烈建议您避免使用 BETWEEN。相反:

WHERE profiled_date >= '2020-01-01' AND
      profiled_date < '2021-01-01'

这适用于日期和日期/时间。您的版本将过滤掉 12 月 31 日的记录,如果它们具有除午夜以外的时间组件。是的,我知道在此查询中您知道没有时间组件。但总有一天,会有一个,你会使用 BETWEEN 并得到错误的结果。