Presto支持Elasticsearch数据源配置详解
EdurtIO 人气:0正文
强烈建议使用Elasticsearch 6.0.0或更高版本
在实际工作中我们使用到elasticsearch的场景也很多,为了方便我们统一SQL的查询方式,我们需要将elasticsearch接入到presto中,当然这也是合理的,接下来我们讲解如何进行elasticsearch数据源的接入!
数据源配置
- 首先进入presto安装目录
cd <PrestoHome>
- 创建presto对接elasticsearch的配置文件
vim etc/catalog/elasticsearch.properties
在该文件中配置以下内容:
connector.name=elasticsearch elasticsearch.default-schema-name=test elasticsearch.table-description-directory=etc/elasticsearch/ elasticsearch.scroll-size=1000 elasticsearch.scroll-timeout=30s elasticsearch.request-timeout=2s elasticsearch.max-request-retries=10 elasticsearch.max-request-retry-time=90s elasticsearch.max-hits=1000000
参数的详细含义详见官方文档
数据表配置
我们配置的数据表目录是etc/elasticsearch/
,所以我们需要在该目录下创建相关数据表配置
比如我们在es中有一个明教test的索引,索引大概如下
{ "test": { "mappings": { "elasticsearch": {}, "doc": { "properties": { "msg": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "query": { "properties": { "match": { "properties": { "msg": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } } } } } } }
在该索引中我们只有一个字段那就是msg,根据这个索引我们配置适配presto的数据表
数据表配置如下:
{ "tableName":"test", "schemaName":"test", "host":"localhost", "port": 9300, "clusterName":"es", "index":"test", "indexExactMatch":false, "type":"doc", "columns":[ { "name":"msg", "type":"varchar", "jsonPath":"msg", "jsonType":"varchar" } ] }
需要注意的是我们在columns中的类型指定的是presto中的数据类型 jsonPath针对于json数据而言,不是json数据的话直接使用key即可,详细的参数配置详见官方文档
注意事项:
clusterName一定要于ES服务配置的一致,否则会出现无法连接错误
jsonPath配置格式为$.key
配置完成后重启presto服务即可
数据测试
- 连接presto客户端
presto-cli/target/presto-cli-0.235-SNAPSHOT-executable.jar --server <PrestoServer>
- 执行查询sql
SELECT msg FROM elasticsearch.test.test limit 1;
elasticsearch.test.test
: <catalog>.<database>.<table>
返回结果如下:
msg
-----
你好
(1 row)
Query 20200429_095419_00007_p45px, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:05 [39.8K rows, 660KB] [8.12K rows/s, 135KB/s]
返回我们在ES中的数据结果,我们集成ES成功!
注意: 需要同步配置etc目录到所有的节点中,并重启服务
加载全部内容