如何编写基于另一个表过滤表的Hive查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写基于另一个表过滤表的Hive查询?相关的知识,希望对你有一定的参考价值。

我有两个表,表一有两列a和b,表二有两列c和d。对于表一中的每一行,如果我可以在表二中找到一行,那么a = c and substring(b, 1, 3) = substring(d, 1, 3),然后我将这一行保留在表一中。最后,我想计算表一中有多少行。我尝试在下面写这样的查询,但我不确定它是否正确?

SELECT COUNT(1)
FROM
(SELECT One.a
 FROM One
 LEFT SEMI JOIN Two
 ON One.a  = Two.b
 AND One.ds = '2018-02-27'
 AND Two.ds = '2018-02-27'
 AND One.c IS NOT NULL
 AND Two.d IS NOT NULL
 AND SUBSTR(One.c, 1, 3) = SUBSTR(Two.d, 1, 3)
 GROUP BY One.a) subquery
答案

由于我没有数据示例,我发现很难判断您的代码是否正确。但是,正如我所看到的那样,你想根据两个条件加入,对吗?

前段时间我看到了这个:Hive Query- Joining two tables on three joining conditions with OR operator

我认为他们有一些不同的选择。我对你所拥有的内容提出了类似的问题,并且发现答案非常有用!

以上是关于如何编写基于另一个表过滤表的Hive查询?的主要内容,如果未能解决你的问题,请参考以下文章

PHP/SQL - 如何过滤掉与另一个表的数据有冲突的记录?

Hive - 如何查询表以获取其自己的名称?

如何从一个表中过滤出其 id 出现在另一个表的列中的记录

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询

如何在子查询中使用外部查询中的列从另一个表中获取结果?

如何在另一个表的大查询中创建一个包含嵌套数据的新表?