Hive 组合单元中的合并整数数组

Hive 组合单元中的合并整数数组,hive,hiveql,Hive,Hiveql,foo\u id是类型为bigint的数组,但整个数组可以为空。如果数组为null,则我需要一个空数组 如果我这样做:COALESCE(foo\u id,ARRAY()) 我得到: 失败:SemanticException[错误10016]:第13:45行参数类型不匹配“ARRAY”:合并后的表达式应具有相同的类型:“ARRAY”应为“ARRAY”,但找到“ARRAY” 如果我这样做:COALESCE(foo\u id,ARRAY()) 我得到一个语法错误:FAILED:ParseExcep

foo\u id
是类型为
bigint
的数组,但整个数组可以为空。如果数组为null,则我需要一个空数组

如果我这样做:
COALESCE(foo\u id,ARRAY())

我得到:

失败:SemanticException[错误10016]:第13:45行参数类型不匹配“ARRAY”:合并后的表达式应具有相同的类型:“ARRAY”应为“ARRAY”,但找到“ARRAY”

如果我这样做:
COALESCE(foo\u id,ARRAY())

我得到一个语法错误:
FAILED:ParseException行13:59无法识别表达式规范中“''''AS'附近的输入

这里的正确语法是什么?

使用以下语法:

合并(foo_id,数组(强制转换(null为bigint))) 之前,配置单元将空数组[]视为[]。但在Hadoop2中,hive现在将空数组[]显示为null(参见下面的参考资料)。对bigint类型的空数组使用数组(强制转换(null为bigint))。奇怪的是,空数组的大小是-1(而不是0)。希望这有帮助。谢谢

Sample data:
foo_ids 
[112345677899098765,1123456778990987633]        
[null,null]     
NULL    

select foo_ids, size(foo_ids) as sz from tbl;
Result:
foo_ids                                        sz
[112345677899098765,1123456778990987633]        2
[null,null]                                     2
NULL                                           -1

select foo_ids, coalesce(foo_ids, array(cast(null as bigint))) as newfoo from tbl;
Result:
foo_ids                                         newfoo
[112345677899098765,1123456778990987633]        [112345677899098765,1123456778990987633]
[null,null]                                     [null,null] 
NULL                                            NULL

Reference:

我关心的不是数组中的空值,而是整个数组都为空。因此,对于您的最后一个测试用例,我想从
NULL
->
[]
。也许这是不可能的。[]现在根据hadoop 2为空。