我无法将 Tableau 连接到 EMR 集群上的 presto。版本: Tableau 10, emr-5.3.0, Presto 0.157.1
我可以使用命令通过presto-cli进行连接
[hadoop@ip-172-xx-yy-zz scripts]$ presto-cli
presto> use hive.poc;
presto:poc> show tables;
Table
...
但是,尝试使用 Teradata ODBC 连接器从 Tableau 进行连接时,我无法做到。结果,我收到错误"未指定目录"。
但是,在检查 Presto Web 界面 (http://ec2-aaa-bbb-ccc-ddd.eee.compute.amazonaws.com:8889/query.html?20170130_165412_00329_5gbba) 上提供的 java 错误的跟踪时,我收到以下错误。它看起来更像是一个解析错误。
com.facebook.presto.sql.parser.ParsingException: line 1:1: no viable alternative at input '{'
at com.facebook.presto.sql.parser.SqlParser$1.syntaxError(SqlParser.java:45)
at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:65)
... 60 more
提交的查询如下:
{"query":"select * from "hive.poc"."information_schema"."tables" WHERE table_schema LIKE 'default' AND table_name LIKE '*'","preparedStatements":{}}
任何帮助/提示将不胜感激。
注意:在 EMR 集群中,presto 服务器在端口 8889 中可用,而不是在通常的 8080 中可用。
谢谢!
发生这种情况是因为 Tableau 使用的是 Teradata 驱动程序(至少 Tableau 网站告诉您安装这些驱动程序)。驱动程序的1.1.8版本仅与Presto 0.157t(即Teradata版本0.157)兼容。
这是导致您看到的错误的特定拉取请求:https://github.com/prestodb/presto/pull/5868。一个解决方案可能是在 EMR 上安装 0.157t,但这需要比在 EMR 上启动集群时简单地检查 Presto 框更多的工作。
修复拉取请求 5868 引入的问题的解决方法:
在 aws emr 命令中添加 --configurations 标志并指向本地 json 文件。例如:
aws emr create-cluster [...] --configurations file://./clusterConfiguration.json
clusterConfiguration.json 的内容是:
{
"Classification": "presto-config",
"Properties": {
"presto.version": "0.148"
}
}
这会将 presto 的已发布版本设置为 0.148。这是由 Teradata 驱动程序拾取的,然后使用 0.157 预期的旧有效负载。
默认情况下,EMR 上的 Presto 使用 Hive 作为其目录。尝试使用这样的命令进入presto-cli presto-cli --catalog Hive
然后,您应该能够访问所有表。此外,在 Tableau 中,您可能必须将配置单元定义为目录。
我也有同样的问题。
使用 rest-client ,我将提交的查询更改为仅 SQL 语句,没有 json 信封,并且它起作用了。它不能解决问题,但它提供了解决方案的提示。