使用 Apache Drill 进行多表连接

Posted

技术标签:

【中文标题】使用 Apache Drill 进行多表连接【英文标题】:multi table join with apache drill 【发布时间】:2018-03-22 09:55:52 【问题描述】:

我正在尝试从 mysql 加入一个表,从 hdfs 加入 2 个 csv 文件,所以总的来说,我正在尝试使用 apache Drill 加入 3 个表。

当我加入 mysql 表和 1 个 dfs 文件时它可以工作,但当我尝试加入 1 个 mysql 表和 2 个 dfs csv 文件时失败。请帮忙。

代码如下:

select CAST(a.Longitude AS DOUBLE),CAST(a.Latitude AS DOUBLE) 
from ((MySQL.dummy.`accident_05_07` as a 
inner join dfs.`/user/drill/accidents_2009_to_2011.csv` as b 
on a.Longitude=CAST(b.Longitude AS DOUBLE)) 
inner join dfs.`/user/drill/accidents_2012_to_2014.csv` as c 
on a.Longitude=CAST(c.Longitude AS DOUBLE))

[错误 ID:90c4ac92-83e9-4b23-bcd9-5c1535cd58ad 开启 inpunpclx1825e.kih.kmart.com:31010] org.apache.drill.common.exceptions.UserRemoteException:解析错误: 非法上下文中遇到的非查询表达式 SQL Query select CAST(a.Longitude AS DOUBLE),CAST(a.Latitude AS DOUBLE) from((MySQL.dummy.accident_05_07 作为内连接 dfs./user/drill/accidents_2009_to_2011.csv as b on a.Longitude=CAST(b.Longitude AS DOUBLE)) 内连接 dfs./user/drill/accidents_2012_to_2014.csv as c on a.Longitude=CAST(c.Longitude AS DOUBLE)) ^

【问题讨论】:

你能展示你的代码吗? 用代码编辑了问题。 你找到解决办法了吗@LelioFaieta 同时使用堆栈跟踪发布错误消息将有助于识别问题。 您的查询中的问题是您的额外括号。如果您删除它们,您的 sql 将运行。连接将按顺序从第一个表到最后一个表。 【参考方案1】:

试试这个方法:

SELECT `a`.`Longitude`,`a`.`Latitude` 
FROM ((`MySQL`.`dummy`.`accident_05_07` `a` 
INNER JOIN `dfs`.`/user/drill/accidents_2009_to_2011.csv` `b` 
ON `a`.`Longitude`=`b`.`Longitude`) 
INNER JOIN `dfs`.`/user/drill/accidents_2012_to_2014.csv` `c` 
ON `a`.`Longitude`=`c`.`Longitude`)

【讨论】:

谢谢。我已经解决了这个问题。谢谢你的回答。 :)

以上是关于使用 Apache Drill 进行多表连接的主要内容,如果未能解决你的问题,请参考以下文章

134 MySQL多表查询

mysql 如何 多表连查 按时间到排序

mysql 之多表查询

thinkphp3表连查带求和

mysql 如何 多表连查 按时间到排序

sql 多表关联查询