Hive 比较配置单元HQL中A列的一个值与B列的所有值
我在一个表中有两列,即A列和B列。我每次都需要使用B列的所有值搜索A列的每个值,如果在B列的任何一行中找到A列值,则返回true。我如何获得此结果 我已尝试使用以下命令:Hive 比较配置单元HQL中A列的一个值与B列的所有值,hive,hiveql,Hive,Hiveql,我在一个表中有两列,即A列和B列。我每次都需要使用B列的所有值搜索A列的每个值,如果在B列的任何一行中找到A列值,则返回true。我如何获得此结果 我已尝试使用以下命令: select column _A, column_B,(if (column_A =column_B), True, False) as test from sample; 如果我使用上面的命令,它只检查特定的行。但如果在B列的任何一行中找到a列的值,我需要真值。 如何检查A列的一个值与B列的所有值 或者是否有可能在两列之间
select column _A, column_B,(if (column_A =column_B), True, False) as test from sample;
如果我使用上面的命令,它只检查特定的行。但如果在B列的任何一行中找到a列的值,我需要真值。
如何检查A列的一个值与B列的所有值
或者是否有可能在两列之间迭代和比较每个值?您可以对其自身进行左连接,并检查列键是否为空。如果为空,则在另一个表中找不到该值。使用if或“case-when”函数检查它是否为null
Select t1.column_A,
t1.column_B,
IF(t2.column_B is null, 'False', 'True') as test
from Sample t1
Left Join Sample t2
On t1.column_A = t2.column_B;
解决方案
从sample创建临时表t作为id,列A,列B;-->参考1
选择distinct
t3.id,t3.column_A,t3.column_B,t3.match from(-->参考3
select t1.id as id, t1.column_A as column_A, t1.column_B as column_B,--> Refer 2
if(t2.column_B is null, False, True) as match from t t1 LEFT OUTER JOIN
t t2 ON t1.column_A = t2.column_B
)t3
解释
rand()
。我们将利用这一点在步骤3中获取原始行。为了在接下来的步骤中简化,在此处创建一个临时表t
左外部联接
进行测试,该测试要求在所有行中将每一列与另一列进行匹配,从而生成匹配
列。请注意,这里可能会创建多个重复行,而不是在Sample
表中创建,但我们对重复行有一个句柄,因为它们的id
列是相同的distinct
来获取原始行,如Sample
表中所示。然后可以放弃id
列独特的,成本也很高。一种更有效的方法是使用窗口函数,我们可以通过id
进行分区,并选择窗口中的第一行。你可以探索一下
如果特定的
t1.列a
在t2.列B