gpt4 book ai didi

java - Hadoop Hive 查询中 IN 子句中的大量 ID

转载 作者:可可西里 更新时间:2023-11-01 15:21:25 26 4
gpt4 key购买 nike

问题:通过在 IN 中传递 700K item_id,从包含 900 万行的表中获取一列(假设 item_name)的最佳方法是什么?子句

我是 Hadoop 和 Hive 的新手,我有 Java 背景。无论如何/有什么简单的方法可以一次性搞定这一切吗?或者我需要分块吗?如果我需要分块,你建议的甜蜜数字是多少(我知道这取决于许多其他因素,但只是为了获得一个起点)或者你会建议除配置单元之外的任何其他解决方案(类似于 Java 多线程批处理命中带有 item_id block 的 Hadoop)

我已经尝试在 IN 中发送 700K子句,很窒息,什么都没有返回,query被神秘杀死。

最佳答案

你有几个选择:

加入。将所有 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

关于java - Hadoop Hive 查询中 IN 子句中的大量 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52631415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com