使用Hive我创建了一个包含以下字段的表:
通过以下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”的文件。
答案 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函数。