AnalyticDB for MySQL Data Lakehouse Editionでは、外部テーブルを使用してデータにアクセスし、インポートできます。 通常のインポートまたはエラスティックインポート方法を使用してデータをインポートできます。 通常のインポート方法と比較して、エラスティックインポート方法は、消費するリソースが少なく、リアルタイムのデータの読み取りと書き込みへの影響を軽減します。 このトピックでは、外部テーブルを使用してObject Storage Service (OSS) データを照会し、OSSからAnalyticDB for MySQLにデータをインポートする方法について説明します。
前提条件
AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。
OSSバケットは、AnalyticDB for MySQLクラスターと同じリージョンに作成されます。
データがOSSディレクトリにアップロードされます。 詳細については、「オブジェクトのアップロード」をご参照ください。
サンプルデータ
この例では、person
オブジェクトはOSSのtestBucketName/adb/dt=2023-06-15
ディレクトリにアップロードされます。 改行は行区切り文字として使用され、コンマ (,) は列区切り文字として使用されます。 person
オブジェクトのサンプルデータ:
1,james,10,2023-06-15
2,bond,20,2023-06-15
3,jack,30,2023-06-15
4,lucy,40,2023-06-15
手順
SQLエディターに移動します。
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 [Data Lakehouse Edition] タブで、管理するクラスターを見つけ、クラスターIDをクリックします。
左側のナビゲーションウィンドウで、 .
データをインポートする。
通常のインポートまたはエラスティックインポート方法を使用してデータをインポートできます。 デフォルトでは、通常のインポート方法が使用されます。 通常のインポート方法を使用する場合、データは計算ノードから読み取られ、インデックスはストレージノードに作成されます。 通常のインポート方法は、コンピューティングリソースとストレージリソースを消費します。 elastic importメソッドを使用すると、Serverless Sparkジョブのデータが読み取られ、インデックスが作成されます。 エラスティックインポート方式は、ジョブリソースグループのリソースを消費します。 ジョブリソースグループを持つAnalyticDB for MySQL Data Lakehouse EditionのV3.1.10.0以降のクラスターのみが、elastic importメソッドをサポートしています。 詳細については、「データインポート方法」をご参照ください。
定期的なインポート
外部データベースを作成します。
CREATE EXTERNAL DATABASE adb_external_db;
CREATE EXTERNAL TABLEステートメントを使用して、
adb_external_db
データベースにOSS外部テーブルを作成します。 この例では、外部テーブルの名前はadb_external_db.personです。説明AnalyticDB for MySQLのOSS外部テーブルは、OSSオブジェクトと同じフィールドの名前、番号、順序、およびデータ型を使用する必要があります。
パーティション化されていないOSS外部テーブルの作成
パーティション化されたOSS外部テーブルの作成
構文の詳細については、「CREATE EXTERNAL TABLE」をご参照ください。
データの照会
外部テーブルを作成した後、AnalyticDB for MySQLでSELECTステートメントを実行して、外部テーブルのデータをクエリできます。
SELECT * FROM adb_external_db.person;
サンプル結果:
+------+-------+------+-----------+ | id | name | age | dt | +------+-------+------+-----------+ | 1 | james | 10 |2023-06-15 | | 2 | bond | 20 |2023-06-15 | | 3 | jack | 30 |2023-06-15 | | 4 | lucy | 40 |2023-06-15 | +------+-------+------+-----------+ 4 rows in set (0.35 sec)
AnalyticDB for MySQLクラスターにデータベースとテーブルを作成します。 詳細については、「CREATE DATABASE」および「AnalyticDB for MySQL」をご参照ください。 すでにデータベースを作成している場合は、この手順をスキップしてください。
CREATE DATABASE adb_demo;
AnalyticDB for MySQLクラスターにテーブルを作成し、OSSからインポートされたデータを保存します。
説明作成した内部テーブルは、手順bで作成した外部テーブルと同じフィールド名、番号、順序、およびデータ型を使用する必要があります。
adb_demo.adb_import_testが存在しない場合は
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test( id INT, name VARCHAR(1023), age INT, dt VARCHAR(1023) ) DISTRIBUTE BY HASH(id);
テーブルにデータをインポートします。
方法1:
INSERT INTO
ステートメントを実行してデータをインポートします。 主キーの値が重複している場合、データは繰り返し挿入されず、INSERT INTOステートメントはINSERT IGNORE INTO
と同等です。 詳細については、「INSERT INTO」をご参照ください。INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
方法2:
INSERT OVERWRITE INTO
ステートメントを実行して、データを同期的にインポートします。 主キーの値が重複している場合、元の値は新しい値で上書きされます。INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
方法3:
INSERT OVERWRITE INTO
ステートメントを実行して、データを非同期的にインポートします。 詳細については、「INSERT OVERWRITE SELECT」トピックの「非同期書き込み」セクションをご参照ください。SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
Elastic import
データベースを作成します。 データベースを作成した場合は、この手順をスキップしてください。
CREATE DATABASE adb_demo;
OSS外部テーブルを作成します。
説明AnalyticDB for MySQLのOSS外部テーブルは、OSSオブジェクトと同じフィールドの名前、番号、順序、およびデータ型を使用する必要があります。
エラスティックインポートメソッドでは、
create TABLE
ステートメントを使用してのみ外部テーブルを作成できます。
CREATE TABLE oss_import_test_external_table ( id INT(1023), name VARCHAR(1023), age INT, dt VARCHAR(1023) ) ENGINE='OSS' TABLE_PROPERTIES='{ "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com", "url":"oss://<bucket-name>/adb/oss_import_test_data.csv", "accessid":"LTAI5t8sqJn5GhpBVtN8****", "accesskey":"HlClegbiV5mJjBYBJHEZQOnRF7****", "delimiter":"," }';
重要外部テーブルを作成するときは、CSV、Parquet、またはORC外部テーブルに次のTABLE_PROPERTIESパラメーターを設定できます。
CSV:
endpoint
、url
、accessid
、accesskey
、format
、delimiter
、null_value
、partition_column
Parquet:
endpoint
、url
、accessid
、accesskey
、format
、partition_column
ORC:
endpoint
、url
、accessid
、accesskey
、format
、partition_column
外部テーブルパラメーターの詳細については、「外部テーブルを使用してdata Warehouse Editionにデータをインポートする」トピックの「非パーティション化OSS外部テーブル」および「パーティション化OSS外部テーブル」セクションをご参照ください。
データの照会
外部テーブルを作成した後、AnalyticDB for MySQLでSELECTステートメントを実行して、外部テーブルのデータをクエリできます。
SELECT * FROM oss_import_test_external_table;
サンプル結果:
+------+-------+------+-----------+ | id | name | age | dt | +------+-------+------+-----------+ | 1 | james | 10 |2023-06-15 | | 2 | bond | 20 |2023-06-15 | | 3 | jack | 30 |2023-06-15 | | 4 | lucy | 40 |2023-06-15 | +------+-------+------+-----------+ 4 rows in set (0.35 sec)
AnalyticDB for MySQLクラスターにテーブルを作成し、OSSからインポートされたデータを保存します。
説明作成した内部テーブルは、手順bで作成した外部テーブルと同じフィールド名、番号、順序、およびデータ型を使用する必要があります。
CREATE TABLE adb_import_test ( id INT, name VARCHAR(1023), age INT, dt VARCHAR(1023) primary key(id) ) DISTRIBUTED BY HASH(uid);
データをインポートする。
重要elastic importメソッドでは、
INSERT OVERWRITE INTO
ステートメントを使用してのみデータをインポートできます。方法1: INSERT OVERWRITE INTOステートメントを実行して、データを弾力的にインポートします。 主キーの値が重複している場合、元の値は新しい値で上書きされます。
/+*elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/ INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.oss_import_test_external_table;
方法2: INSERT OVERWRITE INTO文を非同期的に実行して、データを弾力的にインポートします。 ほとんどの場合、
SUBMIT JOB
ステートメントは非同期ジョブの送信に使用されます。/*elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/ SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.oss_import_test_external_table;
重要エラスティックインポートジョブを非同期で送信する場合、優先キューを設定できません。
サンプル結果:
+---------------------------------------+ | job_id | +---------------------------------------+ | 2023081517195102101701907203151****** |
[ジョブの送信]
ステートメントを使用して非同期ジョブを送信すると、ジョブIDのみが返されます。これは、非同期ジョブが正常に送信されたことを示します。 返されたジョブIDを使用して、非同期ジョブを終了したり、非同期ジョブのステータスを照会したりできます。 詳細については、「インポートジョブの非同期送信」をご参照ください。ヒントパラメータ:
elastic_load: elastic_importを使用するかどうかを指定します。 有効な値: trueおよびfalse。 デフォルト値:false
elastic_load_configs: エラスティックインポート機能の設定パラメーター。 パラメーターを括弧 ([ ]) で囲み、複数のパラメーターを縦棒 (|) で区切る必要があります。 次の表にパラメーターを示します。
パラメーター
必須
説明
adb.load.resource.group.name
必須
エラスティックインポートジョブを実行するジョブリソースグループの名前。
adb.load.job.max.acu
選択可能
エラスティックインポートジョブのリソースの最大量。 単位: AnalyticDBコンピューティングユニット (ACU) 。 最小値: 5 ACU。 デフォルト値: シャード数 + 1
次のステートメントを実行して、クラスター内のシャードの数を照会します。
SELECT count(1) FROM information_schema.kepler_meta_shards;
spark.driver.resourceSpec
選択可能
Sparkドライバーのリソースタイプ。 デフォルト値: small。 有効な値の詳細については、Conf設定パラメータートピックの「Sparkリソースの仕様」テーブルの「タイプ」列を参照してください。
spark.exe cutor.resourceSpec
選択可能
Sparkエグゼキュータのリソースタイプ。 デフォルト値: large。 有効な値の詳細については、Conf設定パラメータートピックの「Sparkリソースの仕様」テーブルの「タイプ」列を参照してください。
spark.adb.exe cutorDiskSize
選択可能
Sparkエグゼキュータのディスク容量。 有効な値: (0,100) 。 単位は USD / GiB です。 デフォルト値: 10 GiB 詳細については、「Conf設定パラメーター」トピックの「ドライバーとエグゼキューターリソースの指定」をご参照ください。
(オプション) 送信されたジョブがエラスティックインポートジョブであるかどうかを確認します。
SELECT job_name, (job_type == 3) AS is_elastic_load FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where job_name = "2023081818010602101701907303151******"
サンプル結果:
+---------------------------------------+------------------+ | job_name | is_elastic_load | +---------------------------------------+------------------+ | 2023081517195102101701907203151****** | 1 | +---------------------------------------+------------------+
エラスティックインポートジョブが送信されると、
is_elastic_load
パラメーターの1が返されます。 通常のインポートジョブが送信されると、0が返されます。