标签: hiveql

hive表达式不在按键分组中

我在HIVE中创建了一个表格.它包含以下列:

id bigint, rank bigint, date string
Run Code Online (Sandbox Code Playgroud)

我想每个月获得平均(排名).我可以使用这个命令.有用.

select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved); 
Run Code Online (Sandbox Code Playgroud)

但是,我也想获得日期信息.我用这个命令:

select a.lens_id, avg(a.rank), a.date_saved
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);
Run Code Online (Sandbox Code Playgroud)

它抱怨说: Expression Not In Group By Key

hive group-by hiveql

13
推荐指数
2
解决办法
6万
查看次数

在Hive中删除具有相同前缀的多个表

我在hive中有几个表具有相同的前缀,如下所示.

temp_table_name
temp_table_add
temp_table_area
Run Code Online (Sandbox Code Playgroud)

在我的数据库中有几百个像这样的表以及许多其他表.我想删除以"temp_table"开头的表.你们中的任何人都知道任何可以在Hive中执行此操作的查询吗?

hadoop hive hiveql

13
推荐指数
3
解决办法
2万
查看次数

HiveQL UNION ALL

我有table_A:

id var1 var2
1   a    b
2   c    d
Run Code Online (Sandbox Code Playgroud)

表-B:

id var1 var2  
3   e    f
4   g    h
Run Code Online (Sandbox Code Playgroud)

我想要的只是桌子,合并:

id var1 var2
1   a    b
2   c    d
3   e    f
4   g    h 
Run Code Online (Sandbox Code Playgroud)

这是我的.hql:

CREATE TABLE combined AS
SELECT all.id, all.var1, all.var2
FROM (
  SELECT a.id, a.var1, a.var2  
  FROM table_A a  
  UNION ALL  
  SELECT b.id, b.var1, b.var2  
  FROM table_B b
) all;
Run Code Online (Sandbox Code Playgroud)

我是直接从Edward Capriolo等人的Programming Hive第112页编写的.

我得到的错误,无论我尝试的上述表面上合理的变化,都是" cannot recognize input near '.' 'id' ',' in select expression." …

union hadoop hive hiveql

12
推荐指数
1
解决办法
4万
查看次数

使用Hive查找组中的第一行

对于以下格式的学生数据库

Roll Number | School Name | Name | Age | Gender | Class | Subject | Marks
Run Code Online (Sandbox Code Playgroud)

如何找出每个班级最高的人?以下查询返回整个组,但我有兴趣找到组中的第一行.

select school,class,roll,sum(marks) as total from students group by school,class,roll order by school, class, total desc;
Run Code Online (Sandbox Code Playgroud)

hive group-by hiveql

12
推荐指数
2
解决办法
2万
查看次数

Concat在hive中有多个分隔符的多行

我需要将'〜'作为分隔符以行'方式连接字符串值.我有以下数据:

在此输入图像描述

我需要以"row_id"的升序顺序为每个"id"连接"Comment"列,并以"〜"作为分隔符.

预期产量如下:

在此输入图像描述

GROUP_CONCAT不是一个选项,因为它在我的Hive版本中无法识别.我可以使用collect_set或collect_list,但我不能在它们之间插入分隔符.

有什么工作吗?

sql hadoop hive hdfs hiveql

12
推荐指数
1
解决办法
2万
查看次数

Hive动态分区

我正在尝试使用动态分区创建分区表,但我遇到了一个问题.我在Hortonworks Sandbox 2.0上运行Hive 0.12.

set hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
Run Code Online (Sandbox Code Playgroud)

但它不起作用..我得到一个错误.

这是创建表demo_stg的Query :

create table demo_stg
(
    country STRING,
    stadt STRING,
    geograph_breite FLOAT,
    id INT
    )
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
Run Code Online (Sandbox Code Playgroud)

demo_tab:

CREATE TABLE demo_tab 
(
    stadt STRING,
    geograph_breite FLOAT,
    id INT
)
PARTITIONED BY (land STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
Run Code Online (Sandbox Code Playgroud)
  • demo_stg也填充了数据,所以它不是空的.

感谢帮助 :)

hadoop hive hiveql

11
推荐指数
2
解决办法
5万
查看次数

连接表时Hive查询出错

我无法使用下面的HIVE查询传递相等性检查.

我有3个表,我想加入这些表.我尝试如下,但得到错误:

FAILED:语义分析出错:第3:40行在JOIN'visit_date'中遇到左右别名

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 ON
    ( v3.AS_upc= t3.upc_no AND v3.start_dt <= t3.visit_date  AND v3.end_dt >= t3.visit_date AND v3.adv_price <= t3.comp_price ) ) t99 ON
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no);
Run Code Online (Sandbox Code Playgroud)

基于FuzzyTree的帮助编辑:

第一名:

我们尝试使用between和where子句编辑上面的查询,但是没有从查询中获取任何输出.

但是如果我们通过删除带有date的between子句来改变上面的查询,那么我得到了一些基于"v3.adv_price <= t3.comp_price"的输出,但没有使用"date filter".

select t1.*, t99.* from table1 t1 JOIN
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
        where v3.adv_price <= t3.comp_price
    ) t99 ON
    (t1.comp_store_id …
Run Code Online (Sandbox Code Playgroud)

hadoop hive join hiveql cloudera-cdh

11
推荐指数
1
解决办法
2万
查看次数

在Hive JOIN中遇到左右别名; 没有任何不平等条款

我正在使用以下查询:

Select
   S.MDSE_ITEM_I,
   S.CO_LOC_I,
   MAX(S.SLS_D) as MAX_SLS_D,
   MIN(S.SLS_D) as MIN_SLS_D,
   sum(S.SLS_UNIT_Q) as SLS_UNIT_Q,
   MIN(PRSMN_VAL_STRT_D) as PRSMN_VAL_STRT_D,
   MIN(PRSMN_VAL_END_D) as PRSMN_VAL_END_D,
   MIN(RC.FRST_RCPT_D) as FRST_RCPT_D,
   MIN(RC.CURR_ACTV_FRST_OH_D) as CURR_ACTV_FRST_OH_D,
   MIN(H.GREG_D) as  OH_GREG_D  
from
   eefe_lstr4.SLS_TBL as S  
left outer join
   eefe_lstr4.PRS_TBL P 
      on S.MDSE_ITEM_I = P.MDSE_ITEM_I 
      and S.CO_LOC_I = P.CO_LOC_I 
      and S.SLS_D between PRSMN_VAL_STRT_D and PRSMN_VAL_END_D  
left outer join
   eefe_lstr4.OROW_RCPT RC 
      on RC.MDSE_ITEM_I =S.MDSE_ITEM_I 
      and RC.CO_LOC_I =  S.CO_LOC_I  
left outer join
   eefe_lstr4.OH H 
      on H.MDSE_ITEM_I =S.MDSE_ITEM_I 
      and H.CO_LOC_I = S.CO_LOC_I  
group by
   S.MDSE_ITEM_I,
   S.CO_LOC_I;
Run Code Online (Sandbox Code Playgroud)

我收到错误说: …

sql hive hiveql

11
推荐指数
3
解决办法
3万
查看次数

如何在 hive 中创建一个空的结构数组?

我有一个视图Hive 1.1.0,基于条件,它应该返回一个空数组或一个数组struct<name: string, jobslots: int>

这是我的代码:

select
      case when <condition> 
             then array()
           else array(struct(t1.name, t1.jobslots))
       end
from table t1;
Run Code Online (Sandbox Code Playgroud)

这里的问题是,空数组array()的类型是array<string>。因此,当我尝试将其插入表中时,它会引发错误。

如何更改它以返回类型为空的数组,array<struct<name: string, jobslots:int>>以便Hive's size()函数在该数组上返回 0?

sql arrays struct hive hiveql

11
推荐指数
1
解决办法
3545
查看次数

何时选择rank()而不是dense_rank()或row_number()

由于我们可以使用 获取分配的行号,row_number()并且如果我们想使用 查找每行的排名而不跳过分区内的任何数字dense_rank(),为什么我们需要rank()函数,我想不出该rank()函数提供的任何用例要么不能实现这一点dense_rank()row_number()

有没有rank()最适合的用例?

sql sql-server hive hiveql

11
推荐指数
2
解决办法
2万
查看次数

标签 统计

hive ×10

hiveql ×10

hadoop ×5

sql ×4

group-by ×2

arrays ×1

cloudera-cdh ×1

hdfs ×1

join ×1

sql-server ×1

struct ×1

union ×1