我有一张表,上面有如下数据,
id code data1 data2 country
1 1 A NULL IND
1 1 B B NZ
1 1 CA
1 1 C Z WI
1 1 D S UK
2 2 NULL NULL IND
2 2 S NULL NZ
2 2 NULL K CA
2 2 T T WI
2 2 R K UK
3 3 NULL A WI
3 3 NULL a UK
将根据“国家/地区优先级”字段填充记录。优先考虑ind、nz、ca、wi、uk
如果data1中有任何空值,data2字段数据将从下一个优先级记录填充。
所以,我的预期结果是:目标表:
id code data1 data2 country
1 1 A B IND
2 2 S K IND
3 3 NULL A WI
有谁能帮我查询到上面的结果集吗。
为了更好地理解查询,我又添加了几行。
3条答案
按热度按时间ki1q1bka1#
Hive有
first_value()
函数,可用于此目的:我不太喜欢
select distinct
具有窗口功能。在这种情况下,这似乎是最简单的解决方案。eqfvzcg82#
另一种方法是基于最小结构。
对于我使用函数的顺序
field
(field(country,'IND','NZ','CA','WI','UK')
).因为它不见了,所以我把它添加到了文档中。https://cwiki.apache.org/confluence/display/hive/languagemanual+udf
演示
w6lpcovy3#
用例获取优先级并在其上使用first\u值。
生产:
编辑:
您也可以使用
FIELD
函数(在hive、mysql中提供)生成@dudu在下面的注解中建议的优先级:请参见:
https://cwiki.apache.org/confluence/display/hive/languagemanual+udf