gpt4 book ai didi

hive - 在配置单元中将代码字符串翻译成 desc

转载 作者:行者123 更新时间:2023-12-02 00:59:29 25 4
gpt4 key购买 nike

这里我们有一个带连字符的字符串,如 0-1-3.... 并且长度不固定,我们在hive中还有一个DETAIL表来解释每个代码的含义。

详情
|代码 |描述 |
+ ---- + ---- +
| 0 | AAAA级 |
| 1 | BB |
| 2 |认证中心 |
| 3 | DDD |

现在我们需要一个 hive 查询来将代码字符串转换为描述字符串。

例如:大小写 0-1-3 应该得到类似 AAA-BBB-DDD 的字符串。

关于如何获得它的任何建议?

最佳答案

Split 你的字符串得到一个数组,explode 数组并与明细表连接(CTE 在我的例子中使用而不是它,使用普通表代替)得到desc 加入代码。然后使用 collect_list(desc) 组合字符串得到一个数组 + concat_ws() 得到连接的字符串:

select concat_ws('-',collect_list(d.desc)) as code_desc 
from
( --initial string explode
select explode(split('0-1-3','-')) as code
) s
inner join
(-- use your table instead of this subquery
select 0 code, 'AAA' desc union all
select 1, 'BBB' desc union all
select 2, 'CCC' desc union all
select 3, 'DDD' desc
) d on s.code=d.code;

结果:

OK
AAA-BBB-DDD
Time taken: 114.798 seconds, Fetched: 1 row(s)

如果您需要保留原始顺序,则使用 posexplode 它返回元素及其在原始数组中的位置。然后您可以在 collect_list() 之前通过记录 ID 和 pos 进行排序。

如果您的字符串是表格列,则使用横向 View 来选择分解值。

这是一个更复杂的例子,保留了顺序和横向 View 。

select str as original_string, concat_ws('-',collect_list(s.desc)) as transformed_string
from
(
select s.str, s.pos, d.desc
from
( --initial string explode with ordering by str and pos
--(better use your table PK, like ID instead of str for ordering), pos
select str, pos, code from ( --use your table instead of this subquery
select '0-1-3' as str union all
select '2-1-3' as str union all
select '3-2-1' as str
)s
lateral view outer posexplode(split(s.str,'-')) v as pos,code
) s
inner join
(-- use your table instead of this subquery
select 0 code, 'AAA' desc union all
select 1, 'BBB' desc union all
select 2, 'CCC' desc union all
select 3, 'DDD' desc
) d on s.code=d.code
distribute by s.str -- this should be record PK candidate
sort by s.str, s.pos --sort on each reducer
)s
group by str;

结果:

OK
0-1-3 AAA-BBB-DDD
2-1-3 CCC-BBB-DDD
3-2-1 DDD-CCC-BBB
Time taken: 67.534 seconds, Fetched: 3 row(s)

请注意,使用的是 distribute + sort 而不是简单地 order by str, pos。 distribute + sort 在完全分布式模式下工作,order by 也可以正确工作,但在单个 reducer 上。

关于hive - 在配置单元中将代码字符串翻译成 desc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com