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.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のフィールドには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.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クレデンシャルを取得します。