python—是否可以在配置单元中按列表进行查询?

zpqajqem  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(405)

我有身份证清单

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

我想查询所有行,以便id与列表中的一个id匹配
现在我正在用一种老套的方式做这件事

  1. # This is a python script
  2. id_list_str = "`_id` = '" + str(_id[0]) + "' "
  3. for m_id in _id[1:]:
  4. id_list_str += " OR `_id` = '" + str(m_txn_id) + "' "
  5. hive_query = "SELECT" \
  6. " `_id`, " \
  7. " time, " \
  8. " state " \
  9. "FROM " \
  10. " transaction " \
  11. "WHERE " \
  12. " %s " \
  13. % (id_list_str)

我不认为这会随着我列表中id数量的增加而增加,还有其他方法吗?
谢谢

ny6fqffe

ny6fqffe1#

您使用哪个配置单元版本?配置单元0.13现在不支持where子句中的/exists。。问题https://issues.apache.org/jira/browse/hive-784

f0ofjuux

f0ofjuux2#

你可以用 in 子句,例如在本例中: select * from table_name where column_name in ('medicine','physics','biology')

58wvjzkj

58wvjzkj3#

在配置单元中,尝试横向视图分解以展开列表。这将工作,如果你有许多名单以及。

  1. select a.id
  2. , a.time
  3. , a.state
  4. from transaction a
  5. left semi join
  6. (SELECT distinct id
  7. from list_of_ids LATERAL VIEW explode(id_list_Str) idTable as id
  8. )
  9. t on a.id = t.id

相关问题