如何 Select 在配置单元中计数和字面值

How to Select count and literal value in hive

为什么此查询返回错误。我正在尝试将 table 的代码加载为常量字符串,数据标志再次为常量字符串,插入时间和 table 的计数。我想,让我在编写插入内容之前尝试 运行 secelct。 但出于某种原因,它无法列出我试图获取计数的 tables 中的列名。我只需要两个常量值,一个日期和一个计数。也尝试删除 groupby,引发另一个错误。

hive -e "select "WEB" as src_cd, "1Hr" as Load_Flag, from_unixtime((unix_timestamp( substr(sysDate, 0, 11), 'dd/MMM/yyyy')), 'MM/dd/yyyy') 作为时间,count(*) 来自博客 其中年=2015 月=04 日=17 按 src_cd、load_flag、时间分组 ;

好的 耗时:1.446 秒 FAILED: SemanticException [Error 10004]: Line 4:9 Invalid table alias or column reference 'src_cd': (可能的列名是:clientip, authuser, sysdate, clfrequest ...... ..(依此类推)年月日)

只需省略 group by 中的常量即可。它没有做任何事情:

select "WEB" as src_cd, "1Hr" as Load_Flag,   
       from_unixtime((unix_timestamp(substr(sysDate, 0, 11), 'dd/MMM/yyyy')), 'MM/dd/yyyy') as time, count(*)
from weblog
where year = 2015 and month = 04 and day = 17
group by from_unixtime((unix_timestamp(substr(sysDate, 0, 11), 'dd/MMM/yyyy')), 'MM/dd/yyyy') 

我认为 Hive 不允许在 group by 中使用列别名,因此您需要输入整个表达式或使用 subquery/CTE.

文字上的双引号是个问题。这是我测试成功的更简单的版本:

hive -e "select 'WEB' , '1Hr' , from_unixtime((unix_timestamp(substr(sysDate, 0, 11), 'dd/MMM/yyyy')), 'MM/dd/yyyy') as time, count(*) from weblog where year=2015 and month=04 and day=17 group by 1,2 , from_unixtime((unix_timestamp(substr(sysDate, 0, 11), 'dd/MMM/yyyy')), 'MM/dd/yyyy') ; "

有两件事。 1. Hive 不会以这种方式解析双引号或单引号。因此,请改用反引号 (`)。 2. 在group by子句中要么使用columnar position specifier要么直接函数式翻译。