【发布时间】:2017-12-15 01:43:44
【问题描述】:
这里是使用 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}')
【问题讨论】:
-
你的“原始”数据库是什么,哪个数据库在 Apache Drill 下运行?
-
原数据库为twitter.mention,Apache Drill下的新数据库为twitter.tweet。这是一个项目,我们的教授指示我们使用推文表。
-
另外,感谢您的快速回复!
-
“数据库”是指 MySQL、SQL Server、Oracle、Postgres、DB2 等。您在这两个地方都使用哪一个?
-
错误信息似乎是说Drill不喜欢查询中的分号。因为无论如何它可能会被忽略,你可以尝试在
LIMIT子句之后删除那个分号然后再次运行吗?
标签: python sql apache apache-drill pydrill