このトピックでは、カタログを使用して、Elasticsearch クラスターから ApsaraDB for SelectDB インスタンスにオフラインデータを移行する方法について説明します。
前提条件
Elasticsearch クラスター内のすべてのノードが SelectDB インスタンスに接続されていること。
Elasticsearch クラスター内のすべてのノードが、SelectDB インスタンスと同じ VPC(仮想プライベートクラウド)内に存在すること。 データソースクラスター内のノードが異なる VPC に存在する場合は、ノードを SelectDB インスタンスに接続する必要があります。 詳細については、「ApsaraDB for SelectDB インスタンスとデータソース間の接続を確立できない場合はどうすればよいですか?」をご参照ください。
Elasticsearch クラスター内のすべてのノードの IP アドレスが、SelectDB インスタンスの IP アドレスホワイトリストに追加されていること。 詳細については、「IP アドレスホワイトリストを設定する」をご参照ください。
SelectDB インスタンスが存在する VPC 内の IP アドレスが、Elasticsearch クラスターの IP アドレスホワイトリストに追加されていること(Elasticsearch クラスターでホワイトリストメカニズムがサポートされている場合)。
SelectDB インスタンスが属する VPC 内の SelectDB インスタンスの IP アドレスを取得するには、「ApsaraDB SelectDB インスタンスが属する VPC 内の IP アドレスを確認するにはどうすればよいですか。」で説明されている操作を実行できます。
SelectDB インスタンスのパブリック IP アドレスを取得するには、ping コマンドを実行して SelectDB インスタンスのパブリック IP アドレスに ping を実行します。
カタログに関する基本的な知識があり、カタログで実行できる操作を理解していること。 詳細については、「データレイクハウス」をご参照ください。
サンプル環境
この例では、Elasticsearch クラスターの product_info インデックスから、es_db という名前の SelectDB データベース内の test_es2SelectDB テーブルにデータが移行されます。 ビジネス要件に基づいて、対応するパラメーターを変更できます。 サンプル環境:
ターゲットデータベース:es_db
ターゲットテーブル:test_es2SelectDB
データソース:Elasticsearch クラスターの product_info インデックス
サンプルのソースデータを準備する
詳細については、「はじめに」をご参照ください。
手順
SelectDB インスタンスに接続します。 詳細については、「インスタンスに接続する」をご参照ください。
Elasticsearch クラスターのカタログを作成します。
説明Elasticsearch クラスターのカタログを作成すると、システムはカタログ内に
default_dbという名前のデータベースを自動的に生成します。 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。 このパラメーターは、Elasticsearch クラスターの Server Load Balancer(SLB)インスタンスの URL に設定できます。
形式:http://<IP アドレス>:<ポート番号>。
user
いいえ
デフォルト値なし
Elasticsearch クラスターにアクセスするために使用されるアカウント。
password
いいえ
デフォルト値なし
Elasticsearch クラスターにアクセスするために使用されるパスワード。
doc_value_scan
いいえ
true
フィールド値をクエリするために、Elasticsearch または Apache Lucene の列指向ストレージ機能を有効にするかどうかを指定します。 有効な値:
説明ApsaraDB for SelectDB はこの機能を使用して、クエリ対象のフィールドに対して列指向ストレージが有効になっているかどうかを自動的にチェックし、列指向ストレージが有効になっているすべてのフィールドの値をクエリできます。 少数の列のみをクエリしようとする場合、この機能はクエリのパフォーマンスを大幅に向上させます。
true
false
keyword_sniff
いいえ
true
Elasticsearch 内の TEXT タイプのフィールドを検出し、対応する KEYWORD フィールドを使用してクエリを実行するかどうかを指定します。 有効な値:
true:システムは、TEXT タイプのフィールドの値全体が term にトークン化される前に、値全体を照合します。
false:システムは、TEXT タイプのフィールドの値がトークン化された後に生成される個々の term と照合します。
nodes_discovery
いいえ
true
Elasticsearch のノード検出機能を有効にするかどうかを指定します。 有効な値:
true:ApsaraDB for SelectDB が Elasticsearch クラスター内のすべての使用可能なデータノードを検出し、データノードに接続できるようにします。
false:ApsaraDB for SelectDB が Elasticsearch クラスター内のすべての使用可能なデータノードにアクセスすることを許可しません。 ApsaraDB for SelectDB は、Elasticsearch クラスターの URL を使用することによってのみデータノードにアクセスできます。
重要Alibaba Cloud Elasticsearch クラスターには、URL を使用することによってのみアクセスできます。 データソースが Alibaba Cloud Elasticsearch クラスターの場合は、このパラメーターを false に設定する必要があります。
mapping_es_id
いいえ
false
Elasticsearch インデックスでプライマリキーとして指定されている
_idフィールドをマッピングするかどうかを指定します。 有効な値:インデックスのプライマリキーが Elasticsearch によって自動的に指定される場合は、このパラメーターを true に設定する必要があります。説明_idフィールドをプライマリキーとして指定しない場合、Elasticsearch は各ファイルにグローバルに一意のプライマリキー_idを割り当てます。true:フィールドをマッピングします。 この場合、フィールドの値をクエリできます。
false:フィールドをマッピングしません。 この場合、フィールドの値をクエリできません。
like_push_down
いいえ
true
LIKE クエリをワイルドカードクエリに変換し、Elasticsearch クラスターにプッシュダウンするかどうかを指定します。 有効な値:
true:LIKE クエリをワイルドカードクエリに変換します。
説明これにより、Elasticsearch クラスターの CPU 消費量が増加し、特定のシナリオでクエリのパフォーマンスが低下する可能性があります。
高い精度よりも高い再現率を優先する場合は、このパラメーターを true に設定できます。
false:LIKE クエリをワイルドカードクエリに変換しません。
include_hidden_index
いいえ
false
クエリ条件に非表示のインデックスを含めるかどうかを指定します。 有効な値:
false
true
カタログをクエリします。
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 | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+オプション。 es_catalog 外部カタログに切り替えます。
es_catalog 外部カタログのデータを、内部カタログのデータをクエリおよびアクセスするのと同じ方法でクエリおよびアクセスできます。 クエリの詳細については、「Elasticsearch データソース」トピックの「Elasticsearch データソースからデータをクエリする」セクションをご参照ください。
説明ApsaraDB for SelectDB は、外部カタログのデータのみを読み取ることができます。
SWITCH es_catalog;オプション。 内部カタログに切り替えます。
手順 4 を実行しない場合は、この手順をスキップします。
SWITCH internal;オプション。 ターゲットデータベースを作成します。
ターゲットデータベースをすでに作成している場合は、この手順をスキップします。
CREATE database es_db;ターゲットデータベースに切り替えます。
USE es_db;ターゲットテーブルを作成します。
ターゲットテーブルをすでに作成している場合は、ターゲットテーブルの列のデータ型が Elasticsearch クラスターのソーステーブルのデータ型にマッピングされているかどうかを確認します。列タイプのマッピング
ターゲットテーブルをまだ作成していない場合は、ターゲットテーブルの列のデータ型が 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");データを移行します。
INSERT INTO test_Es2SelectDB SELECT * FROM es_catalog.default_db.product_info;ターゲットテーブルにインポートされたデータをクエリします。
SELECT * FROM test_Es2SelectDB;
増分データを移行する
実際の運用環境では、Elasticsearch データは主にオフラインデータと増分データに分けられます。 増分データを移行するには、次の移行ソリューションを参照してください。
ログを移行する場合、データ分析のために最近のログのみを保持したい場合は、ログデータを Elasticsearch クラスターと SelectDB インスタンスに書き込み、分析に十分な量のログデータが蓄積されるまでログデータを蓄積できます。
増分データをクエリするには、SelectDB が提供する一意キーモデルを使用して、増分データを Elasticsearch クラスターと SelectDB インスタンスに書き込むことができます。 既存データを移行するのと同じ方法で既存データを移行できます。 移行中に既存データと増分データが重複する場合は、一意キーモデルがプライマリキーに基づいて重複を自動的に削除し、データの一意性を確保します。
ELK との互換性
SelectDB は、カスタマイズされた拡張 Filebeat および Logstash プラグインを提供して、ログデータを効率的に収集および処理します。 また、データをインポートすることでログデータを収集することもできます。 詳細については、以下のトピックをご参照ください。