新的程序员使用SQL和Apache Drill在这里。我正在尝试从DB1获取这个SQL命令:
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中运行良好,但在钻取中不起作用。下面是钻取代码:
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) 以下是错误消息:
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}')发布于 2017-12-15 21:05:36
这在很大程度上取决于存储插件部分中的映射。您是如何命名存储组件的?例如,如果你连接到一个mysql数据库,那么这个存储插件可能叫做MySQL。
现在,如果你想访问一个特定表中的数据,你首先需要告诉Drill这个存储插件。否则Drill应该如何知道这个表位于哪个连接中?
例如,对于一个名为mysql的MySQL连接、一个数据库"mydb“、一个表"twitterfeed”和一个列"message“,SELECT将如下所示:
SELECT * FROM mysql.mydb.twitterfeed.message LIMIT 10;这可以很容易地在Drill web UI中进行测试,该UI提供了一个非常简单的Query对话框。
其他数据源可以以这种方式连接,例如,与MongoDB中的表连接:
SELECT * FROM mysql.mydb.twitterfeed.message
JOIN mongodb.thedb.tablename ON mysql.mydb.twitterfeed.id = mongodb.thedb.tablename.externalid
LIMIT 10;我确实只是出于示例目的使用了SELECT *。显然,这应该始终包含正确的列名,而不是星号。如果你只使用一个数据库,你也可以使用USE。
https://stackoverflow.com/questions/47824671
复制相似问题