Elasticsearch连接器

概述

Elasticsearch连接器允许从openLooKeng访问Elasticsearch数据。本文档主要介绍如何搭建Elasticsearch连接器来对Elasticsearch执行SQL查询。

注意强烈推荐使用Elasticsearch 6.0.0及以上版本。

配置

要配置Elasticsearch连接器,请创建具有以下内容的目录属性文件etc/catalog/elasticsearch.properties,并适当替换以下属性:

connector.name=elasticsearch
elasticsearch.host=localhost
elasticsearch.port=9200
elasticsearch.default-schema-name=default

配置属性

elasticsearch.host

定义连接Elasticsearch节点的主机。

此属性是必选。

elasticsearch.port

定义连接Elasticsearch节点的端口号。

此属性是可选的;默认值为9200。

elasticsearch.default-schema-name

定义将包含没有限定模式名称的所有表的模式。

此属性是可选的;默认值为default

elasticsearch.pushdown.enabled

配置是否启用算子下推功能

默认情况下Elasticsearch连接器的算子下推功能是关闭的。你可以通过如下设置来启用它:

elasticsearch.pushdown.enabled=true
#true indicates that pushdown is enabled, and false indicates that pushdown is disabled.

注意:目前算子下推仅支持部分SQL语句的查询关键字,包括EQUAL、AND、OR、算数运算符、BETWEEN、IN,以及部分聚合语法,包括GROUP BY、SUM、COUNT方法。

数据结构算子下推支持矩阵:

ElasticsearchopenLooKeng聚合查询
binaryVARBINARY
booleanBOOLEAN
doubleDOUBLE
floatREAL
byteTINYINT
shortSMALLINT
integerINTEGER
longBIGINT
keywordVARCHAR
textVARCHAR
dateTIMESTAMP
ipIPADDRESS
(其他类型)

说明

由于Elasticsearch不支持针对text类型字段的聚合,因此该类型聚合下推无法成功。

elasticsearch.scroll-size

此属性定义每个Elasticsearch滚动请求中可以返回的最大命中数。

此属性是可选的;默认值为1000

elasticsearch.scroll-timeout

此属性定义了Elasticsearch将保持滚动请求的时间量(毫秒)。

此属性是可选的;默认值为1m

elasticsearch.request-timeout

此属性定义所有Elasticsearch请求的超时值。

此属性是可选的;默认值为10s

elasticsearch.connect-timeout

此属性定义了所有连接Elasticsearch的超时值。

此属性是可选的;默认值为1s

elasticsearch.max-retry-time

此属性定义了单个连接的最大重试时间。

此属性是可选的;默认值为20s

elasticsearch.node-refresh-interval

此属性定义了可用Elasticsearch节点更新频率。

此属性是可选的;默认值为1m

elasticsearch.security

配置连接Elasticsearch的认证类型。目前仅支持PASSWORD

elasticsearch.auth.user

连接Elasticsearch认证的用户名。

elasticsearch.auth.password

连接Elasticsearch认证的密码。

TLS Security

Elasticsearch连接器提供了额外安全选项支持开启了TLS的Elasticsearch节点。该连接器支持PEM或JKS格式的key store和trust store。配置参数如下:

elasticsearch.tls.keystore-path

此属性定义了PEM或JKS格式的key store文件的路径, 该文件必须可由运行openLooKeng的操作系统用户读取。

此属性是可选的。

elasticsearch.tls.truststore-path

此属性定义了PEM或JKS格式的trust store文件的路径, 该文件必须可由运行openLooKeng的操作系统用户读取。

此属性是可选的。

elasticsearch.tls.keystore-password

此属性定义了key store文件的密码。

此属性是可选的。

elasticsearch.tls.truststore-password

此属性定义了trust store文件的密码。

此属性是可选的。

示例:

elasticsearch.tls.enabled=true
elasticsearch.tls.keystore-path=/etc/elasticsearch/openLooKeng.jks
elasticsearch.tls.keystore-password=keystore_password

Data Types

数据类型映射关系如下:

ElasticsearchopenLooKeng
binaryVARBINARY
booleanBOOLEAN
doubleDOUBLE
floatREAL
byteTINYINT
shortSMALLINT
integerINTEGER
longBIGINT
keywordVARCHAR
textVARCHAR
dateTIMESTAMP
ipIPADDRESS
(all others)(unsupported)

Array Type

Elasticsearch中的字段可以包含单个或多个值,但没有数组类型。要说明字段中包含数组,可以在索引映射的_meta中用Presto特定的结构对其进行注释。

例如,有一个包含以下结构的文档的索引:

{
     "array_string_field": ["presto","is","the","besto"],
     "long_field": 314159265359,
     "id_field": "564e6982-88ee-4498-aa98-df9e3f6b6109",
     "timestamp_field": "1987-09-17T06:22:48.000Z",
     "object_field": {
         "array_int_field": [86,75,309],
         "int_field": 2
     }
 }

可以使用以下命令定义该结构的数组字段,将字段属性定义添加到目标索引映射的_meta.presto属性中。

curl --request PUT \
    --url localhost:9200/doc/_mapping \
    --header 'content-type: application/json' \
    --data '
{
    "_meta": {
        "presto":{
            "array_string_field":{
                "isArray":true
            },
            "object_field":{
                "array_int_field":{
                    "isArray":true
                }
            },
        }
    }
}'

限制

  1. openLooKeng不支持查询Elasticsticsearch中有重复列名的表,如:列名为“name”和“NAME”;
  2. openLooKeng不支持Elasticsticsearch表名含有特殊字符,如‘-’,‘.’等。