使用 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 进行多表连接的主要内容,如果未能解决你的问题,请参考以下文章