AnalyticDB for MySQLを使用すると、CREATE EXTERNAL TABLEステートメントを実行して、Object Storage Service (OSS) 、ApsaraDB RDS for MySQL、ApsaraDB for MongoDB、Tablestore、MaxComputeなどのさまざまなサービスに基づいて外部テーブルを作成できます。
前提条件
AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。
AnalyticDB for MySQLクラスターのマイナーバージョンは3.1.8.0以降です。
説明AnalyticDB for MySQLのマイナーバージョンを照会するには
Data Lakehouse Editionクラスターで、
SELECT adb_version();
文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。外部データベースが作成されます。 詳細については、「外部データベースの作成」をご参照ください。
使用上の注意
Alibaba Cloudアカウント全体で外部テーブルを作成する場合、OSS外部テーブルのみを作成できます。
OSS外部テーブル
OSS外部テーブルが作成されるOSSバケットは、AnalyticDB for MySQLクラスターと同じリージョンに存在する必要があります。
Hudi外部テーブルは、V3.1.9.2以降のAnalyticDB for MySQLクラスターに対してのみ作成できます。
AnalyticDB for MySQLのマイナーバージョンを照会するには
Data Lakehouse Editionクラスターで、
SELECT adb_version();
文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。作成したパーティション化されたOSS外部テーブルのデータをクエリするには、
MSCK REPAIR table
文を実行して外部テーブルのパーティションを同期する必要があります。Alibaba Cloudアカウント間でOSS外部テーブルを作成するには、まず、必要なパラメーターが設定されたクロスアカウントOSS外部データベースを作成する必要があります。 詳細については、「外部データベースの作成」をご参照ください。
構文
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|RCFIL|HUDI}
LOCATION 'OSS_LOCATION';
[TBLPROPERTIES (
'type' = 'cow|mor'
'auto.create.location' = 'true|false')]
パラメーター
パラメーター | 必須 | 説明 |
| 必須 | 外部テーブルの名前とスキーマ。 テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。 |
| 選択可能 | パーティションキー列。 パーティション化された外部テーブルを作成するには、このパラメーターを指定する必要があります。 マルチレベルパーティションテーブルを作成するには、複数のパーティションキー列を指定できます。 |
| 必須 | 列の区切り文字。 ファイル内の区切り文字と同じ文字を指定できます。 この例では、コンマ (,) が使用されます。 重要 このパラメーターは、 |
| 必須 | ファイルの保存形式。 TXTおよびCSVファイルの場合、このパラメーターを 重要 V3.1.8.0以降のAnalyticDB for MySQLクラスターのみが、STRUCTデータ型の |
| 必須 | OSSオブジェクトまたはディレクトリのパス。 OSSディレクトリを指定する場合は、次のルールに従うことを推奨します。 そうしないと、クエリエラーまたはデータ例外が発生する可能性があります。
パーティション化された外部テーブルを作成するときは、LOCATIONパラメーターをパーティションの上位ディレクトリに設定する必要があります。 たとえば、OSSオブジェクトのパスは 重要
|
| 選択可能 | Hudi外部テーブルのタイプ。 有効な値:
重要 このパラメーターは、 |
| 選択可能 | OSSパスまたはディレクトリを自動的に作成するかどうかを指定します。 有効な値:
重要 このパラメーターは、パーティション化された外部テーブルを作成した場合にのみ有効です。 |
例
例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外部テーブルを作成すると、
_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';
例2: パーティション化外部テーブルの作成
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest4
(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.osstest5
(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コンソールの クラスター情報 ページでElastic Network Interface (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エンドポイントとポート番号、およびインスタンス内のデータベースの名前。 ApsaraDB RDS For MySQLインスタンスのVPCエンドポイントを取得する方法については、「ApsaraDB RDS for MySQLインスタンスの内部およびパブリックエンドポイントとポート番号の表示と変更」をご参照ください。 |
| 必須 | ApsaraDB RDS for MySQL外部テーブルの名前。 |
| 必須 | ApsaraDB RDS for MySQLインスタンスのデータベースアカウントの名前。 |
| 必須 | ApsaraDB RDS for MySQLインスタンスのデータベースアカウントのパスワード。 |
| 選択可能 | ApsaraDB RDS for 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-bp1gx6h1tyd04****.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を有効にする必要があります。
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",
}';
Parameters
パラメーター | 必須 | 説明 |
| 必須 | 外部テーブルの名前とスキーマ。 テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。 |
| 必須 | 外部テーブルのストレージエンジン。 ApsaraDB for MongoDBデータを読み書きするには、ストレージエンジンをMONGODBに設定します。 |
| 必須 | 外部テーブルのプロパティ。 |
mapped_name | 必須 | ApsaraDB for MongoDBコレクションの名前。 |
場所 | 必須 | ApsaraDB for MongoDBインスタンスのVPCエンドポイント。 VPCエンドポイントの取得方法については、「」をご参照ください。 |
username | 必須 | ApsaraDB for MongoDBインスタンスのデータベースアカウントの名前。 データベースアカウントの作成方法については、「MongoDBデータベースユーザーの権限の管理」をご参照ください。 説明 ApsaraDB for MongoDBは、指定されたデータベースアカウント名とパスワードを検証します。 ApsaraDB for MongoDBインスタンスのVPCエンドポイントに含まれるデータベースアカウント名を使用する必要があります。 ご不明な点がございましたら、テクニカルサポートにお問い合わせください。 |
password | 必須 | ApsaraDB for MongoDBインスタンスのデータベースアカウントのパスワード。 |
例
CREATE EXTERNAL TABLE adb_external_demo.person (
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データを読み書きするには、ストレージエンジンをOTSに設定します。 |
| 必須 | Tablestoreインスタンスのテーブルの名前。 テーブルの名前を表示するには、Tablestoreコンソールにログインし、[インスタンス管理] ページに移動します。 |
| 必須 | TablestoreインスタンスのVPCエンドポイント。 インスタンスの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など) がサポートされています。 説明 V3.2.1.0以降のAnalyticDB for MySQLクラスターのみが、MaxComputeの複雑なデータタイプをサポートしています。 詳細については、「MaxCompute V2.0データ型エディション」トピックの「複雑なデータ型」セクションをご参照ください。 AnalyticDB for MySQLのマイナーバージョンを照会するには Data Lakehouse Editionクラスターで、 |
| 必須 | 外部テーブルのストレージエンジン。 MaxComputeデータを読み書きするには、ストレージエンジンをODPSに設定します。 |
| 必須 | MaxComputeプロジェクトのエンドポイント。 説明 MaxComputeには、VPCエンドポイントを使用してのみアクセスできます。 詳細については、「エンドポイント」をご参照ください。 |
| 必須 | MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAM (Resource Access Management) ユーザーのAccessKey ID。 AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。 |
| 必須 | MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。 AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。 |
| 選択可能 | パーティションキー列。 パーティション化された外部テーブルを作成するには、このパラメーターを指定する必要があります。 |
| 必須 | 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":"LTAILd4****",
"endpoint":"http://service.cn-hangzhou.maxcompute.aliyun.com/api",
"accesskey":"4A5Q7ZVzcYnWMQPysX****",
"partition_column":"dt",
"project_name":"test_adb",
"table_name":"person"
}';
関連ドキュメント
OSS外部テーブル: 外部テーブルを使用してdata Lakehouse Editionにデータをインポート
ApsaraDB RDS for MySQL外部テーブル: 外部テーブルを使用してdata Lakehouse Editionにデータをインポート
ApsaraDB for MongoDB外部テーブル: ApsaraDB for MongoDBからのデータのインポート
Tablestore外部テーブル: Tablestoreからデータをインポート
MaxCompute外部テーブル: 外部テーブルを使用してdata Lakehouse Editionにデータをインポート