如何在配置单元中选择count和literal值

jv2fixgn  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(435)

为什么此查询返回错误。我尝试将表的代码作为常量字符串加载,数据的标志再次作为常量字符串加载,插入时间和表的计数。我想,让我试着在写插入之前运行secelct。但由于某些原因,它无法列出我试图从中获取计数的表中的列名。我只需要两个常量,一个日期和一个计数。尝试删除groupby也会引发另一个错误。
hive-e“选择“web”作为src\u cd,“1hr”作为load\u标志,从\u unixtime((unix\u timestamp(substr(sysdate,0,11),'dd/mmm/yyyy'),'mm/dd/yyyy')作为时间,从weblog中计数(*),其中year=2015,month=04,day=17按src\u cd分组,load\u标志,时间
确定所用时间:1.446秒失败:semanticexception[error 10004]:行4:9无效的表别名或列引用'src\u cd':(可能的列名有:clientip、authuser、sysdate、clfrequeest………(依此类推)year、month、day)

plicqrtu

plicqrtu1#

有两件事。1hive不会以这种方式解析双引号或单引号。所以用反引号(`)。2在GROUPBY子句中,可以使用列式位置说明符,也可以使用直接函数翻译。

ddhy6vgd

ddhy6vgd2#

只需在 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。

zvms9eto

zvms9eto3#

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

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') ; "

相关问题