array_contains 等效于 HiveQL 中的 JSON

Posted

技术标签:

【中文标题】array_contains 等效于 HiveQL 中的 JSON【英文标题】:array_contains equivalent for JSON in HiveQL 【发布时间】:2013-11-08 19:35:17 【问题描述】:

HiveQL 为其数组数据类型提供了一个 array_contains() 函数,并且还提供了 json 支持。

但是,get_json_object() 函数在获取 json 数组时不返回数组数据类型,这意味着 array_contains() 函数不能用于生成的 json_array。

在 HiveQL 中模拟 json 数组的 array_contains() 功能的最佳方法是什么?

作为一个具体的例子,我希望以下内容返回 true:

array_contains_mimic(get_json_object("array":["one", "two"], '$.array'), "one")

【问题讨论】:

【参考方案1】:

Brickhouse 库 (http://github.com/klout/brickhouse) 扩展了用于处理 JSON 的 UDF。

brickhouse UDF "json_split" 将 JSON 文本转换为数组对应,并将其转换为 Hive 数组。 IE。你可以实现你所需要的

array_contain( json_split( get_json_object('"array":["one"],"two"]', '$.array'), 'one')

Brickhouse 还允许您序列化和反序列化任意 Hive 结构,因此您可以执行更复杂的操作。

使用 from_json,您的表达式将是

array_contains( map_index( from_json( str, map( "string", array("string"))),"array"),"one)

【讨论】:

以上是关于array_contains 等效于 HiveQL 中的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Hive:array_contains

配置单元中的 ARRAY_CONTAINS 多个值

为 Spark SQL 寻找 ARRAY_CONTAINS 的替代解决方案

Spark SQL:array_contains 和自动插入的强制转换

Angular firestore array_contains 对象

我想知道 BigQuery 中 Array_contains 的类似功能。我正在尝试获取 Array of Struct 字段中存在的多个值的结果