AnalyticDB for MySQL では、OSS、RDS MySQL、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文を実行する必要があります。これを実行しないと、外部テーブルからデータをクエリできません。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 のものと異なる場合、Paimon 側のテーブルスキーマが優先されます。 |
| いいえ | パーティション化された外部テーブルを作成する場合、このパラメーターを設定してパーティションキー列を指定する必要があります。複数のパーティションキー列を指定すると、マルチレベルのパーティション化テーブルが作成されます。 |
| はい | 列区切り文字です。任意の記号を指定できますが、ファイル内の区切り文字と一致させる必要があります。本トピックでは、カンマ(,)を例として使用しています。 重要 このパラメーターは、 |
| はい | ファイル形式です。 .txt または .csv 形式のファイルの場合は、このパラメーターを
重要 STRUCT データの型を含む |
| はい | 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 MySQL 外部テーブル
ApsaraDB RDS for MySQL 外部テーブルを作成する前に、AnalyticDB for MySQL コンソールの「クラスター情報」ページで、弾性ネットワークインターフェース(ENI)を有効化する必要があります。ENI の有効化または無効化を行うと、約 2 分間データベース接続が中断される場合があります。この期間中は、読み取りおよび書き込み操作を行えません。ENI の有効化または無効化は、十分にご注意ください。
RDS 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 MySQL からデータを読み取ったり、RDS MySQL にデータを書き込んだりするには、値を MYSQL に設定します。 |
| はい | 外観プロパティです。 |
| はい | RDS MySQL インスタンスの内部エンドポイント、ポート番号、およびデータベース名です。RDS インスタンスの内部エンドポイントの取得方法については、「内部およびパブリックエンドポイントとポートの表示または変更」をご参照ください。 |
| はい | RDS MySQL 内のテーブル名です。 |
| はい | RDS MySQL のデータベースアカウントです。 |
| はい | RDS 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"
}';MongoDB 外部テーブル
MongoDB 外部テーブルを作成する前に、AnalyticDB for MySQL コンソールの「クラスター情報」ページで、弾性ネットワークインターフェース(ENI)を有効化する必要があります。ENI の有効化または無効化を行うと、約 2 分間データベース接続が中断される場合があります。この期間中は、読み取りおよび書き込み操作を行えません。ENI の有効化または無効化は、十分にご注意ください。
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",
}';パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名およびスキーマです。 テーブルおよび列の命名規則については、「命名規則」をご参照ください。 |
| はい | 外部テーブルのストレージエンジンです。MongoDB からデータを読み取ったり、MongoDB にデータを書き込んだりするには、値を MONGODB に設定します。 |
| はい | 外観プロパティです。 |
mapped_name | はい | MongoDB コレクションの名前です。 |
location | はい | |
username | はい | 説明 MongoDB は、ターゲットデータベース内でデータベースアカウントおよびパスワードを検証します。MongoDB インスタンスの VPC エンドポイントで指定されたデータベースのアカウントを使用してください。ご不明な点がある場合は、テクニカルサポートまでお問い合わせください。 |
password | はい | 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 にアタッチされている場合、そのインスタンスは 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 にデータを書き込んだりするには、値を OTS に設定します。 |
| はい | Tablestore インスタンス内のテーブル名です。Tablestore コンソールにログインし、「インスタンス管理」ページでテーブル名を確認できます。Tablestore コンソール |
| はい | Tablestore インスタンスの VPC エンドポイントです。Tablestore コンソールにログインし、「インスタンス管理」ページでインスタンスの VPC エンドポイントを確認できます。Tablestore コンソール |
例
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"
}'; パラメーター
パラメーター | 必須 | 説明 |
| はい | テーブル名およびスキーマです。テーブルスキーマには、パーティションキー列を含める必要があります。 table_name および column_name:テーブル名および列名です。テーブルおよび列の命名規則については、「命名規則」をご参照ください。 column_type:MaxCompute の基本データの型および複合データの型(ARRAY、MAP、STRUCT)がサポートされます。 説明 MaxCompute の複合データの型は、バージョン 3.2.1.0 以降でサポートされます。複合データの型の詳細については、「複合データの型」をご参照ください。 AnalyticDB for MySQL クラスターのマイナーバージョンの確認および更新を行うには、AnalyticDB for MySQL コンソールにログインし、「構成情報」セクションにアクセスし、「クラスター情報」ページを表示します。 |
| はい | 外部テーブルのストレージエンジンです。MaxCompute からデータを読み取ったり、MaxCompute にデータを書き込んだりするには、値を ODPS に設定します。 |
| はい | MaxCompute のエンドポイントです。 説明 MaxCompute へのアクセスは、VPC エンドポイント経由でのみ可能です。MaxCompute エンドポイントの確認方法については、「エンドポイント」をご参照ください。 |
| はい | MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは Resource Access Management (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 から外部テーブルを使用して Data Lakehouse Edition クラスターにデータをインポートする」をご参照ください。
RDS MySQL 外部テーブルについての詳細については、「RDS MySQL から外部テーブルを使用してデータをインポートする」をご参照ください。
MongoDB 外部テーブルについて詳しくは、「外部テーブルを使用した MongoDB からのデータのインポート」をご参照ください。
Tablestore 外部テーブルの詳細については、「Tablestore からデータをクエリおよびインポートする」をご参照ください。
MaxCompute 外部テーブルの詳細については、「外部テーブルを使用して MaxCompute からデータをインポートする」をご参照ください。