AnalyticDB for MySQL では、OSS、ApsaraDB RDS for MySQL、ApsaraDB for MongoDB、Tablestore、および MaxCompute の外部テーブルを作成できます。
前提条件
Enterprise Edition、Basic Edition、または Data Lakehouse Edition の AnalyticDB for MySQL クラスターが作成済みである必要があります。
クラスターのマイナーバージョンが 3.1.8.0 以降である必要があります。
説明マイナーバージョンの確認および更新を行うには、AnalyticDB for MySQL コンソールの構成情報セクションにアクセスし、クラスター情報ページを表示します。
外部データベースを作成する必要があります。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
注意事項
OSS 外部テーブルのみ、クロスアカウントでの作成がサポートされています。
OSS 外部テーブル
OSS バケットは、AnalyticDB for MySQL クラスターと同じリージョンに配置されている必要があります。
Hudi、Iceberg、または Paimon の外部テーブルを作成する場合、クラスターは以下のマイナーバージョン要件を満たす必要があります:
Hudi 外部テーブル:クラスターのマイナーバージョンが 3.1.9.2 以降。
Iceberg 外部テーブル:クラスターのマイナーバージョンが 3.2.3.0 以降。
Paimon 外部テーブル:クラスターのマイナーバージョンが 3.2.6.1 以降。
マイナーバージョンの確認および更新を行うには、AnalyticDB for MySQL コンソールの構成情報セクションにアクセスし、クラスター情報ページを表示します。
パーティション化された OSS 外部テーブルを作成した後は、
MSCK REPAIR TABLE文を実行してパーティションを同期してください。同期を行わないと、外部テーブルからデータをクエリできません。クロスアカウントで OSS 外部テーブルを作成する場合は、外部データベースを作成する際に必要なパラメーターを追加する必要があります。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
[PARTITIONED BY (column_name column_type[, ...])]
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS {TEXTFILE|ORC|PARQUET|JSON|RCFILE|HUDI|ICEBERG|PAIMON}
LOCATION 'OSS_LOCATION'
[TBLPROPERTIES (
'type' = 'cow|mor',
'auto.create.location' = 'true|false',
'metadata_location' = 'METADATA_LOCATION'
)]パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名およびスキーマを定義します。 テーブルおよび列の命名規則については、「命名規則」をご参照ください。 重要 Paimon 外部テーブルを作成する場合、テーブル名、列名、および列のデータ型は、Paimon ファイル内の定義と一致している必要があります。テーブルスキーマ(フィールド名または型)が Paimon スキーマと異なる場合、Paimon スキーマが優先されます。 |
| いいえ | パーティションキー列を指定します。パーティション化された外部テーブルを作成する場合、このパラメーターは必須です。マルチレベルパーティション化テーブルを作成する場合は、複数のパーティションキー列を指定します。 |
| はい | 列区切り文字を指定します。任意の文字を指定できますが、ソースファイルの区切り文字と一致させる必要があります。本トピックでは、例としてカンマ (,) を使用しています。 重要 このパラメーターは、 |
| はい | ファイル形式を指定します。 .txt または .csv 形式のファイルの場合は、このパラメーターを
重要 STRUCT データ型を使用した |
| はい | OSS ファイルまたはディレクトリのパスを指定します。 OSS ディレクトリパスを指定する場合は、以下のルールに従ってください。ルールに従わない場合、クエリ失敗や予期しない結果が発生する可能性があります。
パーティション化された外部テーブルを作成する場合、LOCATION にはパーティションの親ディレクトリを指定します。たとえば、OSS ファイルパスが 重要
|
| いいえ | Hudi 外部テーブルのタイプです。有効な値は以下のとおりです。
重要 このパラメーターは、 |
| いいえ | OSS ファイルまたはディレクトリパスを自動的に作成するかどうかを指定します。有効な値は以下のとおりです。
重要 このパラメーターは、パーティション化された外部テーブルを作成する場合にのみ有効です。 |
| いいえ | Iceberg 外部テーブルのメタデータファイルのパスを指定します。 重要
|
例
例 1:非パーティション化外部テーブルの作成
ファイルストレージ形式を TEXTFILE に指定します。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest1 (id INT, name STRING, age INT, city STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 'oss://testBucketName/osstest/p1=hangzhou/p2=2023-06-13/data.csv';ファイルストレージ形式を HUDI に指定します。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest2 (id INT, name STRING, age INT, city STRING) STORED AS HUDI LOCATION 'oss://testBucketName/osstest/test' TBLPROPERTIES ('type' = 'cow');重要Hudi 外部テーブルを作成すると、5 つの固定列が自動的に作成されます:
_hoodie_commit_time、_hoodie_commit_seqno、_hoodie_record_key、_hoodie_partition_path、および_hoodie_file_name。ファイルストレージ形式を PARQUET に指定します。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest3 ( A STRUCT < var1:STRING, var2:INT >) STORED AS PARQUET LOCATION 'oss://testBucketName/osstest/Parquet';ファイルストレージ形式を ICEBERG に指定します。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest4 ( user_id BIGINT) STORED AS ICEBERG LOCATION 'oss://testBucketName/osstest/no_partition_table/' TBLPROPERTIES (metadata_location='oss://testBucketName/osstest/no_partition_table/metadata/00000-a32d6136-8490-4ad2-ada3-fe2f7204199f.metadata.json');ファイルストレージ形式を P***** に指定します。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest5 ( a INT, b BIGINT, aCa STRING, d VARCHAR(1)) STORED AS PAIMON LOCATION 'oss://testBucketName/osstest/default.db/t1/';
例 2:パーティション化外部テーブルの作成
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest6
(id int,
name string,
age int,
city string)
PARTITIONED BY (p2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'oss://testBucketName/osstest/p1=hangzhou/';例 3:多段パーティション化外部テーブルの作成
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest7
(id int,
name string,
age int,
city string)
PARTITIONED BY (p1 string,p2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'oss://testBucketName/osstest/';ApsaraDB RDS for MySQL 外部テーブル
ApsaraDB RDS for MySQL 外部テーブルを作成する前に、AnalyticDB for MySQL コンソールにアクセスし、クラスター情報ページで弾性ネットワークインターフェース(ENI)スイッチを有効化します。ENI ネットワークの有効化または無効化により、約 2 分間データベース接続が中断されます。この期間中は、データベースからの読み取りおよび書き込みができません。ENI ネットワークの有効化または無効化に伴う影響を十分に検討した上で実行してください。
ApsaraDB RDS for MySQL インスタンスと AnalyticDB for MySQL クラスターは、同じ VPC 内にある必要があります。
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='MYSQL'
TABLE_PROPERTIES='{
"url":"mysql_vpc_address",
"tablename":"mysql_table_name",
"username":"mysql_user_name",
"password":"mysql_user_password"
[,"charset":"{gbk|utf8|utf8mb4}"]
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名および構造を定義します。 テーブルおよび列の命名規則については、「命名規則」をご参照ください。 |
| はい | 外部テーブルのストレージエンジンです。ApsaraDB RDS for MySQL データベースからデータを読み取る、または書き込むには、このパラメーターを MYSQL に設定します。 |
| はい | 外部テーブルのプロパティです。 |
| はい | ApsaraDB RDS for MySQL インスタンスの VPC エンドポイント、ポート番号、およびデータベース名です。VPC エンドポイントの取得方法については、「内部およびパブリックエンドポイントおよびポート番号の表示または変更」をご参照ください。 |
| はい | ApsaraDB RDS for MySQL データベース内のテーブル名です。 |
| はい | ApsaraDB RDS for MySQL データベースのユーザー名です。 |
| はい | ApsaraDB RDS for MySQL データベースアカウントのパスワードです。 |
| いいえ | MySQL 外部テーブルの文字セットです。有効な値は以下のとおりです。
|
例
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mysqltest (
id int,
name varchar(1023),
age int
) ENGINE = 'MYSQL'
TABLE_PROPERTIES = '{
"url":"jdbc:mysql://rm-bp1gx6********.mysql.rds.aliyuncs.com:3306/test_adb",
"tablename":"person",
"username":"testUserName",
"password":"testUserPassword",
"charset":"utf8"
}';ApsaraDB for MongoDB 外部テーブル
ApsaraDB for MongoDB 外部テーブルを作成する前に、AnalyticDB for MySQL コンソールにアクセスし、クラスター情報ページで弾性ネットワークインターフェース(ENI)スイッチを有効化します。ENI ネットワークの有効化または無効化により、約 2 分間データベース接続が中断されます。この期間中は、データベースからの読み取りおよび書き込みができません。ENI ネットワークの有効化または無効化に伴う影響を十分に検討した上で実行してください。
ApsaraDB for MongoDB 外部テーブルのインスタンスは、AnalyticDB for MySQL クラスターと同じ VPC 内にある必要があります。
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='MONGODB'
TABLE_PROPERTIES = '{
"mapped_name":"table",
"location":"location",
"username":"user",
"password":"password",
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名および構造を定義します。 テーブルおよび列の命名規則については、「命名規則」をご参照ください。 |
| はい | 外部テーブルのストレージエンジンです。ApsaraDB for MongoDB からデータを読み取る、または書き込むには、このパラメーターを MONGODB に設定します。 |
| はい | 外部テーブルのプロパティです。 |
はい | ApsaraDB for MongoDB のコレクション名です。 | |
はい | ||
はい | 説明 | |
はい |
例
CREATE EXTERNAL TABLE adb_external_demo.mongodbtest (
id int,
name string,
age int
) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{
"mapped_name":"person",
"location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb",
"username":"testuser",
"password":"password",
}';Tablestore 外部テーブル
Tablestore インスタンスが VPC に関連付けられている場合、関連付けられた VPC は、AnalyticDB for MySQL クラスターが存在する VPC と同一である必要があります。
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='OTS'
TABLE_PROPERTIES = '{
"mapped_name":"table_name",
"location":"tablestore_vpc_address"
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名および構造を定義します。テーブルおよび列名の命名規則については、「命名規則」をご参照ください。 |
| はい | 外部テーブルのストレージエンジンです。Tablestore からデータを読み取る、または書き込むには、このパラメーターを |
| はい | Tablestore インスタンス内のテーブル名です。Tablestore コンソールにログインし、インスタンス管理ページでテーブル名を確認します。 |
| はい | Tablestore インスタンスの VPC エンドポイントです。Tablestore コンソールにログインし、インスタンス管理ページでインスタンスの VPC エンドポイントを確認します。 |
例
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.otstest (
id int,
name string,
age int
) ENGINE = 'OTS'
TABLE_PROPERTIES = '{
"mapped_name":"person",
"location":"https://w0****la.cn-hangzhou.vpc.tablestore.aliyuncs.com"
}';MaxCompute 外部テーブル
MaxCompute プロジェクトと AnalyticDB for MySQL クラスターは、同じリージョンに存在する必要があります。
一括で MaxCompute 外部テーブルを作成するには、「IMPORT FOREIGN SCHEMA」をご参照ください。
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='ODPS'
TABLE_PROPERTIES='{
"endpoint":"endpoint",
"accessid":"accesskey_id",
"accesskey":"accesskey_secret",
["partition_column":"partition_column"],
"project_name":"project_name",
"table_name":"table_name"
}'; パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名およびスキーマを定義します。スキーマにはパーティションキー列を含める必要があります。
説明 MaxCompute の複合データ型は、マイナーバージョン 3.2.1.0 以降でサポートされます。複合データ型の詳細については、「複合データ型」をご参照ください。 AnalyticDB for MySQL クラスターのマイナーバージョンの確認および更新を行うには、AnalyticDB for MySQL コンソールにログインし、構成情報セクションにアクセスし、クラスター情報ページを表示します。 |
| はい | 外部テーブルのストレージエンジンです。MaxCompute からデータを読み取る、または書き込むには、このパラメーターを |
| はい | MaxCompute のエンドポイントです。 説明 MaxCompute へのアクセスは、VPC エンドポイント経由でのみ可能です。MaxCompute エンドポイントの確認方法については、「エンドポイント」をご参照ください。 |
| はい | MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。 AccessKey ID および AccessKey Secret の取得方法については、「アカウントおよび権限」をご参照ください。 |
| はい | MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret です。 AccessKey ID および AccessKey Secret の取得方法については、「アカウントおよび権限」をご参照ください。 |
| いいえ | パーティションキー列です。MaxCompute テーブルがパーティション化されたテーブルである場合、このパラメーターは必須です。 |
| はい | MaxCompute プロジェクトの名前です。 |
| はい | MaxCompute テーブルの名前です。 |
例
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mctest (
id int,
name varchar(1023),
age int,
dt string
) ENGINE='ODPS'
TABLE_PROPERTIES='{
"accessid":"LTAI****************",
"endpoint":"http://service.cn-hangzhou.maxcompute.aliyun.com/api",
"accesskey":"yourAccessKeySecret",
"partition_column":"dt",
"project_name":"test_adb",
"table_name":"person"
}';関連ドキュメント
OSS 外部テーブル:「データレイクハウスエディションへの OSS データのインポート」。
ApsaraDB RDS for MySQL 外部テーブル:「ApsaraDB RDS for MySQL データのインポート」。
ApsaraDB for MongoDB 外部テーブル:「ApsaraDB for MongoDB データのインポート」。
Tablestore 外部テーブル:「Tablestore データのクエリおよびインポート」。
MaxCompute 外部テーブル:「MaxCompute データのインポート」。