ApsaraDB for SelectDB のデータ移行機能、OSS、または カタログ を使用して、Apache Doris のデータを ApsaraDB for SelectDB に移行します。ビジネス要件に基づいて方法を選択します。
方法の選択
次の表は、利用可能な移行方法とそのユースケースを比較したものです。
|
方法 |
ユースケース |
メリット |
リファレンス |
|
ApsaraDB for SelectDB データ移行機能による移行 (推奨) |
すべてのシナリオに適しています。 |
|
|
|
OSS バケットを使用した移行 |
すでに Alibaba Cloud 上にある大容量データに適しています。 |
|
|
|
カタログを使用した移行 |
データが Alibaba Cloud 上に保存されており、データ量が少ない場合に適しています。 説明
この方法は、Alibaba Cloud E-MapReduce (EMR) クラスターからデータを移行する場合などのシナリオに適しています。 |
|
以降のセクションでは、カタログを使用するか、OSS へのエクスポートおよびインポートによって、Doris から SelectDB にオフラインデータを移行する方法について説明します。
OSS バケットを使用したデータ移行
前提条件
-
OSS の要件:
-
OSS が有効化されていること。 詳細については、「OSS の有効化」をご参照ください。
-
OSS へのアクセスに使用する RAM ユーザーが、OSS オブジェクトに対する読み取りおよび書き込み権限を持っていること。 権限の付与方法の詳細については、「権限とアクセス制御の概要」をご参照ください。
-
-
アカウント要件:
データベースアカウントが作成済みであること。 詳細については、「アカウント管理」をご参照ください。
事前準備
OSS でバケットを作成します。 詳細については、「バケットの作成」をご参照ください。
OSS バケットと ApsaraDB for SelectDB インスタンスが同じリージョンにあることを確認してください。
この例では、バケット名は test-selectdb です。
ステップ 1:ソースデータのエクスポート
-
ソースクラスターにログインします。
セルフマネージド Doris データベースへのログイン方法については、Connecting by MySQL Protocol - Apache Doris をご参照ください。
-
(オプション) サンプルデータを準備します。
移行するデータが既にある場合は、このステップをスキップできます。
-
データベースを作成します。
次のステートメントを実行して、データベースを作成します。
CREATE DATABASE source_db; -
テーブルを作成します。
次のステートメントを実行して、テーブルを作成します。
CREATE TABLE IF NOT EXISTS source_tb ( `c1` int(11) NULL, `c2` string NULL, `c3` bigint NULL ) DISTRIBUTED BY HASH(c1) BUCKETS 20 PROPERTIES("replication_num" = "1"); -
サンプルデータを挿入します。
INSERT INTO source_tb VALUES (1, 'doris', 18), (2, 'nereids', 20), (3, 'pipelibe', 99999), (4, 'Apache', 122123455), (5, null, null); -
データを確認します。
次のステートメントを実行して、サンプルデータを確認します。
SELECT * FROM `source_tb` limit 10;次の結果が返されます。
+--------------+--------------+--------------+ | c1 | c2 | c3 | +--------------+--------------+--------------+ | 1 | doris | 18 | | 3 | pipelibe | 99999 | | 5 | | | | 2 | nereids | 20 | | 4 | Apache | 122123455 | +--------------+--------------+--------------+
-
-
ソーステーブルの
CREATE TABLEステートメントをバックアップします。SHOW CREATE TABLEステートメントを使用すると、対象のテーブルのテーブル作成ステートメントを表示してバックアップできます。以下に例を示します。SHOW CREATE TABLE source_tb ;次の結果が返されます。
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | source_tb | CREATE TABLE `source_tb` ( `c1` int NULL, `c2` text NULL, `c3` bigint NULL ) ENGINE=OLAP DUPLICATE KEY(`c1`) DISTRIBUTED BY HASH(`c1`) BUCKETS 20 PROPERTIES ( "file_cache_ttl_seconds" = "0", "is_being_synced" = "false", "storage_medium" = "hdd", "storage_format" = "V2", "inverted_index_storage_format" = "V2", "light_schema_change" = "true", "disable_auto_compaction" = "false", "enable_single_replica_compaction" = "false", "group_commit_interval_ms" = "10000", "group_commit_data_bytes" = "134217728" ); | +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Rows returned: [1], Time taken: [22ms] -
OSS バケットにデータをエクスポートします。
EXPORTステートメントを実行して、OSS バケットにデータをエクスポートします。構文:
EXPORT TABLE table_name [PARTITION (p1[,p2])] [WHERE] TO export_path [opt_properties] WITH S3 [s3_properties];次の表に、パラメーターを示します。
パラメーター
必須
説明
table_name
はい
データをエクスポートするテーブルの名前。
partition
いいえ
エクスポートするテーブルのパーティションを指定します。
where
いいえ
エクスポートするデータをフィルタリングします。
export_path
はい
エクスポートされたファイルが格納されるパス。
これは、ディレクトリ、または
s3://path/to/my_file_のようなファイルプレフィックス付きのディレクトリです。opt_properties
いいえ
エクスポートジョブのプロパティを指定します。 詳細については、「opt_properties の構文」をご参照ください。
s3_properties
はい
S3 プロトコル関連のプロパティを指定します。 詳細については、「s3_properties の構文」をご参照ください。
opt_properties の構文:
[PROPERTIES ("key"="value", ...)]次のパラメーターを指定できます。
パラメーター
必須
説明
label
いいえ
エクスポートジョブのラベル。 ラベルを指定しない場合、システムは自動的にラベルを生成します。
column_separator
いいえ
エクスポートされるデータの列区切り記号です。
デフォルト値は
\tです。このパラメーターはマルチバイト文字をサポートし、CSV ファイル形式でのみ使用されます。line_delimiter
いいえ
エクスポートされるデータの行区切り記号です。
デフォルトは
\nで、マルチバイト文字に対応しています。このパラメーターは、CSV ファイル形式でのみ使用されます。columns
いいえ
エクスポートするテーブルの列を指定します。
format
いいえ
エクスポートされるデータのファイル形式です。
サポートされている形式:
parquet、orc、csv、csv_with_names、およびcsv_with_names_and_typesです。デフォルトの形式は
csvです。max_file_size
いいえ
エクスポートされる単一ファイルの最大サイズ。 結果セットがこのサイズを超えると、複数のファイルに分割されます。
-
値の範囲:5 MB~2 GB
-
デフォルト値:1 GB
エクスポートファイル形式に ORC を指定した場合 (つまり、format_as パラメーターが ORC の場合)、分割ファイルの実際のサイズは
ceil (max_file_size/64) * 64MB になります。parallelism
いいえ
エクスポートジョブの並列度です。 デフォルト値は 1 です。
エクスポートジョブは、並列度と同じ数のスレッドを開始して
select into outfileステートメントを実行します。(並列度がテーブル内のタブレット数より大きい場合、システムは自動的に並列度をタブレット数に設定します。これは、各select into outfileステートメントが 1 つのタブレットを担当することを意味します)。delete_existing_files
いいえ
宛先パス内のすべてのファイルを削除するかどうかを指定します。
false(デフォルト):宛先パス内のファイルを削除しません。true:
export_pathで指定されたディレクトリ内のすべてのファイルを削除し、そのディレクトリにデータをエクスポートします。 例:-
"file_path" = "/user/tmp"の場合、"/user/"内のすべてのファイルとディレクトリが削除されます。 -
"file_path" = "/user/tmp/"の場合、"/user/tmp/"内のすべてのファイルとディレクトリが削除されます。
警告-
delete_existing_files = trueを指定することは危険な操作です。この設定は、テスト環境でのみ使用することをお勧めします。 -
delete_existing_files パラメーターを使用するには、Alibaba Cloud カスタマーサービスにチケットを起票する必要があります。delete_existing_files パラメーターは、SelectDB 技術チームが fe.conf ファイルに
enable_delete_existing_files = true設定を追加し、FE を再起動した後にのみ有効になります。
with_bom
いいえ
デフォルト値は
falseです。trueに設定すると、エクスポートされたファイルはバイトオーダーマーク (BOM) 付きの UTF-8 でエンコードされます。 このパラメーターは、CSV 関連のファイル形式に対してのみ有効です。timeout
いいえ
エクスポートジョブのタイムアウト期間。 デフォルト値は 2 時間です。 単位:秒。
s3_properties の構文:
("key"="value"[,...])次のパラメーターを指定できます。
パラメーター
必須
説明
s3.endpoint
はい
S3 互換ストレージ宛先のエンドポイント。
この例では、移行に Alibaba Cloud OSS を使用します。 この場合、このパラメーターは OSS データアクセス
エンドポイントです。 エンドポイントを取得するには、「リージョンとエンドポイント」をご参照ください。重要OSS バケットと ApsaraDB for SelectDB インスタンスが同じリージョンにあることを確認してください。
s3.access_key
はい
S3 互換ストレージ宛先の AccessKey ID。
この例では、移行に Alibaba Cloud OSS を使用します。これは、OSS へのアクセスに使用される RAM ユーザーの
AccessKey IDです。s3.secret_key
はい
S3 互換ストレージ宛先の AccessKey シークレット。
この例では移行に Alibaba Cloud OSS を使用しており、これは OSS にアクセスする RAM ユーザーの
AccessKey secretです。s3.region
はい
S3 互換ストレージ宛先のリージョン。
この例では移行に Alibaba Cloud OSS を使用するため、このパラメーターは OSS バケットのリージョンです。 リージョンの取得方法については、「リージョンとエンドポイント」をご参照ください。
use_path_style
いいえ
デフォルトは
falseです。デフォルトでは、S3 SDK は仮想ホスト形式でアクセスします。
ただし、一部のオブジェクトストレージシステムでは、仮想ホスト形式のアクセスをサポートしていない場合があります。その場合、
use_path_styleパラメーターを追加してパス形式のアクセスを強制できます。説明URI は現在、
http://、https://、およびs3://の 3 つのスキームをサポートしています。-
http://またはhttps://を使用する場合、use_path_styleパラメーターは、S3 プロトコルターゲットでパス形式アクセスを使用するかどうかを制御します。 -
s3://を使用すると、S3 ターゲットは仮想ホストスタイルでアクセスされます。
次のコードに例を示します。
EXPORT TABLE source_tb -- source_tb テーブルからデータをエクスポートします。 TO "s3://test-selectdb/test/" -- test-selectdb バケットの test フォルダーにデータをエクスポートします。 PROPERTIES ( "label" = "test_export", -- ジョブのラベル。 "format" = "orc", -- ファイルのストレージ形式は ORC です。 "max_file_size" = '2048MB', -- ファイルを分割するサイズ。 'parallelism' = '10' -- エクスポートの並列度は 10 です。 ) WITH s3 ( "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com", -- OSS バケットにアクセスするための URL。 "s3.region" = "oss-cn-hangzhou", -- OSS バケットのリージョン。 "s3.secret_key"="yourAccessKeySecret", -- OSS にアクセスするための RAM ユーザーの AccessKey シークレット。 "s3.access_key" = "LTAI****************" -- OSS にアクセスするための RAM ユーザーの AccessKey ID。 ); -
-
データがエクスポートされたことを確認します。
次のいずれかの方法でデータのエクスポートを確認できます。
-
ステートメントの実行
Doris に接続されたクライアントで、次のステートメントを実行してエクスポートステータスを確認します。
SHOW export;-
エクスポート成功:
StateがFINISHEDの場合、エクスポートは成功です。 -
エクスポート失敗:結果の
StateがCANCELLEDの場合、データのエクスポートは失敗です。ErrorMsgの情報を使用して、障害のトラブルシューティングを行うことができます。
-
-
OSS コンソールの使用
OSS コンソールにログインし、指定したエクスポートパスに対応するファイルが生成されているか確認します。
-
ステップ 2:データのインポート
-
宛先クラスターにログインします。 詳細については、「DMS を使用した ApsaraDB for SelectDB インスタンスへの接続」をご参照ください。
-
宛先データベースとテーブルを作成します。
-
Create a database.
-
(Optional) Create a database.
If you have a destination database, you can skip this step.
Run the following statement to create a database:
CREATE DATABASE aim_db; -
Create a table.
Run the
CREATE TABLEstatement that you backed up in the export step.The following code provides an example:
CREATE TABLE IF NOT EXISTS aim_tb ( `c1` int(11) NULL, `c2` string NULL, `c3` bigint NULL ) ENGINE=OLAP DUPLICATE KEY(`c1`) DISTRIBUTED BY HASH(c1) BUCKETS 20 PROPERTIES("replication_num" = "1");
-
-
データをインポートします。
S3 load を使用して OSS データを SelectDB にインポートします。
S3 loadの構文とその他の例については、「OSS ロード」をご参照ください。次のコードに例を示します。
LOAD LABEL label_1 -- ジョブの一意の識別子。 カスタム名を指定できます。 ( DATA INFILE("s3://test-selectdb/test/59ab2e9dc4ec4c04-9e50e45a6fda2c8e_0.orc") -- 前のステップでエクスポートされたデータファイルの OSS パス。 INTO TABLE aim_tb -- データのインポート先テーブルの名前。 FORMAT AS ORC -- インポートファイルの形式。エクスポートされたファイル形式と同じである必要があります。 ) WITH S3 ( "AWS_PROVIDER" = "OSS", "AWS_REGION" = "oss-cn-hangzhou", -- OSS バケットのリージョン。 "AWS_ENDPOINT" = "oss-cn-hangzhou-internal.aliyuncs.com", -- OSS バケットにアクセスするための URL。 "AWS_ACCESS_KEY" = "LTAI****************", -- OSS にアクセスするための RAM ユーザーの AccessKey ID。 "AWS_SECRET_KEY"="yourAccessKeySecret" -- OSS にアクセスするための RAM ユーザーの AccessKey シークレット。 ) PROPERTIES ( "timeout" = "3600" -- インポートジョブのタイムアウト期間。 ); -
インポート結果を確認します。
次のいずれかの方法でインポート結果を確認できます。
-
ステートメントの実行
SelectDB に接続されているクライアントで、以下のステートメントを実行してエクスポートのステータスを確認できます。
SHOW load;インポート成功:結果の
StateがFINISHEDの場合、インポートは成功です。 -
宛先テーブルをクエリします。 次のコードに例を示します。
SELECT * FROM `aim_tb` limit 10;次の結果が返されます。
+--------------+--------------+--------------+ | c1 | c2 | c3 | +--------------+--------------+--------------+ | 1 | doris | 18 | | 3 | pipelibe | 99999 | | 5 | | | | 2 | nereids | 20 | | 4 | Apache | 122123455 | +--------------+--------------+--------------+宛先テーブルのデータが「ステップ 1:ソースデータのエクスポート」のソースデータと一致すれば、インポートは成功です。
-
カタログを使用したデータ移行
前提条件
-
Doris インスタンスと SelectDB インスタンス間のネットワーク接続が確保されていること。
-
Doris インスタンスと SelectDB インスタンスは、同じ VPC 内にある必要があります。 異なる VPC にある場合は、まずネットワーク接続の問題を解決する必要があります。 詳細については、「SelectDB インスタンスとデータソース間のネットワーク接続の問題を解決する方法」をご参照ください。
-
Doris インスタンスの IP アドレスが SelectDB のホワイトリストに追加されていること。 詳細については、「ホワイトリストの設定」をご参照ください。
-
Doris インスタンスがホワイトリストを使用している場合は、SelectDB インスタンスの IP アドレス範囲を Doris インスタンスのホワイトリストに追加しておく必要があります。
SelectDBSelectDB インスタンスが属する VPC 内の インスタンスの IP アドレスを取得するには、ApsaraDB SelectDB インスタンスが属する VPC の IP アドレスを表示するにはどうすればよいですか? に記載されている操作を実行できます。
SelectDB インスタンスのパブリック IP アドレスを取得するには、ping コマンドを実行して SelectDB インスタンスのパブリックエンドポイントにアクセスし、インスタンスの IP アドレスを取得します。
-
-
SelectDB のバージョンは、Doris のバージョンを下回ることはできません。
説明SelectDB は Doris をベースに構築されたクラウドネイティブなリアルタイムデータウェアハウスです。 両者のバージョンの関係については、「カーネルリリースノート」をご参照ください。
-
カタログとその基本的な操作に精通していること。 詳細については、「データレイクハウス」をご参照ください。
サンプル環境
この例では、Doris の doris_db データベースの doris_t テーブルから、SelectDB の test_db データベースの test_doris2SelectDB テーブルにデータを移行します。 実際の要件に基づいてパラメーターを変更してください。 サンプル環境は次のとおりです:
-
移行先データベース:
test_db -
移行先テーブル:
test_doris2SelectDB -
移行元データベース:
doris_db -
移行元テーブル:
doris_t
ソースデータの準備
移行元の Doris データベースにログインし、次の操作を実行してください:
-
データベースを作成します。
CREATE DATABASE doris_db; -
テーブルを作成します。
CREATE TABLE doris_t ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1"); -
データを挿入します。
INSERT INTO doris_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
操作手順
-
SelectDB インスタンスに接続します。 詳細については、「MySQL クライアントを使用したクラウドデータベース SelectDB インスタンスへの接続」をご参照ください。
-
Doris データベース用の JDBC カタログを作成します。
CREATE CATALOG doris_catalog PROPERTIES ( "type"="jdbc", "user"="root", "password"="123456", "jdbc_url" = "jdbc:mysql://127.0.0.1:9030/doris_db", "driver_url" = "mysql-connector-java-8.0.25.jar", "driver_class" = "com.mysql.cj.jdbc.Driver" )パラメーター
必須
デフォルト
説明
user
はい
なし
Doris データベースアカウントのユーザー名。
password
はい
なし
Doris データベースアカウントのパスワード。
jdbc_url
はい
なし
JDBC 接続文字列。Doris データベースの接続アドレスを含める必要があります。
フォーマット:
jdbc:mysql://<host>:<port>/<database>-
host:Doris データベースの IP アドレス。 -
port:Doris データベースのポート番号。 -
database:アクセスするデータベースの名前。
例:
jdbc:mysql://127.0.0.1:9030/doris_dbdriver_url
はい
なし
JDBC ドライバーの JAR ファイル名。
説明-
mysql-connector-java-8.0.25.jarの使用を推奨します。 -
別の JAR ファイルを使用する場合は、サポートチケットを起票してください。
driver_class
はい
なし
JDBC ドライバーのクラス名。
推奨設定は
com.mysql.cj.jdbc.Driverです。lower_case_table_names
説明このパラメーターは、バージョン 4.0 で
lower_case_meta_namesに名前が変更されました。いいえ
"false"
外部 JDBC データソースからデータベース名とテーブル名を小文字に同期するかどうかを指定します。
true:リモートシステムの実際の名前への小文字名のマッピングを維持することで、小文字以外の名前を持つデータベースやテーブルをクエリできます。 この場合、データベース名、テーブル名、列名はすべて小文字に変換されます。false:小文字以外の名前を持つデータベースやテーブルをクエリできません。重要-
SelectDB 3.0 の場合:
-
FE の
lower_case_table_namesパラメーターが1または2に設定されている場合、カタログのlower_case_table_namesパラメーターはtrueに設定する必要があります。 -
FE の
lower_case_table_namesパラメーターが0に設定されている場合、カタログのパラメーターはtrueまたはfalseに設定できます。
-
-
SelectDB 4.0 の場合:
-
FE の
lower_case_table_namesパラメーターが0または2に設定されている場合、データベース名、テーブル名、列名は変換されません。 -
FE の
lower_case_table_namesパラメーターが1に設定されている場合、テーブル名は小文字に変換されますが、データベース名と列名は変換されません。
-
only_specified_database
いいえ
"false"
指定したデータベースのみを同期するかどうかを指定します。
true:JDBC URL で指定されたデータベースのみを同期します。false:JDBC URL を介してアクセス可能なすべてのデータベースを同期します。include_database_list
いいえ
""
only_specified_database=falseの場合、同期するデータベースを 1 つ以上、カンマ区切りで指定します。 データベース名では大文字と小文字が区別されます。exclude_database_list
いいえ
""
only_specified_database=falseの場合、同期から除外するデータベースをカンマ区切りで指定します。 データベース名では大文字と小文字が区別されます。meta_names_mapping
いいえ
""
外部データソースに DORIS と doris のように大文字と小文字以外は同一の名前が存在する場合、Doris はカタログのクエリ時にあいまいさのためにエラーを報告します。 この競合を解決するには、
meta_names_mappingパラメーターを設定します。詳細については、「小文字名の同期」をご参照ください。
重要このパラメーターは、SelectDB バージョン 4.0 にのみ適用されます。
-
-
カタログを表示します。
SHOW CATALOGS; -- カタログが正常に作成されたかどうかを確認します。次の結果が返されます:
+--------------+--------------+----------+-----------+-------------------------+-------------------------+------------------------+ | CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment | +--------------+--------------+----------+-----------+-------------------------+-------------------------+------------------------+ | 436009309195 | doris_catalog | jdbc | | 2024-08-06 17:09:08.058 | 2024-08-06 17:09:08.058 | | | 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal カタログ | +--------------+--------------+----------+-----------+-------------------------+-------------------------+------------------------+ -
(オプション) 外部カタログ
doris_catalogに切り替えます。internal カタログのデータにアクセスするのと同じ方法で、外部カタログ
doris_catalogのデータを表示およびアクセスできます。説明現在、ApsaraDB for SelectDB は外部カタログ内のデータに対する読み取り操作のみをサポートしています。
SWITCH doris_catalog; -
(オプション) internal カタログに切り替えます。
ステップ 4 を実行しなかった場合は、このステップをスキップしてください。
SWITCH internal; -
(オプション) データベースを作成します。
移行先のデータベースが既にある場合は、このステップをスキップできます。
CREATE database test_db; -
移行先データベースに切り替えます。
USE test_db; -
テーブルを作成します。
移行先テーブルが存在する場合は、その列データ型が移行元テーブルのデータ型と正しくマッピングされていることを確認してください。
移行先テーブルがない場合は、テーブルを作成する際に、列データ型が Doris の移行元テーブルと正しくマッピングされていることを確認してください。
列のデータ型のマッピングの詳細については、「データ型のマッピング」をご参照ください。
CREATE TABLE test_doris2SelectDB ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1"); -
データを移行します。
INSERT INTO test_doris2SelectDB SELECT * FROM doris_catalog.doris_db.doris_t; -
データインポートを検証します。
SELECT * FROM test_doris2SelectDB;
増分データの移行
本番環境では、Doris のデータにはオフラインデータと増分データが含まれます。クエリを高速化するために増分データを SelectDB へ移行するには、次の方法があります。
-
Doris データの生成と並行して、データのコピーを SelectDB に書き込むことができます。
-
定期的なジョブを使用して Doris からパーティション化されたデータを読み取り、SelectDB に書き込むことができます。