将代码字符串转换为 hive 中的 desc

2024-01-26

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

DETAIL | code | desc | + ---- + ---- + | 0 | AAA | | 1 | BBB | | 2 | CCC | | 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;

Result:

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

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

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

这是更复杂的示例,具有保留顺序和横向视图。

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;

Result:

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。分发+排序以完全分布式模式工作,order by也可以正确工作,但在单个减速器上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将代码字符串转换为 hive 中的 desc 的相关文章

随机推荐

  • 如何使用 smtplib 和 Python 保持 SMTP 连接打开?

    我需要检查 SMTP 服务器的超时 但我的套接字刚刚关闭 我究竟做错了什么 这是我的测试 usr bin python import smtplib import time import datetime import socket soc
  • 查找二进制文件的版本

    有谁知道如何找到已传递给我的函数的二进制文件的版本 我从以下代码中得到了这一页 http www linuxquestions org questions programming 9 reading binary file in pytho
  • 在 Zend HeadScript 视图助手中修改堆栈

    我正在尝试攻击这个问题 https stackoverflow com questions 2253170 zend framework last code to execute before layout is rendered从完全不同
  • 在 JUnit 测试类中哪里配置 log4j?

    看看我写的最后一个 JUnit 测试用例 我在类构造函数中调用了 log4j 的 BasicConfigurator configure 方法 这对于仅从 Eclipse 的 作为 JUnit 测试用例运行 命令运行单个类来说效果很好 但我
  • 当用户在文本框中键入值时,在另一个文本框中显示一个文本框值

    当用户在文本框中输入值时 是否有一种方法可以从一个文本框中获取值并使用 jQuery 动态地将其添加到另一个文本框中 如果有这样的事情 有人可以解释一下该方法吗 问候 兰加纳 你的意思是像http jsfiddle net ZLr9N ht
  • 在多层架构中通过层传递业务实体

    目前我正在开发一个利用多层架构的项目 如中所述应用架构指南2 0 http apparch codeplex com 有 5 层 DAL BLL Facade 表示层和公共层 这里我们有一个业务逻辑层 它由业务组件和业务实体 它们是使用 O
  • 切换到另一个分支而不更改工作区文件

    我从 GitHub 克隆了一个 git 存储库 做了一些更改和一些提交 我做了很多 而且都很脏 所以它们不适合拉请求 现在我创建了分支cleanchanges from origin master 所以它很干净 我想将我的更改作为一次提交提
  • Android 将图像保存到 SD 卡

    UPDATE Added
  • LINQ to SQL 的编译查询何时可以提高性能

    我指的是一篇文章 http www albahari com nutshell speedinguplinqtosql aspx其重点是加速 LINQ to SQL 查询 它提到的技术之一是 使用编译查询 并解释了如何使用它 我希望看到编译
  • Sharepoint 中文档库的全局自定义视图

    在Sharepoint文档库中 当我们创建新文档库时 默认视图是 所有文档 这个 我们可以制作一个自定义视图视图 gt 创建视图 位于文档库视图的右上角 我创建了一个新的标准视图并将其命名为 Chromed View 我编辑了它 然后我发现
  • 为什么 WebGL 比 Canvas 更快?

    如果两者都使用硬件加速 GPU 来执行代码 为什么 WebGL 比 Canvas 更快 我的意思是 我想知道为什么在低级别上 从代码到处理器的链条 会发生什么 Canvas WebGL 直接与驱动程序通信 然后与显卡通信 Canvas 速度
  • Android 联系人:查找键如何工作?

    在联系人顶部id 安卓也有LOOK UP https developer android com reference android provider ContactsContract ContactsColumns html LOOKUP
  • AttributeError:“str”对象没有属性“mean_validation_score”

    我的代码中出现此错误 AttributeError str object has no attribute mean validation score 我可以做什么来解决它 def report grid scores n top 3 to
  • 通过 hilt 中的不同具体类绑定接口?

    我用希尔特 我有一个接口 但我有两个实现它们的类 我需要在 ViewModels 中实现不同的 Bind 接口 请帮助我 创建自定义组件 或使用自定义范围 您提供的代码会有所帮助 但让我们假设 您的界面 interface YourInte
  • 如何将图标和文本段落放在一行中?

    我想将我的字体很棒的图标和文本段落放到一行中 我该如何修复此代码 div class date style display inline block i class fa fa user o i p style display inline
  • Maven 3 - 值得吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否有可能获得一个 .xib 窗口到选项卡式故事板

    我没有很长时间编写代码 Xcode 所以我有点垃圾 基本上我已经创建了一个 xib 并希望它出现在故事 板中 但我真的不知道从哪里开始 因为我有一个 xib 窗口具有UITableView and UIPickerView其中所有代码在 x
  • 将带标签的 pandas DF 写入 influxdb

    我有这个 3526 rows x 5 columns DF 其中col0是时间 col1 col3是标签和col4是我的价值 0 1 2 3 4 0 2017 09 29 22 41 51 10 2 95 5 C1195 LF470 SAR
  • JavaScript通过点击改变当前元素的颜色

    我有一个关于仅更改当前元素的颜色的问题 所以我想通过每次点击来更改当前元素的背景颜色 我的问题是 我无法重置前一个元素的背景颜色 例如 我这里有两种背景颜色 黄色 浅蓝色 如果我单击 旧 div 和 新 div 则两个 div 的背景颜色变
  • 将代码字符串转换为 hive 中的 desc

    这里我们有一个连字符的字符串 例如0 1 3 并且长度不固定 hive 中还有一个 DETAIL 表来解释每个代码的含义 DETAIL code desc 0 AAA 1 BBB 2 CCC 3 DDD 现在我们需要一个 hive 查询来将