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

AnalyticDB:CREATE EXTERNAL TABLE

最終更新日:Jul 10, 2026

AnalyticDB for MySQL では、OSS 外部テーブル、RDS for MySQL 外部テーブル、ApsaraDB for MongoDB 外部テーブル、Tablestore 外部テーブル、MaxCompute 外部テーブルなど、いくつかのタイプの外部テーブルを作成できます。

前提条件

注意事項

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

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名とスキーマを定義します。

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

重要

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 データ型をサポートします。

重要

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

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

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

テーブル名とスキーマを定義します。

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

ENGINE='MYSQL'

はい

外部テーブルのストレージエンジン。RDS for MySQL からデータを読み書きするには、この値を MYSQL に設定します。

TABLE_PROPERTIES

はい

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

url

はい

RDS for MySQL インスタンスの VPC エンドポイント、ポート番号、およびデータベース名。VPC エンドポイントの取得方法については、「ApsaraDB RDS for MySQL インスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。

tablename

はい

RDS for MySQL データベース内のテーブルの名前。

username

はい

RDS for MySQL データベースのアカウント。

password

はい

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

はい

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

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 を使用する場合、それはご利用の 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",
	["auto_refresh":"true|false"],
	["auto_refresh_mode":"add_only|full"]
}';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, …])

はい

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

table_namecolumn_name は、テーブル名と列名を指定します。テーブルと列の命名規則については、「命名規則」をご参照ください。

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

説明

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

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 ペアの取得」をご参照ください。

accesskey

はい

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。

AccessKey ID と AccessKey Secret の取得方法については、「AccessKey ペアの取得」をご参照ください。

partition_column

いいえ

パーティションキー列。このパラメーターは、MaxCompute テーブルがパーティションテーブルの場合に必須です。

project_name

はい

MaxCompute プロジェクトの名前。

table_name

はい

MaxCompute プロジェクト内のテーブルの名前。

auto_refresh

いいえ

現在の MaxCompute 外部テーブルの自動スキーマ更新を有効にするかどうかを指定します。有効な値:

  • true: 機能を有効にします。

  • false (デフォルト): 機能を無効にします。

重要
  • マイナーバージョン 3.2.7.0 以降のクラスターでのみサポートされます。

  • この機能を有効にする前に、クラスターレベルのスイッチ external_table_schema_refresh_enabled を設定する必要があります。詳細については、このトピックの「クラスターレベルの構成」をご参照ください。

auto_refresh_mode

いいえ

スキーマ更新モード。このパラメーターは、auto_refresh=true の場合にのみ有効です。有効な値:

  • add_only (デフォルト): MaxCompute ソーステーブルに追加された列のみを自動的に同期します。ソーステーブルで列が削除されたり、列の型が変更されたりした場合、警告がログに記録されるだけで、外部テーブルのメタデータは自動的に変更されません。

  • full: 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」をご参照ください。

関連ドキュメント