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 服务器的主机名。 |
|
Elasticsearch 服务器的端口。 |
|
表的默认架构名称。 |
|
每个 Elasticsearch 滚动请求返回的最大命中数。 |
|
Elasticsearch 为滚动请求保持搜索上下文活动的时间量。 |
|
单个 Elasticsearch 请求可以获取的最大命中数。 |
|
Elasticsearch 请求的超时时间。 |
|
到 Elasticsearch 主机的连接超时时间。 |
|
单个请求的所有重试尝试的最大持续时间。 |
|
刷新可用 Elasticsearch 节点列表的频率。 |
|
到 Elasticsearch 的最大持久 HTTP 连接数。 |
|
处理到 Elasticsearch 的 HTTP 连接的线程数。 |
|
是否忽略发布的地址并使用配置的地址。 |
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) 格式的密钥存储和信任存储。允许的配置值是
属性名称 |
描述 |
---|---|
|
是否启用 TLS 安全性。 |
|
是否验证 Elasticsearch 服务器主机名。 |
|
PEM 或 JKS 密钥存储的路径。 |
|
PEM 或 JKS 信任存储的路径。 |
|
密钥存储的密码。 |
|
信任存储的密码。 |
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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(其他) |
(不支持) |
数组类型¶
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 的用户名。 |
|
用于对 Elasticsearch 进行身份验证的密码。 |
AWS 授权¶
要使用 IAM 策略启用 AWS 授权,需要将 elasticsearch.security
选项设置为 AWS
。此外,还需要适当地配置以下选项
属性名称 |
描述 |
---|---|
|
AWS 区域或 Elasticsearch 端点。此选项是必需的。 |
|
用于连接到 Elasticsearch 域的 AWS 访问密钥。 |
|
用于连接到 Elasticsearch 域的 AWS 密钥。 |
|
使用 EC2 元数据服务检索 API 凭据。 |