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的主要内容,如果未能解决你的问题,请参考以下文章
为 Spark SQL 寻找 ARRAY_CONTAINS 的替代解决方案
Spark SQL:array_contains 和自动插入的强制转换
Angular firestore array_contains 对象
我想知道 BigQuery 中 Array_contains 的类似功能。我正在尝试获取 Array of Struct 字段中存在的多个值的结果