Elasticsearch 连接器

概述

Elasticsearch 连接器允许从 Presto 访问 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 服务器的端口。

elasticsearch.default-schema-name

表的默认架构名称。

elasticsearch.scroll-size

每个 Elasticsearch 滚动请求返回的最大命中数。

elasticsearch.scroll-timeout

Elasticsearch 为滚动请求保持搜索上下文活动的时间量。

elasticsearch.max-hits

单个 Elasticsearch 请求可以获取的最大命中数。

elasticsearch.request-timeout

Elasticsearch 请求的超时时间。

elasticsearch.connect-timeout

到 Elasticsearch 主机的连接超时时间。

elasticsearch.max-retry-time

单个请求的所有重试尝试的最大持续时间。

elasticsearch.node-refresh-interval

刷新可用 Elasticsearch 节点列表的频率。

elasticsearch.max-http-connections

到 Elasticsearch 的最大持久 HTTP 连接数。

elasticsearch.http-thread-count

处理到 Elasticsearch 的 HTTP 连接的线程数。

elasticsearch.ignore-publish-address

是否忽略发布的地址并使用配置的地址。

elasticsearch.host

指定要连接到的 Elasticsearch 节点的主机名。

此属性是必需的。

elasticsearch.port

指定要连接到的 Elasticsearch 节点的端口。

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

elasticsearch.default-schema-name

定义将包含所有未限定架构名称定义的表的架构。

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

elasticsearch.scroll-size

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

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

elasticsearch.scroll-timeout

此属性定义 Elasticsearch 为滚动请求保持 搜索上下文活动 的时间量

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

elasticsearch.max-hits

此属性定义 Elasticsearch 请求可以获取的最大 命中数

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

elasticsearch.request-timeout

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

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

elasticsearch.connect-timeout

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

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

elasticsearch.max-retry-time

此属性定义对 Elasticsearch 的单个请求的所有重试尝试的最大持续时间。

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

elasticsearch.node-refresh-interval

此属性控制刷新可用 Elasticsearch 节点列表的频率。

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

elasticsearch.max-http-connections

此属性控制到 Elasticsearch 的最大持久 HTTP 连接数。

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

elasticsearch.http-thread-count

此属性控制处理到 Elasticsearch 的 HTTP 连接的线程数。

此属性是可选的;默认值为可用处理器的数量。

elasticsearch.ignore-publish-address

该地址用于寻址 Elasticsearch 节点。在容器环境中运行时,发布的地址可能与容器的公共地址不匹配。此选项使连接器忽略发布的地址,而是使用配置的地址。

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

TLS 安全性

Elasticsearch 连接器提供额外的安全选项来支持已配置为使用 TLS 的 Elasticsearch 集群。

连接器支持 PEM 或 Java 密钥存储 (JKS) 格式的密钥存储和信任存储。允许的配置值是

属性名称

描述

elasticsearch.tls.enabled

是否启用 TLS 安全性。

elasticsearch.tls.verify-hostnames

是否验证 Elasticsearch 服务器主机名。

elasticsearch.tls.keystore-path

PEM 或 JKS 密钥存储的路径。

elasticsearch.tls.truststore-path

PEM 或 JKS 信任存储的路径。

elasticsearch.tls.keystore-password

密钥存储的密码。

elasticsearch.tls.truststore-password

信任存储的密码。

elasticsearch.tls.keystore-path

PEM 或 JKS 密钥库的路径。此文件必须可供运行 Presto 的操作系统用户读取。

此属性为可选。

elasticsearch.tls.truststore-path

PEM 或 JKS 信任库的路径。此文件必须可供运行 Presto 的操作系统用户读取。

此属性为可选。

elasticsearch.tls.keystore-password

elasticsearch.tls.keystore-path 指定的密钥库的密钥密码。

此属性为可选。

elasticsearch.tls.truststore-password

elasticsearch.tls.truststore-path 指定的信任库的密钥密码。

此属性为可选。

数据类型

数据类型映射如下所示

Elasticsearch

Presto

binary

VARBINARY

boolean

BOOLEAN

double

DOUBLE

float

REAL

byte

TINYINT

short

SMALLINT

integer

INTEGER

keyword

VARCHAR

long

BIGINT

text

VARCHAR

date

TIMESTAMP

ip

IPADDRESS

(其他)

(不支持)

数组类型

Elasticsearch 中的字段可以包含 零个或多个值 ,但没有专用的数组类型。为了指示字段包含数组,可以在索引映射的 _meta 部分中使用 Presto 特定的结构对其进行注释。

例如,您可以拥有一个 Elasticsearch 索引,其中包含具有以下结构的文档

{
    "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
                }
            },
        }
    }
}'

特殊列

以下隐藏列可用

描述

_id

Elasticsearch 文档 ID

_score

Elasticsearch 查询返回的文档评分

_source

原始文档的来源

全文查询

Presto SQL 查询可以通过将 全文查询 作为表名的一部分(用冒号分隔)提供来与 Elasticsearch 查询结合使用。例如

SELECT * FROM elasticsearch.default."tweets: +presto DB^2"

直通查询

Elasticsearch 连接器允许您在 SQL 查询中嵌入使用 Elasticsearch Query DSL 的任何有效 Elasticsearch 查询。

然后,可以在任何 SQL 语句中使用结果,并将 Elasticsearch 查询包装起来。语法扩展了增强型 Elasticsearch 表名的语法,如下所示

SELECT * FROM es.default."<index>$query:<es-query>"

Elasticsearch 查询字符串 es-query 是 base32 编码的,以避免处理表标识符中的转义引号和大小写敏感问题。

这些查询表的返回值是一个表,该表只有一行和一列,名为 result,类型为 VARCHAR。它包含 Elasticsearch 返回的 JSON 有效负载,并且可以使用 内置 JSON 函数 进行处理。

密码身份验证

要启用 Elasticsearch 中的密码身份验证,需要将 elasticsearch.security 选项设置为 PASSWORD。此外,还需要适当地配置以下选项

属性名称

描述

elasticsearch.auth.user

连接到 Elasticsearch 的用户名。

elasticsearch.auth.password

用于对 Elasticsearch 进行身份验证的密码。

AWS 授权

要使用 IAM 策略启用 AWS 授权,需要将 elasticsearch.security 选项设置为 AWS。此外,还需要适当地配置以下选项

属性名称

描述

elasticsearch.aws.region

AWS 区域或 Elasticsearch 端点。此选项是必需的。

elasticsearch.aws.access-key

用于连接到 Elasticsearch 域的 AWS 访问密钥。

elasticsearch.aws.secret-key

用于连接到 Elasticsearch 域的 AWS 密钥。

elasticsearch.aws.use-instance-credentials

使用 EC2 元数据服务检索 API 凭据。