为了账号安全,请及时绑定邮箱和手机立即绑定

Hadoop Hive 查询中 IN 子句中的大量 Id

Hadoop Hive 查询中 IN 子句中的大量 Id

慕森卡 2021-10-27 10:49:06
通过在IN子句中传递 700K item_ids,从包含 900 万行的表中获取一列(假设为 item_name)的最佳方法是什么?我对 Hadoop 和 Hive 非常陌生,我来自 Java 背景。有没有什么方法可以一次性完成所有操作?还是我需要把它分块?如果我需要分块,您建议的最佳数字是多少(我知道这取决于许多其他因素,但只是为了获得一个起点)或者您会建议除 hive 之外的任何其他解决方案(类似于 Java 多线程批处理带有 item_id 块的 Hadoop)我已经尝试通过在IN子句中发送 700K ,它令人窒息,什么也没有回来,查询被神秘地杀死了
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

你有几个选择:


加入。 将所有 id 放入 HDFS 中的一个文件中,在文件目录顶部创建表。


CREATE EXTERNAL TABLE table_ids(item_id int)

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE

location '/hive/data' --location(directory) in hdfs where the file is

;

select item_name from table a

      inner join table_ids b on a.item_id=b.item_id

使用 in_file: 将所有 id 放入文件中,一个 id 连续。


select item_name from table where in_file(item_id, '/tmp/myfilename'); --local file

使用 join with stack,如果它适合内存:


select item_name from table a

      inner join 

(

select stack(10, --the number of IDs, add more IDs

             0,  1,  2,  3,  4,  5,  6,  7,  8,  9) as (item_id) 

 ) b

 on a.item_id=b.item_id


查看完整回答
反对 回复 2021-10-27
  • 1 回答
  • 0 关注
  • 295 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信