Object Storage Service (OSS) またはカタログを使用して、Apache Doris データベースから ApsaraDB for SelectDB インスタンスにデータを移行できます。ビジネスシナリオに基づいて移行方法を選択できます。このトピックでは、Apache Doris データベースから ApsaraDB for SelectDB インスタンスにオフラインデータを移行する方法について説明し、方法を選択するためのルールを提供します。
方法の選択
ビジネスシナリオに基づいてデータ移行方法を選択します。次の表に、利用可能な方法とそのユースケースを示します。
方法 | シナリオ | 理由 | 操作 |
OSS を介したエクスポートとインポート | データは Alibaba Cloud プラットフォームに保存されており、データ量が大きいです。 |
| |
カタログ | データは Alibaba Cloud プラットフォームに保存されており、データ量が小さいです。 説明 これには、Alibaba Cloud EMR クラスター内のデータなどのシナリオが含まれます。 |
|
このトピックでは、OSS バケットまたはカタログを使用して、Doris データベースから SelectDB にオフラインデータを移行する方法について説明します。
OSS バケットを使用したデータ移行
前提条件
OSS の要件
OSS が有効化されていること。詳細については、「OSS の有効化」をご参照ください。
OSS へのアクセスに使用する RAM ユーザーが、OSS オブジェクトに対する読み取りおよび書き込み権限を持っていること。詳細については、「権限とアクセスの制御」をご参照ください。
クラスターの要件
データベースアカウントが作成されていること。詳細については、「アカウント管理」をご参照ください。
準備
OSS コンソールでバケットを作成します。詳細については、「コンソールでのバケットの作成」をご参照ください。
OSS バケットと ApsaraDB for SelectDB インスタンスが同じリージョンにあることを確認してください。
このトピックでは、バケット名は `test-selectdb` です。
ステップ 1: ソースデータのエクスポート
ソースクラスターにログインします。
自己管理型 Doris データベースへのログイン方法の詳細については、「MySQL プロトコルによる接続 - 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文を実行して、ソーステーブルの `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 elapsed: [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 サポートにチケットを送信してください。SelectDB 技術チームは、
enable_delete_existing_files = true構成を fe.conf ファイルに追加し、FE を再起動します。delete_existing_files パラメーターは、再起動後にのみ有効になります。
with_bom
いいえ
デフォルト値は false です。true に設定すると、エクスポートされたファイルは、BOM (Bill of Materials) 付きの UTF-8 でエンコードされます。これは、CSV 関連のファイル形式でのみ有効です。
timeout
いいえ
エクスポートジョブのタイムアウト期間。デフォルト値は 2 時間です。単位は秒です。
次のコードに `s3_properties` の構文を示します。
("key"="value"[,...])次の表にパラメーターを示します。
パラメーター
必須
説明
s3.endpoint
はい
S3 プロトコルを使用する宛先のエンドポイント。
このトピックでは、移行に Alibaba Cloud OSS を使用します。このパラメーターは、OSS データへのアクセスに使用される
エンドポイントです。エンドポイントの取得方法の詳細については、「OSS のリージョンとエンドポイント」をご参照ください。重要OSS バケットと ApsaraDB for SelectDB インスタンスが同じリージョンにあることを確認してください。
s3.access_key
はい
S3 プロトコルを使用する宛先のユーザー ID キー。
このトピックでは、移行に Alibaba Cloud OSS を使用します。このパラメーターは、OSS へのアクセスに使用される RAM ユーザーの
AccessKey IDです。s3.secret_key
はい
S3 プロトコルを使用する宛先のユーザー認証文字列。
このトピックでは、移行に Alibaba Cloud OSS を使用します。このパラメーターは、OSS へのアクセスに使用される RAM ユーザーの
AccessKey Secretです。s3.region
はい
S3 プロトコルを使用する宛先のリージョン。
このトピックでは、移行に Alibaba Cloud OSS を使用します。このパラメーターは、Alibaba Cloud OSS バケットのリージョンです。リージョンの取得方法の詳細については、「OSS のリージョンとエンドポイント」をご参照ください。
use_path_style
いいえ
デフォルト値は
falseです。S3 SDK はデフォルトで仮想ホストスタイルを使用します。
一部のオブジェクトストレージシステムでは、仮想ホストスタイルのアクセスが有効になっていないか、サポートされていない場合があります。
use_path_styleパラメーターを追加して、パススタイルを強制的に使用できます。説明現在、
http://、https://、s3://の 3 つの URI スキーマがサポートされています。http://またはhttps://を使用する場合、システムはuse_path_styleパラメーターに基づいて、S3 プロトコルの宛先にアクセスするためにパススタイルを使用するかどうかを決定します。s3://を使用する場合、システムは仮想ホストスタイルを使用して S3 プロトコルの宛先にアクセスします。
次のコードに例を示します。
EXPORT TABLE source_tb -- source_tb テーブルからデータをエクスポートします。 TO "s3://test-selectdb/test/" -- test-selectdb という名前の OSS バケット内の 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 Secret。 "s3.access_key" = "LTAI****************" -- OSS にアクセスするための RAM ユーザーの AccessKey ID。 );データがエクスポートされたことを確認します。
次の 2 つの方法のいずれかを使用して、データのエクスポートステータスを確認できます。
コマンドを実行してステータスを確認します。
Doris に接続されているクライアントで、次の文を実行してエクスポートステータスを確認します。
SHOW export;エクスポート成功: 結果の `State` が `FINISHED` の場合、データのエクスポートは成功です。
エクスポート失敗: 結果の `State` が `CANCELLED` の場合、データのエクスポートは失敗です。`ErrorMsg` フィールドを確認して、失敗のトラブルシューティングを行うことができます。
OSS コンソールでステータスを確認します。
OSS コンソールにログインし、指定されたエクスポートパスにファイルが生成されているかどうかを確認します。
ステップ 2: 宛先テーブルへのデータのインポート
宛先クラスターにログインします。詳細については、「DMS を使用した ApsaraDB for SelectDB インスタンスへの接続」をご参照ください。
宛先テーブルを作成します。
データベースを作成します。
任意: データベースを作成します。
宛先データベースが既に存在する場合は、このステップをスキップできます。
次の文を実行してデータベースを作成します。
CREATE DATABASE aim_db;テーブルを作成します。
ソーステーブルからバックアップした `CREATE TABLE` 文を実行します。
次のコードに、このトピックで使用する `CREATE TABLE` 文を示します。
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」をご参照ください。次のコードに例を示します。
LOAD LABEL label_1 -- labelname: ジョブの一意のランダムな識別子 ( 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 Secret。 ) PROPERTIES ( "timeout" = "3600" -- インポートのタイムアウト期間。 );インポートを確認します。
次の 2 つの方法のいずれかを使用して、インポート結果を確認できます。
コマンドを実行してステータスを確認します。
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 インスタンスの IP アドレスホワイトリストに追加されていること。詳細については、「ホワイトリストの設定」をご参照ください。
Doris インスタンスにホワイトリストがある場合、SelectDB インスタンスが存在するネットワークセグメントの IP アドレスを Doris インスタンスのホワイトリストに追加する必要があります。
SelectDB インスタンスが属する VPC 内の SelectDB インスタンスの 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 クライアントを使用した ApsaraDB for 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=trueの場合、同期する複数のデータベースをコンマ (,) で区切って指定します。データベース名では大文字と小文字が区別されます。exclude_database_list
いいえ
""
only_specified_database=trueの場合、同期しない複数のデータベースをコンマ (,) で区切って指定します。データベース名では大文字と小文字が区別されます。meta_names_mapping
いいえ
""
外部データソースに DORIS と doris のように大文字と小文字のみが異なる名前のオブジェクトがある場合、カタログをクエリするとあいまいさのためにエラーが報告されます。この場合、
meta_names_mappingパラメーターを構成して競合を解決します。詳細については、「大文字と小文字の区別の設定」をご参照ください。
重要このパラメーターは SelectDB 4.0 にのみ適用されます。
カタログを表示します。
SHOW CATALOGS; -- CATALOG が正常に作成されたかどうかを確認します。次の結果が返されます。
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | 436009309195 | doris_catalog | jdbc | | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 | | | 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+任意: `doris_catalog` 外部カタログに切り替えます。
`doris_catalog` 外部カタログのデータは、内部カタログのデータにアクセスするのと同じ方法で表示およびアクセスできます。
説明現在、ApsaraDB for SelectDB は外部カタログのデータに対する読み取り操作のみをサポートしています。
SWITCH doris_catalog;任意: 内部カタログに切り替えます。
ステップ 4 を実行しなかった場合は、このステップをスキップできます。
SWITCH internal;任意: データベースを作成します。
宛先データベースが既に存在する場合は、このステップをスキップできます。
CREATE database test_db;宛先データベースに切り替えます。
USE test_db;テーブルを作成します。
宛先テーブルが既に存在する場合、宛先テーブルの列のデータ型が Doris ソーステーブルの列のデータ型に対応しているかどうかを確認します。
宛先テーブルが存在しない場合は、テーブルを作成するときに、宛先テーブルの列のデータ型が 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 データはオフラインデータと増分データで構成されます。データは通常、データウェアハウジングとクエリの高速化のために Doris から SelectDB に移行されるため、増分データ移行には次の 2 つの方法のいずれかを使用できます。
Doris インスタンスにデータを書き込むときに、データのコピーを SelectDB インスタンスに並行して書き込みます。
定期的なジョブを使用して、Doris インスタンスからパーティション分割されたデータを読み取り、そのデータを SelectDB インスタンスに書き込みます。