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 查詢,該查詢使用 Elasticsearch Query DSL

然後可以在任何 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 認證。