カタログを使用して、Elasticsearch クラスターから ApsaraDB for SelectDB インスタンスへオフラインデータを移行します。このカタログにより、Elasticsearch のインデックスが SelectDB のテーブルにマップされるため、単一の INSERT INTO ... SELECT 文を実行するだけで移行を完了できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Elasticsearch クラスターと SelectDB インスタンス間のネットワーク接続性。Elasticsearch クラスターのすべてのノードは、SelectDB インスタンスと同じ仮想プライベートクラウド (VPC) 内に配置されている必要があります。ノードが異なる VPC に配置されている場合は、事前にクロス VPC 接続を設定してください。詳細については、「ApsaraDB for SelectDB インスタンスとデータソース間の接続確立に失敗した場合の対処方法」をご参照ください。
Elasticsearch クラスターのすべてのノードの IP アドレスを、SelectDB インスタンスの IP アドレスホワイトリストに追加済みであること。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。
Elasticsearch クラスターのホワイトリストに追加された SelectDB インスタンスの VPC IP アドレス(クラスターがホワイトリスト機能をサポートしている場合)。VPC IP アドレスを取得するには、「ApsaraDB SelectDB インスタンスが属する VPC の IP アドレスを表示する方法」をご参照ください。パブリック IP アドレスを取得するには、SelectDB インスタンスのパブリックエンドポイントに対して
pingコマンドを実行します。SelectDB のカタログに関する基本的な知識があること。背景情報については、「データレイクハウス」をご参照ください。
仕組み
カタログを作成すると、SelectDB から Elasticsearch クラスターへの読み取り専用接続が確立されます。カタログ作成後、SelectDB は自動的にその内部に default_db という名前のデータベースを作成し、各 Elasticsearch インデックスをそのデータベース内のテーブルにマップします。その後、カタログをクエリし、INSERT INTO ... SELECT を実行して、データを SelectDB のテーブルにコピーできます。
SelectDB は外部カタログからのデータ読み取りのみをサポートしており、Elasticsearch クラスターへの書き込みはサポートされていません。
サンプル環境
以下の手順では、次の例の値を使用します。必要に応じて、ご自身の値に置き換えてください。
| 項目 | 値 |
|---|---|
| Elasticsearch インデックス(ソース) | product_info |
| SelectDB データベース(送信先) | es_db |
| SelectDB テーブル(送信先) | test_es2SelectDB |
サンプルソースデータの準備
詳細については、「入門」をご参照ください。
オフラインデータの移行
ステップ 1:SelectDB インスタンスへの接続
接続方法については、「インスタンスへの接続」をご参照ください。
ステップ 2:Elasticsearch カタログの作成
以下の文を実行して、Elasticsearch クラスターを指すカタログを作成します。
CREATE CATALOG es_catalog PROPERTIES (
"type"="es",
"hosts"="http://127.0.0.1:9200",
"user"="test_user",
"password"="test_passwd",
"nodes_discovery"="false"
);以下の表に、カタログのプロパティを示します。
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
es_catalog | はい | — | カタログの名前です。ビジネス要件に応じて名前を変更してください。 |
type | はい | — | es を指定します。 |
hosts | はい | — | Elasticsearch クラスターへのアクセス URL です。形式: http://<IP アドレス>:<ポート>。Server Load Balancer (SLB) エンドポイントを利用する場合は、SLB の URL を指定します。 |
user | いいえ | — | Elasticsearch クラスターへのアクセスに使用するユーザー名です。 |
password | いいえ | — | Elasticsearch クラスターへのアクセスに使用するパスワードです。 |
doc_value_scan | いいえ | true | フィールド値のクエリに列指向ストレージ(doc_values)を有効化します。有効化すると、SelectDB は doc_values が有効なフィールドを自動的にクエリし、少数のカラムに対するクエリ性能を大幅に向上させます。 |
keyword_sniff | いいえ | true | Elasticsearch の TEXT フィールドを検出し、対応する KEYWORD フィールドを用いてクエリします。true の場合、SelectDB はトークン化前の完全なフィールド値を一致させます。false の場合、SelectDB はトークン化後の個々の語(term)を一致させます。 |
nodes_discovery | いいえ | true | Elasticsearch ノードの自動検出を有効化します。true の場合、SelectDB は利用可能なすべてのデータノードを検出し接続します。false の場合、SelectDB は hosts で指定された URL を通じてのみノードにアクセスします。Alibaba Cloud Elasticsearch クラスターの場合、URL 経由でのみアクセス可能であるため、必ず false に設定してください。 |
mapping_es_id | いいえ | false | Elasticsearch の _id フィールドを SelectDB のカラムにマップします。プライマリキー値をクエリする必要がある場合は true に設定します。false の場合、クエリで _id フィールドにアクセスできません。 |
like_push_down | いいえ | true | LIKE クエリを Elasticsearch のワイルドカードクエリに変換し、クラスター側へプッシュダウンします。この機能により、特定のシナリオで Elasticsearch クラスターの CPU 使用率が上昇する可能性があります。false に設定すると LIKE プッシュダウンが無効化され、再現率(recall rate)を犠牲にして精度が向上します。 |
include_hidden_index | いいえ | false | クエリ条件に非表示インデックスを含めます。 |
ステップ 3:カタログの確認
SHOW CATALOGS を実行し、カタログが正しく作成されたことを確認します。
SHOW CATALOGS;期待される出力:
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 436009309195 | es_catalog | es | | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 | |
| 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ステップ 4:(任意)Elasticsearch カタログのクエリ
マップされたテーブルを参照するために、外部カタログに切り替えます。
SWITCH es_catalog;es_catalog 内のデータは、内部カタログと同様の方法でクエリおよびアクセスできます。クエリの例については、「Elasticsearch データソース」トピックの「Elasticsearch データソースからのデータのクエリ」セクションをご参照ください。
作業終了後は、内部カタログに戻ります。
SWITCH internal;ステップ 5:送信先データベースの作成
データベースが既に存在する場合は、このステップをスキップしてください。
CREATE DATABASE es_db;送信先データベースに切り替えます。
USE es_db;ステップ 6:送信先テーブルの作成
テーブルを作成する前に、Elasticsearch と SelectDB 間のカラム型マッピングを確認してください。完全な型マッピングのリファレンスについては、「Elasticsearch データソース」トピックの「カラム型マッピング」セクションをご参照ください。
Elasticsearch インデックスのスキーマに合致するカラム型を用いてテーブルを作成します。
CREATE TABLE test_Es2SelectDB
(
`annual_rate` VARCHAR(200),
`describe` TEXT,
`productName` VARCHAR(200)
)
DISTRIBUTED BY HASH(productName) BUCKETS 4
PROPERTIES("replication_num" = "1");ステップ 7:データの移行
INSERT INTO ... SELECT を実行し、Elasticsearch インデックスから SelectDB テーブルへ全レコードをコピーします。
INSERT INTO test_Es2SelectDB SELECT * FROM es_catalog.default_db.product_info;ステップ 8:移行の確認
送信先テーブルをクエリし、データが正しくインポートされたことを確認します。
SELECT * FROM test_Es2SelectDB;増分データの移行
本番環境では、Elasticsearch のデータは通常、既存データ(オフラインデータ)と継続的な増分データの両方を含みます。データの種類に応じて、以下の戦略をご利用ください。
ログデータ
新しいログエントリを、Elasticsearch クラスターと SelectDB インスタンスの両方に同時に書き込みます。SelectDB に十分なデータが蓄積されたら、分析クエリを直接 SelectDB に対して実行します。
トランザクションまたはイベントデータ
SelectDB の Unique key モデルを用いることで、重複排除を自動的に処理できます。増分データを、Elasticsearch クラスターと SelectDB の両方に並列で書き込みます。既存データは、前述のオフライン移行手順で移行します。既存データと増分データのレコードが重複する場合、Unique key モデルはプライマリキーに基づいて重複排除を行うため、手動による競合解決は不要です。
ELK エコシステム互換性
ログ収集において、SelectDB は、ログデータの効率的な収集および処理を実現するためのカスタマイズ・強化版 Filebeat および Logstash プラグインを提供しています。また、データのインポートによるログ収集も可能です。詳細については、以下のトピックをご参照ください。
次のステップ
Elasticsearch データソース — パラメーターの完全なリファレンス、列型マッピング、および述語プッシュダウンの詳細
データレイクハウス — SelectDB における外部カタログの活用方法
IP アドレスホワイトリストの設定 — お客様の SelectDB インスタンスに対するネットワークアクセスの制御