首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL和apache drill

SQL和apache drill
EN

Stack Overflow用户
提问于 2017-12-15 09:43:45
回答 1查看 443关注 0票数 2

新的程序员使用SQL和Apache Drill在这里。我正在尝试从DB1获取这个SQL命令:

代码语言:javascript
复制
SELECT screen_name, job_id, count(*) as counter
from twitter.mention t
WHERE t.job_id = 290
or t.job_id = 261
or t.job_id = 303
group by screen_name, job_id
order by counter desc
limit 60;

我正在尝试通过Apache Drill运行这个代码块,这是我非常陌生的。值得注意的是,我使用了两个数据库,但只有一个变量在变化: screen_name (更改为from_user_name)。它在SQL中运行良好,但在钻取中不起作用。下面是钻取代码:

代码语言:javascript
复制
statement = """
SELECT from_user_name, job_id, count(*) as counter
from twitter.tweet t
WHERE t.job_id = 290
or t.job_id = 261
or t.job_id = 303
group by from_user_name, job_id
order by counter desc
limit 60;"""

drill = PyDrill(host='host_name', port=8047)

if not drill.is_active():
    raise ImproperlyConfigured('Please run Drill first')


rows = drill.query(statement, timeout = 120)

df = rows.to_dataframe()
df.head(20) 

以下是错误消息:

代码语言:javascript
复制
TransportError: TransportError(500, '{\n  "errorMessage" : "PARSE 
ERROR: Encountered \\";\\" at line 9, column 9.\\nWas expecting one 
of:\\n    <EOF> \\n    \\"OFFSET\\" ...\\n    \\"FETCH\\" ...\\n    
\\n\\nSQL Query \\nSELECT from_user_name, job_id, count(*) as 
counter\\nfrom twitter.tweet t\\nWHERE t.job_id = 290\\nor t.job_id = 
261\\nor t.job_id = 303\\ngroup by from_user_name, job_id\\norder by 
counter desc\\nlimit 60;\\n        ^\\n\\n\\n[Error Id: 78df6d24-686b-
496f-8795-9b3d21d75740 on c04.h-spark.cgi.missouri.edu:31010]"\n}')
EN

回答 1

Stack Overflow用户

发布于 2017-12-15 21:05:36

这在很大程度上取决于存储插件部分中的映射。您是如何命名存储组件的?例如,如果你连接到一个mysql数据库,那么这个存储插件可能叫做MySQL。

现在,如果你想访问一个特定表中的数据,你首先需要告诉Drill这个存储插件。否则Drill应该如何知道这个表位于哪个连接中?

例如,对于一个名为mysql的MySQL连接、一个数据库"mydb“、一个表"twitterfeed”和一个列"message“,SELECT将如下所示:

代码语言:javascript
复制
SELECT * FROM mysql.mydb.twitterfeed.message LIMIT 10;

这可以很容易地在Drill web UI中进行测试,该UI提供了一个非常简单的Query对话框。

其他数据源可以以这种方式连接,例如,与MongoDB中的表连接:

代码语言:javascript
复制
SELECT * FROM mysql.mydb.twitterfeed.message 
JOIN mongodb.thedb.tablename ON mysql.mydb.twitterfeed.id = mongodb.thedb.tablename.externalid
LIMIT 10;

我确实只是出于示例目的使用了SELECT *。显然,这应该始终包含正确的列名,而不是星号。如果你只使用一个数据库,你也可以使用USE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47824671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档