我在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中有几个表具有相同的前缀,如下所示.
temp_table_name
temp_table_add
temp_table_area
Run Code Online (Sandbox Code Playgroud)
在我的数据库中有几百个像这样的表以及许多其他表.我想删除以"temp_table"开头的表.你们中的任何人都知道任何可以在Hive中执行此操作的查询吗?
我有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." …
对于以下格式的学生数据库
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) 我需要将'〜'作为分隔符以行'方式连接字符串值.我有以下数据:
我需要以"row_id"的升序顺序为每个"id"连接"Comment"列,并以"〜"作为分隔符.
预期产量如下:
GROUP_CONCAT不是一个选项,因为它在我的Hive版本中无法识别.我可以使用collect_set或collect_list,但我不能在它们之间插入分隔符.
有什么工作吗?
我正在尝试使用动态分区创建分区表,但我遇到了一个问题.我在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)
感谢帮助 :)
我无法使用下面的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) 我正在使用以下查询:
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)
我收到错误说: …
我有一个视图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?
由于我们可以使用 获取分配的行号,row_number()并且如果我们想使用 查找每行的排名而不跳过分区内的任何数字dense_rank(),为什么我们需要rank()函数,我想不出该rank()函数提供的任何用例要么不能实现这一点dense_rank()。row_number()
有没有rank()最适合的用例?