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”)
答案 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)