array_contains等效于HiveQL中的JSON

时间:2013-11-08 19:35:17

标签: hive hiveql

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

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

在HiveQL中模仿json数组的array_contains()函数的最佳方法是什么?

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

array_contains_mimic(get_json_object({“array”:[“one”,“two”]},'$ .array'),“one”)

1 个答案:

答案 0 :(得分:4)

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

brickhouse UDF“json_split”转换对应于数组的JSON文本,并将其转换为Hive数组。即。您可以使用

实现所需的功能
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)