【问题标题】:Issues in Ordering up table values in hive在 hive 中排序表值的问题
【发布时间】:2019-04-27 06:37:03
【问题描述】:

我想以特定方式对表中的值进行排序。

我有一个包含以下数据的源表(TestTable)

groupId,Name,subjectCode,PA
1,LEADER,T,67
1,Prem,P,67
1,Prem,T,89
1,Anjali,T,124
1,LEADER,P,234
1,Anjali,P,234
1,Anjali,NP,45
1,Prem,NP,23
1,LEADER,NP,123

我对新表 TestSort 的预期结果是

1,LEADER,NP,123
1,LEADER,P,234
1,LEADER,T,67
1,Anjali,NP,45
1,Anjali,P,234
1,Anjali,T,124
1,Prem,NP,23
1,Prem,P,67
1,Prem,T,89

我需要在 asc 中订购第一三列,并且我必须将领导者记录放在它自己的顶部。

我尝试做同样的事情,但我没有得到预期的结果

插入覆盖表TestSort select * from TestTable order by groupId asc,Name asc,subjectCode asc;

我得到的结果是

groupId,Name,subjectCode,PA
1,LEADER,T,67
1,LEADER,NP,123
1,Anjali,NP,45
1,Anjali,P,234
1,LEADER,P,234
1,Anjali,T,124
1,Prem,T,89
1,Prem,NP,23
1,Prem,P,67

我是不是在某处做错了什么。

轨迹 1

  insert overwrite table TestSort select * from TestTable 
order by 
  case when name = 'LEADER' then '0' else '1' end, 
  groupid, 
  name,
  subjectcode;;
    select * from TestSort;

上述查询的结果是

    groupId,Name,subjectCode,PA
1,Anjali,NP,45
1,LEADER,T,67
1,Prem,T,89
1,Prem,P,67
1,LEADER,NP,123
1,Prem,NP,23
1,Anjali,T,124
1,Anjali,P,234
1,LEADER,P,234

我的期望是将值插入新表 TestSort。选择查询给了我预期的结果,但是一旦我将值插入到 TestSort 中,顺序就会改变。

【问题讨论】:

标签: sql hive sql-order-by


【解决方案1】:

我认为这个查询会起作用

select *, case when Name = 'LEADER' then '1' else '0' end as rank from Test order by rank desc, groupId, Name ,subjectCode asc;

【讨论】:

  • 通过上面的等式,我可以得到结果。但是,一旦我将它插入到没有排名的目标表中......再次对记录进行重新排序。我正在用你的答案的案例更新问题。
【解决方案2】:

您可以将条件直接放在 ORDER BY 子句中:

select * from test 
order by 
  case when name = 'LEADER' then '0' else '1' end, 
  groupid, 
  name,
  subjectcode;

【讨论】:

  • 是的,它在选择期间工作,但一旦我将它插入到我的目标表中......订单就可以了。 insert overwrite table TestSort select * from test order by case when name = 'LEADER' then '0' else '1' end, groupid, name, subjectcode;
  • 表中没有顺序。您必须使用 ORDER BY 再次获取表的行。
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 2021-01-22
  • 2019-08-10
  • 2014-04-11
  • 2019-08-20
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多