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 查詢,該查詢使用 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 的使用者名稱。 |
|
用於驗證 Elasticsearch 的密碼。 |
AWS 授權¶
若要使用 IAM 原則啟用 AWS 授權,則需要將 elasticsearch.security
選項設定為 AWS
。 此外,還需要適當設定以下選項
屬性名稱 |
描述 |
---|---|
|
AWS 區域或 Elasticsearch 端點。 此選項為必要選項。 |
|
用於連線到 Elasticsearch 網域的 AWS 存取金鑰。 |
|
用於連線到 Elasticsearch 網域的 AWS 秘密金鑰。 |
|
使用 EC2 中繼資料服務來擷取 API 認證。 |