このトピックでは、AnalyticDB for MySQL data Lakehouse Edition (V3.0) でTablestoreデータをクエリおよびインポートする方法について説明します。
前提条件
AnalyticDB for MySQL Data Lakehouse Edition (V3.0) クラスターが作成されます。 詳細については、「クラスターの作成」をご参照ください。
説明作成されたTablestoreインスタンスに仮想プライベートクラウド (VPC) がバインドされている場合は、AnalyticDB for MySQLクラスターが同じVPCに作成されていることを確認してください。
背景情報
Tablestoreインスタンスは、Tablestoreのテーブルとデータを管理するために使用されるエンティティです。 各インスタンスはデータベースに相当します。 Tablestoreインスタンスは、AnalyticDB for MySQLスキーマまたはデータベースに対応します。 TablestoreインスタンスにバインドされているVPCがない場合、AnalyticDB for MySQLからTablestoreデータに直接アクセスできます。 VPCがTablestoreインスタンスにバインドされている場合は、AnalyticDB for MySQLクラスターが同じVPCに作成されていることを確認します。
サンプルデータ
この例では、person
という名前のテーブルがTablestoreに作成され、4つのエントリがテーブルに挿入されます。 ソースデータを作成した場合は、この手順をスキップします。
id (主キー) | name | 年齢 |
1 | ジェームズ | 10 |
2 | ボンド | 20 |
3 | ジャック | 30 |
4 | ルーシー | 40 |
手順
- SQLエディターに移動します。
- AnalyticDB for MySQLコンソールにログインします。
- ページの左上隅で、クラスターが存在するリージョンを選択します。
- 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
- Lake Warehouse Edition(3.0) タブでクラスターを見つけ、クラスター ID をクリックします。
- 左側のナビゲーションウィンドウで、 を選択します。
外部データベースを作成します。
この例では、
adb_external_db
という名前のデータベースが作成されます。 例:外部データベースadb_external_dbを作成します。
外部テーブルを作成します。
説明AnalyticDB for MySQL外部テーブルは、Tablestoreテーブルと同じ名前、数量、およびフィールドの順序を持つ必要があります。 フィールドのデータ型は、2つのテーブル間で互換性がある必要があります。 データ型マッピングの詳細については、このトピックの「データ型マッピング」を参照してください。
この例では、
adb_external_db.personが存在しない場合はadb_external_db
データベースにperson
という名前のテーブルが作成されます。 例:外部テーブルを作成します ( id int, 名前文字列, 年齢int ) エンジン='OTS' TABLE_PROPERTIES = '{ "mapped_name":"person" 、"location":"https:// w0 **** la.cn-hangzhou.vpc.tablestore.aliyuncs.com" } '
パラメーター
説明
エンジン='OTS'
外部テーブルのストレージエンジン。 Tablestoreデータを読み書きするには、ストレージエンジンをOTSに設定します。
mapped_name
Tablestoreインスタンスのテーブルの名前。 テーブル名を表示するには、Tablestoreコンソールにログインし、[すべてのインスタンス] ページに移動します。
場所
TablestoreインスタンスのVPC URL。 VPC URLを表示するには、Tablestoreコンソールにログインし、[すべてのインスタンス] ページに移動します。
外部テーブルが作成されると、AnalyticDB for MySQLはTablestoreテーブルのデータをAnalyticDB for MySQLテーブルに自動的にマップします。 AnalyticDB for MySQLで次のSELECTステートメントを実行して、Tablestoreインスタンスの
person
テーブルのデータを照会します。adb_external_db.personから * を選択します。
次の情報が返されます。
+ ------ ------- -------- | id | 名前 | 年齢 | + ----- + ------- + ------- + | 1 | ジェームズ | 10 | | 2 | ボンド | 20 | | 3 | ジャック | 30 | | 4 | ルーシー | 40 | + ----- + ------- + ------- + セットの4列 (0.35秒)
次の手順を実行して、TablestoreからAnalyticDB for MySQLにデータをインポートします。
でデータベースを作成します。AnalyticDB for MySQL.
CREATE DATABASE adb_demo;
AnalyticDB for MySQLにテーブルを作成し、Tablestoreからインポートしたデータを保存します。
adb_demo.adb_import_testが存在しない場合は説明作成されたテーブルは、手順3で作成された外部テーブルと同じ数と順序のフィールドを使用する必要があります。 フィールドのデータ型は、2つのテーブル間で互換性がある必要があります。
テーブルを作成します ( id int, 名前文字列, 年齢int ) ハッシュによる分配 (id);
テーブルにデータを書き込みます。
方法1: INSERT INTOステートメントを実行してデータをインポートします。 主キーの値が重複している場合、データは繰り返し挿入されず、INSERT INTOステートメントは
INSERT IGNORE INTO
ステートメントと同等です。 詳細については、「INSERT INTO」をご参照ください。adb_demo.adb_import_testに挿入する SELECT * からadb_external_db.person;
SELECTステートメントを実行して、テーブルに書き込まれたデータを照会します。
adb_demo.adb_import_testから * を選択します。
次の情報が返されます。
+ ------ ------- -------- | id | 名前 | 年齢 | + ----- + ------- + ------- + | 1 | ジェームズ | 10 | | 2 | ボンド | 20 | | 3 | ジャック | 30 | | 4 | ルーシー | 40 | + ----- + ------- + ------- +
方法2: INSERT OVERWRITEステートメントを実行してデータをインポートします。 主キーの値が重複している場合、元の値は新しい値で上書きされます。
INSERT OVERWRITE adb_demo.adb_import_test SELECT * からadb_external_db.person;
方法3: INSERT OVERWRITE INTOステートメントを非同期的に実行してデータをインポートします。 ほとんどの場合、
ジョブ送信
は非同期ジョブの送信に使用されます。 ジョブを高速化するために、データインポートステートメントの前にヒント (/* + direct_batch_load=true */
) を追加できます。 詳細については、「INSERT OVERWRITE SELECT」トピックの「非同期書き込み」セクションをご参照ください。ジョブを送信 INSERT OVERWRITE adb_demo.adb_import_test SELECT * からadb_external_db.person;
次の情報が返されます。
+ --------------------------------------- + | job_id | + --------------------------------------- + | 2020112122202917203100908203303 ****** |
非同期ジョブの送信方法については、「インポートジョブの非同期送信」をご参照ください。
データ型マッピング
次の表に、TablestoreとAnalyticDB for MySQLの間のデータ型マッピングを示します。
Tablestoreでサポートされるデータ型 | AnalyticDB for MySQLでサポートされるデータ型 |
INTEGER (8バイト) | BIGINT (8バイト) |
STRING | VARCHAR |
BINARY | BINARY |
DOUBLE | DOUBLE |
BOOLEAN | BOOLEAN |