【问题标题】:Max function on Hive BucketHive Bucket 上的最大功能
【发布时间】:2018-08-25 15:47:01
【问题描述】:

我在 HIVE 中有一个表结构如下 -

create table if not exists cdp_compl_status
(
EmpNo INT,
RoleCapability STRING,
EmpPUCode STRING,
SBUCode STRING,
CertificationCode STRING,
CertificationTitle STRING,
Competency STRING,
Certification_Type STRING,
Certification_Group STRING,
Contact_Based_Program_Y_N STRING,
ExamDate DATE,
Onsite_Offshore STRING,
AttendedStatus STRING,
Marks INT,
Result STRING,
Status STRING,
txtPlanCategory STRING,
SkillID1 INT,
Complexity STRING
)
CLUSTERED BY (Marks) INTO 5 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
TBLPROPERTIES('created on' = '12 Aug');

现在,我想从表中的每个存储桶中查询 MAX(MARKS)。如果我这样做 -

SELECT MAX(MARKS) from cdp_compl_status;  

它显示整个表格的最大分数。有什么办法,我可以从每个bucket中找出MAX(MARKS)吗?

【问题讨论】:

  • 我不认为你可以通过存储桶获得max
  • 找出每个桶的最大值没有任何意义。你不知道桶里有什么marks

标签: hive hiveql


【解决方案1】:

当您将表分成 5 个桶时... 数据根据 % 函数分成桶,例如: marks%5==0 进入第一个桶 marks%5==1 进入第二个桶 marks%5==2 进入第三个桶 marks%5==3 进入第四桶 marks%5==4 进入第五桶

所以你需要编写 5 个这样的查询: Select max(marks) from cdp_compl_status where marks%5=0; -- 第一个桶中的最大值

我想应该这样做。

【讨论】:

    【解决方案2】:

    使用表格样本:

    select max(marks),min(marks),avg(marks) from cert_comp_status_buck
    tablesample(bucket 1 out of 5 on marks);
    
    select max(marks),min(marks),avg(marks) from cert_comp_status_buck
    tablesample(bucket 2 out of 5 on marks);
    
    select max(marks),min(marks),avg(marks) from cert_comp_status_buck
    tablesample(bucket 3 out of 5 on marks);
    
    select max(marks),min(marks),avg(marks) from cert_comp_status_buck
    tablesample(bucket 4 out of 5 on marks);
    
    select max(marks),min(marks),avg(marks) from cert_comp_status_buck
    tablesample(bucket 5 out of 5 on marks);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2016-10-14
      相关资源
      最近更新 更多