如何在Hive中搜索数组中的项?

时间:2014-04-07 07:36:09

标签: arrays hadoop hive

使用Hive我创建了一个包含以下字段的表:

  • ID BIGINT,
  • MSISDN STRING,
  • DAY TINYINT,
  • MONTH TINYINT,
  • YEAR INT,
  • GENDER TINYINT,
  • RELATIONSHIPSTATUS TINYINT,
  • 教育STRING,
  • LIKES_AND_PREFERENCES STRING

通过以下SQL命令填充数据:

Insert overwrite table temp_output Select a.ID, a.MSISDN, a.DAY, a.MONTH, a.YEAR, a.GENDER, a.RELATIONSHIPSTATUS, b.NAME,  COLLECT_SET(c.NAME) FROM temp_basic_info a JOIN temp_education b ON (a.ID = b.ID) JOIN likes_and_music c ON (c.ID = b.ID) GROUP BY a.ID, a.MSISDN, a.DAY, a.MONTH, a.YEAR, a.Gender, a.RELATIONSHIPSTATUS, b.NAME;

喜欢和偏好是一个数组,但我没有足够的远见来指定它(它是一个字符串,而不是)。我如何选择在数组中选择具有特定项目的记录?

是否如此简单:

select * from table_result where LIKES_AND_PREFERENCES = "item"

或者那会有一些不可预见的问题吗?

我尝试了上面的查询,然而它确实接缝输出了只有数组中“items”的文件。

3 个答案:

答案 0 :(得分:2)

可能你应该尝试这样的事情:

select * from (
select col1,col2..coln, new_column from table_name lateral view explode(array_column_name) exploded_table as new_column 
) t where t.new_column = '<value of items to be searched>'

希望这有助于...... !!!

答案 1 :(得分:1)

以下列方式使用array_contains udf -

 select * 
 from mytable 
 where array_contains(likes_and_preferences,'item') = TRUE 

array_contains将返回一个可以断言的布尔值。

答案 2 :(得分:0)

您是正确的,您使用的函数将仅返回其中数组只有一个元素值的记录:&#34; item&#34;

您需要使用:array_contains函数。