Elasticsearch コネクタ¶
概要¶
Elasticsearch コネクタを使用すると、Presto から Elasticsearch データにアクセスできます。このドキュメントでは、Elasticsearch に対して SQL クエリを実行するための Elasticsearch コネクタの設定方法について説明します。
注記
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のフィールドには0個以上の値を含めることができますが、専用の配列型はありません。フィールドが配列を含むことを示すには、インデックスマッピングの_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コネクタを使用すると、Elasticsearch Query DSLを使用する有効なElasticsearchクエリをSQLクエリに埋め込むことができます。
その後、結果を任意の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クレデンシャルを取得します。 |