すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:CREATE EXTERNAL TABLE

最終更新日:Mar 31, 2026

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'
)]

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名およびスキーマを定義します。

テーブルおよび列の命名規則については、「命名規則」をご参照ください。

重要

Paimon 外部テーブルを作成する場合、テーブル名、列名、および列のデータ型は、Paimon ファイル内の定義と一致している必要があります。テーブルスキーマ(フィールド名または型)が Paimon スキーマと異なる場合、Paimon スキーマが優先されます。

PARTITIONED BY (column_name column_type[, …])

いいえ

パーティションキー列を指定します。パーティション化された外部テーブルを作成する場合、このパラメーターは必須です。マルチレベルパーティション化テーブルを作成する場合は、複数のパーティションキー列を指定します。

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

はい

列区切り文字を指定します。任意の文字を指定できますが、ソースファイルの区切り文字と一致させる必要があります。本トピックでは、例としてカンマ (,) を使用しています。

重要

このパラメーターは、STORED AS TEXTFILE または STORED AS JSON を指定した場合のみサポートされます。

STORED AS {TEXTFILE|ORC|PARQUET|JSON|RCFILE|HUDI|ICEBERG|PAIMON}

はい

ファイル形式を指定します。

.txt または .csv 形式のファイルの場合は、このパラメーターを STORED AS TEXTFILE に設定します。

PARQUET 形式のファイルは、STRUCT データ型およびネストデータ構造をサポートします。

重要

STRUCT データ型を使用した PARQUET ファイルは、マイナーバージョン 3.1.8.0 以降のクラスターでのみサポートされます。

LOCATION

はい

OSS ファイルまたはディレクトリのパスを指定します。

OSS ディレクトリパスを指定する場合は、以下のルールに従ってください。ルールに従わない場合、クエリ失敗や予期しない結果が発生する可能性があります。

  • ディレクトリパスは / で終了します。

  • ディレクトリ内のすべてのファイルは、同じファイル形式である必要があります。

  • ディレクトリ内のすべてのファイルは、フィールド数、フィールド順序、およびフィールド型が同一である必要があります。

パーティション化された外部テーブルを作成する場合、LOCATION にはパーティションの親ディレクトリを指定します。たとえば、OSS ファイルパスが oss://testBucketname/testfolder/p1=2023-06-13/data.csv の場合、パーティションキー列として p1 を使用するパーティション化された外部テーブルを作成するには、LOCATION 'oss://testBucketname/testfolder/' を指定する必要があります。

重要
  • Hudi 外部テーブルを作成する場合、指定されたパスに .hoodies という名前の Hudi メタデータファイルが存在することを確認してください。

  • auto.create.location=true を設定し、パーティション化された外部テーブルを作成する際に LOCATION で指定されたパスが存在しない場合、システムが自動的に OSS ディレクトリを作成します。

type

いいえ

Hudi 外部テーブルのタイプです。有効な値は以下のとおりです。

  • COW(デフォルト):Copy on Write。読み取り中心のワークロードに適しています。

  • MOR:Merge on Read。書き込み中心のワークロードに適しています。

重要

このパラメーターは、STORED AS HUDI を指定した場合のみ必須です。

auto.create.location

いいえ

OSS ファイルまたはディレクトリパスを自動的に作成するかどうかを指定します。有効な値は以下のとおりです。

  • true:パスが自動的に作成されます。

  • false(デフォルト):パスは自動的に作成されません。

重要

このパラメーターは、パーティション化された外部テーブルを作成する場合にのみ有効です。

metadata_location

いいえ

Iceberg 外部テーブルのメタデータファイルのパスを指定します。

重要
  • このパラメーターは、STORED AS 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}"]
  }';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名および構造を定義します。

テーブルおよび列の命名規則については、「命名規則」をご参照ください。

ENGINE='MYSQL'

はい

外部テーブルのストレージエンジンです。ApsaraDB RDS for MySQL データベースからデータを読み取る、または書き込むには、このパラメーターを MYSQL に設定します。

TABLE_PROPERTIES

はい

外部テーブルのプロパティです。

url

はい

ApsaraDB RDS for MySQL インスタンスの VPC エンドポイント、ポート番号、およびデータベース名です。VPC エンドポイントの取得方法については、「内部およびパブリックエンドポイントおよびポート番号の表示または変更」をご参照ください。

tablename

はい

ApsaraDB RDS for MySQL データベース内のテーブル名です。

username

はい

ApsaraDB RDS for MySQL データベースのユーザー名です。

password

はい

ApsaraDB RDS for MySQL データベースアカウントのパスワードです。

charset

いいえ

MySQL 外部テーブルの文字セットです。有効な値は以下のとおりです。

  • gbk

  • utf8(デフォルト)

  • utf8mb4

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",
}';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名および構造を定義します。

テーブルおよび列の命名規則については、「命名規則」をご参照ください。

ENGINE='MONGODB'

はい

外部テーブルのストレージエンジンです。ApsaraDB for MongoDB からデータを読み取る、または書き込むには、このパラメーターを MONGODB に設定します。

TABLE_PROPERTIES

はい

外部テーブルのプロパティです。

はい

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"
}';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名および構造を定義します。テーブルおよび列名の命名規則については、「命名規則」をご参照ください。

ENGINE='OTS’

はい

外部テーブルのストレージエンジンです。Tablestore からデータを読み取る、または書き込むには、このパラメーターを OTS に設定します。

mapped_name

はい

Tablestore インスタンス内のテーブル名です。Tablestore コンソールにログインし、インスタンス管理ページでテーブル名を確認します。

location

はい

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"
}'; 

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名およびスキーマを定義します。スキーマにはパーティションキー列を含める必要があります。

table_name および column_name:テーブルおよび列の名前です。命名規則については、「命名規則」をご参照ください。

column_type:ARRAY、MAP、STRUCT などの MaxCompute の基本および複合データ型をサポートします。

説明

MaxCompute の複合データ型は、マイナーバージョン 3.2.1.0 以降でサポートされます。複合データ型の詳細については、「複合データ型」をご参照ください。

AnalyticDB for MySQL クラスターのマイナーバージョンの確認および更新を行うには、AnalyticDB for MySQL コンソールにログインし、構成情報セクションにアクセスし、クラスター情報ページを表示します。

ENGINE='ODPS'

はい

外部テーブルのストレージエンジンです。MaxCompute からデータを読み取る、または書き込むには、このパラメーターを ODPS に設定します。

endpoint

はい

MaxCompute のエンドポイントです。

説明

MaxCompute へのアクセスは、VPC エンドポイント経由でのみ可能です。MaxCompute エンドポイントの確認方法については、「エンドポイント」をご参照ください。

accessid

はい

MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。

AccessKey ID および AccessKey Secret の取得方法については、「アカウントおよび権限」をご参照ください。

accesskey

はい

MaxCompute へのアクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret です。

AccessKey ID および AccessKey Secret の取得方法については、「アカウントおよび権限」をご参照ください。

partition_column

いいえ

パーティションキー列です。MaxCompute テーブルがパーティション化されたテーブルである場合、このパラメーターは必須です。

project_name

はい

MaxCompute プロジェクトの名前です。

table_name

はい

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"
}';

関連ドキュメント