hive - How to extract array elements from json string in hive table?
问题描述
I have a hive table which contains a json string:
column |
---|
{"id": 123, "ShortName":"test tax","LongName":"test","Description":"test","aFactor":"true","bFactor":"true","cFactor":"false"} |
{"id": 456, "ShortName":"test tax","LongName":"test","Description":"test","aFactor":"false","bFactor":"true","cFactor":"true"} |
{"id": 678, "ShortName":"test tax","LongName":"test","Description":"test","aFactor":"false","cFactor":"true"} |
I want to create an array from this where ever aFactor, bFactor or cFactor is True:
id | factors |
---|---|
123 | aFactor,bFactor |
456 | bFactor,cFactor |
678 | cFactor |
being false or null is equivalent.
解决方案
您可以使用以下步骤执行此操作 -
- 首先确定 *Factor 字段在哪里。
- 如果它们为真,则使用它们,然后将它们连接起来整个查询应如下所示 -
select get_json_object(str,'$.id') as id,
if(get_json_object(str,'$.aFactor')='true','aFactor','') ||if(get_json_object(str,'$.bFactor')='true',',bFactor','')||if(get_json_object(str,'$.cFactor')='true',',cFactor','') factors
from mytable
示例结果在屏幕截图中。测试查询
with tab as ( select '{"id": 123, "ShortName":"test tax","LongName":"test","Description":"test","aFactor":"true","bFactor":"true","cFactor":"false"}' str)
select get_json_object(str,'$.id') as id,
if(get_json_object(str,'$.aFactor')='true','aFactor','') ||
if(get_json_object(str,'$.bFactor')='true',',bFactor','') ||
if(get_json_object(str,'$.cFactor')='true',',cFactor','')
factors
推荐阅读
- javascript - javascript上的多个自动幻灯片问题
- c++ - 在c ++中解码大量以base64编码的数据
- python - 使用 python-shell 持续交换数据
- angular - 带段通配符的角度路由
- javascript - 使用 || 在javascript中执行空/未定义检查?
- angular - 任何 Angular 应用程序都没有在任何浏览器中运行
- python - 使用 argparse 将 Shell 参数传递给 Boto3 Python
- java - 在父级或祖先级上下文中找不到方法 StartRec(View)
- reactjs - 我正在尝试使用 React-Router 将博客组件链接到作者组件
- json - “JSON”类型的值没有成员“arrayOf”