使用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}')
答案 0 :(得分:0)
这很大程度上取决于存储插件部分中的映射。你是如何命名存储组件的?例如。如果你连接到MySQL数据库,存储插件可能被称为mysql。
现在,如果要访问特定表中的数据,首先需要告诉Drill存储插件。钻怎么应该知道这个表所在的连接?
例如,使用名为mysql的MySQL连接,数据库“mydb”,表“twitterfeed”和列“消息”,SELECT
将如下所示:
SELECT * FROM mysql.mydb.twitterfeed.message LIMIT 10;
这可以在Drill Web 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 *
作为示例目的。显然,这应该始终保持正确的列名称而不是asterik。如果您只使用一个数据库,也可以使用USE
。