为什么此查询返回错误。我试图将表的代码加载为常量字符串,数据的标志再次加载为常量串,插入时间和表的计数。我想,在写插入之前,让我试着运行secelct。但由于某些原因,它无法列出我试图从中获取计数的表中的列名。我只需要两个常数值,一个日期和一个计数。尝试删除groupby,引发另一个错误。
hive-e"选择"WEB"作为src_cd,"1Hr"作为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秒失败:SemanticException[错误10004]:行4:9无效的表别名或列引用"src_cd":(可能的列名为:clientip、authuser、sysdate、clfrequest…………(依此类推)年、月、日)
文字上的双引号是个问题。以下是我成功测试的一个更简单的版本:
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') ; "
只需省略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
中使用列别名,所以您需要放入整个表达式或使用子查询/CTE。
有两件事。1.Hive不会以这种方式解析双引号或单引号。因此,请使用后引号(`)。2.在group-by子句中,可以使用柱状位置说明符,也可以使用直接的功能翻译。