如何在 Apache Drill 中加入不等式?

Posted

技术标签:

【中文标题】如何在 Apache Drill 中加入不等式?【英文标题】:How to do an inequality join in Apache Drill? 【发布时间】:2015-10-02 14:31:53 【问题描述】:

我正在尝试在 Drill 中运行一个需要不等式连接的查询(例如'on a.event_time >= b.event_time and a.event_time

在不使用不等式连接的情况下,是否可以在钻取中使用任何变通方法来获得相同的结果?我能想到的只是扩展我的一个表,以包含我尝试加入的字段的每次迭代的重复行,但我猜有一种更直接的方法,Drill 用户可以解决这个问题。

【问题讨论】:

【参考方案1】:

我猜你正在尝试

 SELECT *
 FROM Table1
 JOIN Table2
   ON Table1.time > Table2.time

你可以试试吗?

 SELECT *
 FROM Table1, Table2
 WHERE Table1.time > Table2.time

【讨论】:

我不能;我没有使用不等式来过滤或限制我的数据。相反,我需要连接在第二个表中找到的字段中的值介于或等于第一个表中的值的行。 我的两个查询是等价的。这就是为什么我问如果您尝试进行第一个查询,第二个查询将返回相同的结果【参考方案2】:

这很老套,但我能够通过在“WHERE”子句中复制和捆绑连接逻辑,然后在连接的对面添加 OR 来使其工作。

例如,如果你想这样做

SELECT * FROM
    ORDERS as Ord
LEFT JOIN Customers as Cus
    ON Cus.CustomerID = Ord.CustomerID
    AND Cus.CustomerType <> 'Employee'

你可以这样做:

SELECT * FROM
    ORDERS as Ord
LEFT JOIN Customers as Cus
    ON Cus.CustomerID = Ord.CustomerID
WHERE ((Cus.CustomerID = Ord.CustomerID
    AND Cus.CustomerType <> 'Employee') OR (Cus.CustomerID <> Ord.CustomerID))

【讨论】:

以上是关于如何在 Apache Drill 中加入不等式?的主要内容,如果未能解决你的问题,请参考以下文章

当键分为列时,如何在 Apache Pig 中加入两个商店?

Apache Pig 如何在加载功能中加入白名单或黑名单?

Apache Drill 与 Kerberos

在 Apache Spark 中加入文件

使用 Apache Drill

Apache Drill - 以嵌入式模式连接到 Drill [java]