我有一份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的数量的增加而增加,是否有其他方法可以做到这一点?
由于
答案 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')