1

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")

4

1 回答 1

4

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

砖房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)
于 2013-11-09T02:01:35.070 回答