是否可以在Hive中按列表查询?

时间:2015-07-07 17:09:32

标签: python sql hadoop hive bigdata

我有一份ids列表

[id1, id2, id3.......]

我想查询所有行,以便id匹配列表中的一个id

现在我正在以一种黑客的方式做这件事

# This is a python script
id_list_str = "`_id` = '" + str(_id[0]) + "' "

for m_id in _id[1:]:
    id_list_str += " OR `_id` = '" + str(m_txn_id) + "' "


hive_query = "SELECT" \
             "  `_id`, " \
             "  time, " \
             "  state " \
             "FROM " \
             "  transaction " \
             "WHERE " \
             "  %s " \
             % (id_list_str)

我不认为这会随着我列表中id的数量的增加而增加,是否有其他方法可以做到这一点?

由于

3 个答案:

答案 0 :(得分:0)

在配置单元中尝试展开横向视图以展开列表。如果您还有许多列表,这将有效。

  select a.id
    , a.time
    , a.state
  from transaction a 
 left semi join
  (SELECT distinct id 
  from list_of_ids LATERAL VIEW explode(id_list_Str) idTable as id
  ) 
  t on a.id = t.id

答案 1 :(得分:0)

您使用的是哪个Hive版本? Hive 0.13现在支持WHERE子句中的IN / EXISTS ..问题https://issues.apache.org/jira/browse/HIVE-784

答案 2 :(得分:0)

您可以使用in子句,例如以下示例:

select * from table_name where column_name in ('medicine','physics','biology')