如何将 json 字符串数据类型列转换为 hive 中的映射数据类型列?

2024-02-28

我需要从所有行中获取所有唯一的键值. 每行都有不同的键和值请找到上面的专栏图片。

例如:一排看起来像

{"START_TIME":1549002807568,"PARSING.QUERY_FORMED":1549002807586,"CUBES_WITH_PERMISSIONS":1549002807568,"PARSING.CUBE_MATCH_SELECTED":1549002807586,"POTENTIAL_COMPLETIONS_ADDED":1549002807587,"QUERY_PARSED":1549002807586,"SUGGESTIONS_FORMED":1549002807606,"PARSING.SEQUENCES_GENERATED":1549002807568,"PARSING.NGRAM_MATCHES_CACHED":1549002807585}

使用两行数据进行测试,所有键值对都是相同的,除了第二个 JSON 中有一个额外的NEW_KEY and PARSING.NGRAM_MATCHES_CACHED价值观不同。

with data as
(
select stack(2, --data example
'{"START_TIME":1549002807568,"PARSING.QUERY_FORMED":1549002807586,"CUBES_WITH_PERMISSIONS":1549002807568,"PARSING.CUBE_MATCH_SELECTED":1549002807586,"POTENTIAL_COMPLETIONS_ADDED":1549002807587,"QUERY_PARSED":1549002807586,"SUGGESTIONS_FORMED":1549002807606,"PARSING.SEQUENCES_GENERATED":1549002807568,"PARSING.NGRAM_MATCHES_CACHED":1549002807585}',
'{"NEW_KEY":12345,"START_TIME":1549002807568,"PARSING.QUERY_FORMED":1549002807586,"CUBES_WITH_PERMISSIONS":1549002807568,"PARSING.CUBE_MATCH_SELECTED":1549002807586,"POTENTIAL_COMPLETIONS_ADDED":1549002807587,"QUERY_PARSED":1549002807586,"SUGGESTIONS_FORMED":1549002807606,"PARSING.SEQUENCES_GENERATED":1549002807568,"PARSING.NGRAM_MATCHES_CACHED":154900280758}'
) as str
)

select str_to_map(concat_ws(',',collect_set(key_value)),',',':') --collect set, concatenate and convert to map
from
(
select explode(split(regexp_replace (str,'[{}"]',''),',')) key_value from data --remove JSON delimiters, split and explode pairs
)s;

Result:

OK
{"START_TIME":"1549002807568","PARSING.QUERY_FORMED":"1549002807586","CUBES_WITH_PERMISSIONS":"1549002807568","PARSING.CUBE_MATCH_SELECTED":"1549002807586","POTENTIAL_COMPLETIONS_ADDED":"1549002807587","QUERY_PARSED":"1549002807586","SUGGESTIONS_FORMED":"1549002807606","PARSING.SEQUENCES_GENERATED":"1549002807568","PARSING.NGRAM_MATCHES_CACHED":"154900280758","NEW_KEY":"12345"}
Time taken: 158.414 seconds, Fetched: 1 row(s)

当然,"PARSING.NGRAM_MATCHES_CACHED"结果中只存在一次,因为map不允许相同的key出现两次。所有的 key_values 都是唯一的。 请阅读代码中的注释。

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

如何将 json 字符串数据类型列转换为 hive 中的映射数据类型列? 的相关文章

随机推荐

  • Android - 键盘消失时仍保留空白

    我的键盘有问题 当它消失时 它所占据的空间仍然是空白 其余布局不会调整 正常屏幕 带键盘 键盘已关闭 我以前从未见过这个 所以我什至不知道从哪里开始寻找 4 2 2 和 5 1 上都会发生这种情况 另一条重要信息是 这是一个包含所有内容的自
  • 每 n 个位置将列表中的项目插入到另一个列表

    我有以下清单 vector 1 2 3 4 5 6 7 8 9 10 inserted elements 2 2 2 2 2 我想通过插入每两个元素来得到以下结果 output 1 2 2 3 4 2 5 6 2 7 8 2 9 10 2
  • 仅连接那些非 NA 的列

    我有一个数据集 某些列的某些行中包含 NA DT lt data table ID c 1 2 1 3 A c NA NA 1 NA 3 B c 4 5 NA 5 6 C c 7 8 NA NA 9 DT ID A B C 1 1 NA 4
  • Android 模拟器 30.4.5 无法在 MacOS 上运行

    系统信息 MacOs 版本 11 3 测试版 Android Studio 版本 4 1 2 Android 模拟器版本 30 4 5 Android HAXM 版本 7 5 1 错误堆栈 emulator Android emulator
  • 为什么指向指针的指针与指向数组的指针不兼容?

    好吧 我无法理解指向指针的指针与指向数组的指针 考虑以下代码 char s Hello World char p1 s char p2 s printf c n p1 Works printf c n p2 Segmentation fau
  • 为什么我不能使用 jQuery 延迟删除调用

    我想要一个 div 淡出然后被删除 div delay 1000 fadeOut 300 div delay 1300 remove 不幸的是 这只是直接删除了 div 没有任何延迟 为什么我无法延迟删除操作 有哪些解决方案 Thanks
  • 如何从 Rails 的范围中构建选择标签

    我想要一个包含值 10 20 30 等直到 100 的下拉列表 在 ruby 中可以通过以下方式完成 10 100 step 10 i p i 我如何将其转换为选择标签 我试过 但这是打印10 11 12 13 100 你几乎已经拥有了
  • 垃圾收集的“孤岛”

    谁能解释一下这个概念隔离岛垃圾收集 对象 A 引用对象 B 对象 B 引用对象 A 对象 A 和对象 B 都没有被任何其他对象引用 那是一座与世隔绝的孤岛 基本上 隔离岛是一组相互引用的对象 但它们不被应用程序中的任何活动对象引用 严格来说
  • 隐藏行后重新应用表条带化 (Twitter Bootstrap)

    我正在使用 Bootstrap 并且有一个条带表 可以通过选择表单上的一些选项来过滤该表 JavaScript 解释表单输入 并隐藏表中与所选条件不匹配的行 但是 这会破坏表上的表条带化 具体取决于隐藏的行 灰色行紧邻灰色行 白色行紧邻白色
  • 使用 JSP 从服务器检索并显示图像

    我有一段代码可以帮助我将图像保存在服务器上 我需要知道如何在 div 上显示保存的图像 JSP代码
  • vis.js 分层布局中的级别排序

    我有一个相当简单的节点层次结构 但是当 vis js 绘制它们时 每个级别上的节点顺序没有多大意义 有很多交叉边 屏幕截图 默认布局 https i stack imgur com Y3VtI jpg 我希望得到与此处给出的布局类似的布局
  • 用于编辑 .fla 文件的免费 Flash IDE

    我们有一个 fla 文件 我们需要一个 IDE 来打开 fla 文件并调试操作脚本 我们尝试了 Flash Develop 开源 但该 IDE 无法打开 fla 文件 是否有任何其他免费 开源 IDE 我们可以用来打开和调试 fla 文件
  • 使用 JQuery Datepicker 仅显示月份

    我希望能够使用JQuery UI 日期选择器 http jqueryui com demos datepicker 允许用户选择特定月份 但无法选择该月中的特定日期 日期选择器上的前进和上一步按钮会将用户带到不同的位置years 而不是不同
  • 需要想法:选择表中的行

    我正在为客户开发一个网站 它需要一种特殊的方式来创建计算 在表中 我必须创建具有相同 End 的行组 由于一开始只有一行 90 日期为 2011 年 11 月 24 日 因此您可以忽略它 例如 我必须选择带有日期的行 2011 年 11 月
  • Xlib 截图调用

    看到问题后如何在Linux中截图 高fps 编程 https stackoverflow com questions 25162580 how to take screenshot high fps in linux programming
  • 是否可以在 SASS 或 LESS 中将一个类或标签别名为另一个类或标签?

    我正在尝试使用 Less 或可能使用 Sass 使我的 bootstrap 2 1 标记更加语义化 考虑 Bootstrap 标准导航栏的以下标记
  • STL自定义分配器来管理不同的内存空间

    我想使用 STL 自定义分配器类的不同实例来管理不同的内存空间 然后能够为 STL 容器指定分配器实例 以便每个容器仅从其分配的内存空间中提取 但我不知道如何才能做到这一点 我了解如何将分配器类型传递到 STL 容器的模板参数中 但我想要类
  • 何时在 Node js 中使用 eventEmitter?

    我正在学习 Node js 中的新概念 即事件 但我找不到应该在哪里使用它 我想要任何真实的场景 但我找不到任何关于此的文章或博客 var events require events var eventEmitter new events
  • Haskell 使用什么类型的范围?

    我试图弄清楚 Haskell 是否使用动态或静态作用域 我意识到 例如 如果您定义 let x 10 然后定义函数 let square x x x 您有 2 个不同的 x 这是否意味着它是动态作用域的 如果不是 它使用什么范围 为什么 另
  • 如何将 json 字符串数据类型列转换为 hive 中的映射数据类型列?

    我需要从所有行中获取所有唯一的键值 每行都有不同的键和值请找到上面的专栏图片 例如 一排看起来像 START TIME 1549002807568 PARSING QUERY FORMED 1549002807586 CUBES WITH