Hive 有没有办法在WHERE子句中匹配两个列表来进行选择?
我需要进行选择,但我需要匹配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
从选项卡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。听起来你需要将数据规范化为多个表。是的,第二个解决方案会起作用。。。非常感谢,节省了我很多时间!是的,第二个解决方案会奏效。。。非常感谢,节省了我很多时间!