sql - Hive 嵌套的 get_json_object 在选择查询中工作正常,但在创建表中返回 null 作为选择查询 - 奇怪的行为
问题描述
我有一个具有 3 列的配置单元表,其中组合 1 列是一个字符串,第二个是字符串化的 json 数组,第三个是字符串化的 json 对象。我想从字符串化的 json 对象中检索一个字段,其相关键可以通过将第一列与第二个数组中的字符串化 json 数组中的第一个元素组合来获得。
get_json_object(
get_json_object(
column3,concat(
"$.",column1,"__",
get_json_object(
column2,"$[0]"
))),
"$.fieldofinterest")
as field_of_interest
我编写了上述构造,以检索感兴趣的领域。
当这是作为select...from
语句的一部分编写时,我会在field_of_interest
列中得到正确的输出。
当它作为create table t1 as select...from
语句的一部分编写时,将在所有行的位置创建field_of_interest
表NULL
。
声明中没有失败create...select
。所有其他列都很好地填充。我get_json_object
在其他列中使用,它们没有嵌套。他们很好。只有这一栏没有。
这可能是什么原因造成的?我该如何开始调试呢?其他堆栈溢出答案没有运气。
解决方案
想通了。这是因为我测试查询的位置和最终运行它的位置之间存在版本差异。
我在 hiveserver2 上测试它。它在 spark 2.2 后端运行,get_json_object
能够解析 json 数组。在我运行它的服务器上,hive 0.13 版本正在运行,它不解析 JSON 数组。我将数组包裹在一个对象中,它就像一个魅力。
get_json_object(
get_json_object(
column3,
concat(
"$.",
column1,
"__",
get_json_object(
concat('{"x":',column2,'}'),
"$.x[0]"
)
)
),
"$.fieldofinterest"
) as field_of_interest
推荐阅读
- sql - psql 的 \dt PATTERN 是如何工作的?
- javascript - 在javascript中将值乘以连续子字符串的简单方法
- node.js - 承诺待定的空气表
- python - 如何通过 Colab 在我的 Google Drive 中正确加载文件(包括模型)
- html - 如何制作具有多个子菜单的可悬停下拉导航菜单?
- c# - 如何查找在 C# .NET Core 中实现嵌套接口的所有类(类型)?
- email - Net::SMTPAuthenticationError (535-5.7.8 用户名和密码不被接受。了解更多信息): with devise mailer
- react-native - 反应原生 JSON 解析
- google-cloud-platform - 擦除 gcp VM 上配置的静态 IP 路由
- python - 如何检查 print 是否在函数中被调用?