hive取数组前n个作为新数组的语法和坑
错误写法:
if(size(ip)>10, (ip[0],ip[1],ip[2],ip[3],ip[4],ip[5],ip[6],ip[7],ip[8],ip[9]), ip) as ip,
报错显示:
Cannot convert column from string to array.解决办法
正确语法:
if(size(ip)>10, array(ip[0],ip[1],ip[2],ip[3],ip[4],ip[5],ip[6],ip[7],ip[8],ip[9]), ip) as ip,
坑:
参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
如果取数组应该这样只需要(ip[0],ip[1],ip[2],ip[3],ip[4],ip[5],ip[6],ip[7],ip[8],ip[9]) 这就是一个数组
但有个注意点需要加数组名 而且比较坑就是需要名字是array比较合理
所有如果你选择写if(size(ip)>10, (ip[0],ip[1],ip[2],ip[3],ip[4],ip[5],ip[6],ip[7],ip[8],ip[9]) as array, ip) as ip, 是错误的
正确小示范:
select if(size(array(1,2,3)>2),array(1,2), array(1,2,3))