AnalyticDB for MySQL では、OSS 外部テーブル、RDS for MySQL 外部テーブル、ApsaraDB for MongoDB 外部テーブル、Tablestore 外部テーブル、および MaxCompute 外部テーブルなど、複数の種類の外部テーブルを作成できます。
前提条件
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターが作成されています。
クラスターのマイナーバージョンが 3.1.8.0 以降である必要があります。
説明マイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソール の クラスター情報 ページにある 構成情報 セクションに移動します。
事前に外部データベースを作成しておく必要があります。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
注意事項
Alibaba Cloud アカウント間で作成できるのは 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ステートメントを実行してパーティションを同期してください。同期しないと、外部テーブルからデータをクエリできません。Alibaba Cloud アカウント間で 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 のスキーマが優先されます。 |
| いいえ | パーティションキー列を指定します。パーティション化された外部テーブルを作成する場合は、このパラメーターが必要です。多段パーティション化テーブルを作成する場合は、複数のパーティションキー列を指定します。 |
| はい | 列区切り文字を指定します。任意の文字を指定できますが、データファイルで使用されているデリミタと一致している必要があります。本ドキュメントではカンマ (,) を例として使用しています。 重要 このパラメーターは、 |
| はい | ファイル形式を指定します。 ファイル形式が .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');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');PAIMON として保存される外部テーブルを作成します。
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/';RDS for MySQL 外部テーブル
RDS for MySQL 外部テーブルを作成するには、まず AnalyticDB for MySQL コンソール の クラスター情報 ページで ENI を有効化する必要があります。ENI の有効化または無効化により、約 2 分間データベース接続が中断され、読み取りおよび書き込み操作が失敗します。ENI を有効化または無効化する前に、潜在的な影響を慎重に評価してください。
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}"]
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名とスキーマを定義します。 テーブル名およびカラム名の命名規則については、「命名規則」をご参照ください。 |
| はい | 外部テーブルのストレージエンジンです。RDS for MySQL からのデータの読み取りおよび書き込みを行うには、この値を MYSQL に設定します。 |
| はい | 外部テーブルのプロパティです。 |
| はい | RDS for MySQL インスタンスの VPC エンドポイント、ポート番号、およびデータベース名です。VPC エンドポイントの取得方法については、「ApsaraDB RDS for MySQL インスタンスのエンドポイントおよびポート番号の表示と変更」をご参照ください。 |
| はい | RDS for MySQL データベース内のテーブル名です。 |
| はい | RDS for MySQL データベースのアカウントです。 |
| はい | 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 に設定します。 |
| はい | 外部テーブルのプロパティです。 |
mapped_name | はい | MongoDB コレクションの名前です。 |
location | はい | ApsaraDB for MongoDB インスタンスの VPC エンドポイント です。 |
username | はい | ApsaraDB for MongoDB の データベースアカウント です。 説明
ApsaraDB for MongoDB は、アカウントとパスワードをターゲットデータベースに対して検証します。VPC エンドポイントで指定されたデータベースのアカウントを使用してください。問題が発生した場合は、テクニカルサポートにお問い合わせください。 |
password | はい | 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 クラスターと同じである必要があります。
構文
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 からのデータの読み取りおよび書き込みを行うには、この値を OTS に設定します。 |
| はい | 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",
["auto_refresh":"true|false"],
["auto_refresh_mode":"add_only|full"]
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名とスキーマを定義します。テーブルスキーマにはパーティションキー列を含める必要があります。
説明 マイナーバージョン 3.2.1.0 以降は、複合 MaxCompute データ型をサポートします。複合データ型の詳細については、「複合データ型」をご参照ください。 AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。 |
| はい | 外部テーブルのストレージエンジンです。MaxCompute からのデータの読み取りおよび書き込みを行うには、この値を ODPS に設定します。 |
| はい | MaxCompute サービスのエンドポイントです。 説明 MaxCompute には VPC エンドポイント経由でのみアクセスできます。MaxCompute エンドポイントを確認するには、「エンドポイント」をご参照ください。 |
| はい | MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。 AccessKey ID および AccessKey Secret の取得方法については、「AccessKey ペアの取得」をご参照ください。 |
| はい | Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret です。 AccessKey ID および AccessKey Secret の取得方法については、「AccessKey ペアの取得」をご参照ください。 |
| いいえ | パーティションキー列です。MaxCompute テーブルがパーティションテーブルの場合、このパラメーターは必須です。 |
| はい | MaxCompute プロジェクトの名前です。 |
| はい | MaxCompute プロジェクト内のテーブル名です。 |
| いいえ | 現在の MaxCompute 外部テーブルに対して自動スキーマリフレッシュを有効にするかどうかを指定します。有効な値は以下のとおりです。
重要
|
| いいえ | スキーマリフレッシュモードです。このパラメーターは、
重要 マイナーバージョン 3.2.7.0 以降のクラスターでのみサポートされます。 |
例
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"
}';自動スキーマリフレッシュ (auto refresh)
MaxCompute 外部テーブルは自動スキーマリフレッシュをサポートしています。この機能を有効にすると、MaxCompute ソーステーブルのスキーマ変更が各リフレッシュサイクルで自動的に外部テーブルに同期され、外部テーブルを再作成したり手動でリフレッシュしたりする必要がなくなります。有効化の可否およびリフレッシュ範囲は、テーブル作成時に指定する auto_refresh パラメーターおよび auto_refresh_mode パラメーターによって制御されます。詳細については、上記の「パラメーター」をご参照ください。
クラスターレベルの構成
テーブルレベルの auto_refresh=true 設定を使用して自動スキーマリフレッシュを有効にする前に、次のステートメントを実行してクラスターレベルの自動リフレッシュスイッチを有効化する必要があります。
-- 自動スキーマリフレッシュ機能を有効化します。
SET ADB_CONFIG external_table_schema_refresh_enabled=true;
-- 自動スキーマリフレッシュのポーリング間隔 (ミリ秒単位)。デフォルト値:300000 (5 分)。この構成はクラスターを再起動後に有効になります。
SET ADB_CONFIG external_table_schema_refresh_poll_interval_ms=300000;例
次の例は、add_only モードで自動スキーマリフレッシュを有効にして MaxCompute 外部テーブルを作成するものです。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mctest_add_only (
id BIGINT,
name VARCHAR(1024),
amount DOUBLE
) ENGINE='ODPS'
TABLE_PROPERTIES='{
"accessid":"LTAI****************",
"accesskey":"yourAccessKeySecret",
"endpoint":"https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api",
"project_name":"test_adb",
"table_name":"person",
"auto_refresh":"true",
"auto_refresh_mode":"add_only"
}';MaxCompute ソーステーブルにカラムが追加された後、次のリフレッシュ時に外部テーブルに該当カラムが自動的に追加されます。ソーステーブルでカラムが削除された場合やカラムの型が変更された場合は、自動的に適用されません。
次の例は、full モードで自動スキーマリフレッシュを有効にして MaxCompute 外部テーブルを作成するものです。
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mctest_full (
id BIGINT,
name VARCHAR(1024),
amount DOUBLE
) ENGINE='ODPS'
TABLE_PROPERTIES='{
"accessid":"LTAI****************",
"accesskey":"yourAccessKeySecret",
"endpoint":"https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api",
"project_name":"test_adb",
"table_name":"person",
"auto_refresh":"true",
"auto_refresh_mode":"full"
}';MaxCompute ソーステーブルでカラムが追加、削除、または型が変更された後、次のリフレッシュ時に外部テーブルがメタデータを同期します。
注意事項
自動スキーマリフレッシュは、
ENGINE='ODPS'を使用する MaxCompute 外部テーブルでのみサポートされます。add_only はデフォルトモードであり、カラムの追加のみが許可される本番環境に適しています。
full モードは、削除されたカラムやカラムの型の変更を自動的に同期するため、古いカラムに依存する SQL ステートメント、アプリケーション、レポート、またはビューに影響を与える可能性があります。このモードは慎重に使用してください。
MaxCompute 外部テーブルに対して
*を使用するビューを作成した場合 (例:CREATE VIEW view_name AS SELECT * FROM external_table)、ビュー作成時に*は固定のカラムリストとして展開・保存されます。full モードでソーステーブルから削除または名前変更されたカラムがビューに保存されているカラムに関連する場合、ビューのクエリ時にビューが古くなっていることを示すエラーが返され、ビューを再作成する必要があります。これは想定された動作です。*をビュー内で使用しないことを推奨します。詳細については、「CREATE VIEW」をご参照ください。
関連ドキュメント
OSS 外部テーブル:「外部テーブルを使用した OSS からのデータのインポート」
RDS for MySQL 外部テーブル:「外部テーブルを使用した RDS for MySQL からのデータのインポート」
ApsaraDB for MongoDB 外部テーブル:「外部テーブルを使用した ApsaraDB for MongoDB からのデータのインポート」
Tablestore 外部テーブル:「Tablestore データのクエリおよびインポート」
MaxCompute 外部テーブル:「外部テーブルを使用した MaxCompute からのデータのインポート」