Hive 有没有办法在WHERE子句中匹配两个列表来进行选择?

Hive 有没有办法在WHERE子句中匹配两个列表来进行选择?,hive,hiveql,Hive,Hiveql,我需要进行选择,但我需要匹配WHERE子句中的两个列表以筛选结果。比如: 从选项卡1中选择* 其中FieldPartition=W 和字段1英寸(X1,X2…X600) 和字段2 IN(Y1,Y1…Y600); 但select仅在X1和Y1、X2和Y2等匹配时返回 我在括号中用了一堆OR-between和来表示WHERE子句,这很有效,但我需要另一种方法 从选项卡1中选择* 其中FieldPartition=W 和(字段1=X1和字段2=Y2)或 (字段1=X2和字段2=Y2)或 (现场1=X

我需要进行选择,但我需要匹配WHERE子句中的两个列表以筛选结果。比如:

从选项卡1中选择*
其中FieldPartition=W
和字段1英寸(X1,X2…X600)
和字段2 IN(Y1,Y1…Y600);
但select仅在X1和Y1、X2和Y2等匹配时返回

我在括号中用了一堆OR-between和来表示WHERE子句,这很有效,但我需要另一种方法

从选项卡1中选择*
其中FieldPartition=W
和(字段1=X1和字段2=Y2)或
(字段1=X2和字段2=Y2)或
(现场1=X600,现场2=Y600);
上面的代码按预期工作,但需要很长时间才能运行,因为表太大了,我想要更快的东西

有什么想法吗

谢谢

您是否尝试过:

   SELECT * FROM TAB1
     WHERE FieldPartition = W
     AND Field1 IN (X1,X2...X600)
     AND Field1 = Field2;
刚刚编辑,因为我意识到(…)中对
字段2的检查是多余的

您是否尝试过:

   SELECT * FROM TAB1
     WHERE FieldPartition = W
     AND Field1 IN (X1,X2...X600)
     AND Field1 = Field2;

刚刚编辑,因为我意识到(…)
中对
字段2的检查是多余的

简言之,在配置单元中不可能使用一个简单的查询,因为在
子句中的
中只能有一列,而需要将表中的两列与值对进行匹配。见类似的讨论

要实现目标,最简单(但可能效率最低)的方法是在聚合上匹配聚合,例如

SELECT * FROM TAB1
WHERE FieldPartition = W
AND CONCAT(Field1,',',Field2) IN ('X1,Y1','X2,Y2'...'X600,Y600');
但是,这将在
TAB1
的每一行上运行
CONCAT
,这可能不是您想要的

如果您想要更结构化的内容,您可能需要创建一个表,例如
FILTER\u TAB
,其中包含列
X
Y
,在那里加载所有的筛选值,然后使用
联接进行选择,例如

SELECT t1.* 
FROM FILTER_TAB f
JOIN TAB1 t1
ON (f.X=t1.Field1 AND f.Y=t1.Field2)
WHERE t1.FieldPartition = W;

根据您的需求,您可能需要执行
左连接
左外连接

简而言之,在配置单元中,使用一个简单的查询是不可能的,因为在
子句中只能有一列,而您需要将表中的两列与值对匹配。见类似的讨论

要实现目标,最简单(但可能效率最低)的方法是在聚合上匹配聚合,例如

SELECT * FROM TAB1
WHERE FieldPartition = W
AND CONCAT(Field1,',',Field2) IN ('X1,Y1','X2,Y2'...'X600,Y600');
但是,这将在
TAB1
的每一行上运行
CONCAT
,这可能不是您想要的

如果您想要更结构化的内容,您可能需要创建一个表,例如
FILTER\u TAB
,其中包含列
X
Y
,在那里加载所有的筛选值,然后使用
联接进行选择,例如

SELECT t1.* 
FROM FILTER_TAB f
JOIN TAB1 t1
ON (f.X=t1.Field1 AND f.Y=t1.Field2)
WHERE t1.FieldPartition = W;

您可能需要执行
左连接
左外连接
,具体取决于您的要求。

将此标记为“SQL”会产生误导,因为配置单元是无SQL数据库。对不起,您是对的。将此标记为“SQL”会产生误导,因为配置单元是无SQL数据库。您是对的,抱歉。这不起作用,因为X1可以有多个Y的行,但我需要X1与Y1匹配的特定行(但有不同的值)。请提供一些数据示例。我不明白你所说的“X1匹配Y1(但有不同的值)”是什么意思。这似乎是矛盾的。想想一个由数字标识的银行机构,这个机构有许多由更大数字标识的账户。。。X是机构,Y是账户,我需要X1机构匹配Y1账户,X2机构匹配Y2账户的结果,等等,其中X和Y是机构和账户的特定列表。例如,问题是X1可能有许多Y。听起来您需要将数据规范化为多个表。这不起作用,因为X1可能有多个Y的行,但我需要X1与Y1匹配的特定行(但具有不同的值)。请提供一些数据示例。我不明白你所说的“X1匹配Y1(但有不同的值)”是什么意思。这似乎是矛盾的。想想一个由数字标识的银行机构,这个机构有许多由更大数字标识的账户。。。X是机构,Y是账户,我需要X1机构匹配Y1账户,X2机构匹配Y2账户的结果,等等,其中X和Y是机构和账户的特定列表。例如,问题是X1可能有许多Y。听起来你需要将数据规范化为多个表。是的,第二个解决方案会起作用。。。非常感谢,节省了我很多时间!是的,第二个解决方案会奏效。。。非常感谢,节省了我很多时间!