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

AnalyticDB:CREATE EXTERNAL TABLE

最終更新日:Jul 17, 2026

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

パラメーター

パラメーター

必須

説明

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

重要

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 外部テーブルを作成する場合は、指定されたパス内に .hoodie という名前の 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 を使用している場合、その 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"
}';

パラメーター

パラメーター

必須

説明

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_name および column_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」をご参照ください。

関連ドキュメント