All Products
Search
Document Center

AnalyticDB:CREATE EXTERNAL TABLE

Last Updated:Jul 17, 2026

AnalyticDB for MySQL memungkinkan Anda membuat berbagai jenis tabel eksternal, termasuk tabel eksternal OSS, RDS for MySQL, ApsaraDB for MongoDB, Tablestore, dan MaxCompute.

Prasyarat

Catatan penggunaan

Anda hanya dapat membuat tabel eksternal OSS lintas Akun Alibaba Cloud.

Tabel eksternal OSS

Penting
  • Bucket OSS harus berada di wilayah yang sama dengan kluster AnalyticDB for MySQL.

  • Untuk membuat tabel eksternal Hudi, Iceberg, atau Paimon, kluster Anda harus memenuhi persyaratan versi minor berikut:

    • Tabel eksternal Hudi: Versi minor kluster harus 3.1.9.2 atau lebih baru.

    • Tabel eksternal Iceberg: Versi minor kluster harus 3.2.3.0 atau lebih baru.

    • Tabel eksternal Paimon: Versi minor kluster harus 3.2.6.1 atau lebih baru.

    Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di Konsol AnalyticDB for MySQL.

  • Setelah membuat tabel eksternal OSS partisi, jalankan pernyataan MSCK REPAIR TABLE untuk menyinkronkan partisi. Jika tidak, Anda tidak dapat melakukan kueri data dari tabel eksternal tersebut.

  • Untuk membuat tabel eksternal OSS lintas Akun Alibaba Cloud, Anda harus menentukan parameter yang diperlukan saat membuat database eksternal. Untuk informasi selengkapnya, lihat CREATE EXTERNAL DATABASE.

Sintaksis

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

Parameter

Parameter

Wajib

Deskripsi

table_name (column_name column_type[, …])

Ya

Menentukan nama dan skema tabel.

Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan.

Penting

Saat membuat tabel eksternal Paimon, nama tabel, nama kolom, dan tipe data kolom harus sesuai dengan file Paimon. Jika skema tabel (misalnya nama atau tipe kolom) tidak cocok, skema Paimon akan diutamakan.

PARTITIONED BY (column_name column_type[, …])

Tidak

Menentukan kolom kunci partisi. Parameter ini wajib jika Anda ingin membuat tabel eksternal partisi. Untuk membuat tabel partisi multi-level, tentukan beberapa kolom kunci partisi.

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

Ya

Menentukan pemisah kolom. Anda dapat menentukan karakter apa pun, tetapi harus sesuai dengan pemisah yang digunakan dalam file data. Topik ini menggunakan koma (,) sebagai contoh.

Penting

Parameter ini hanya didukung ketika STORED AS TEXTFILE atau STORED AS JSON ditentukan.

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

Ya

Menentukan format file.

Jika format file adalah .txt atau .csv, atur parameter ini ke STORED AS TEXTFILE.

File dalam format PARQUET mendukung tipe data STRUCT, termasuk tipe bersarang.

Penting

Hanya kluster dengan versi minor 3.1.8.0 atau lebih baru yang mendukung file PARQUET yang menggunakan tipe data STRUCT.

LOCATION

Ya

Menentukan path file atau direktori OSS.

Saat menentukan path direktori OSS, ikuti aturan berikut untuk mencegah kegagalan kueri atau hasil yang tidak diharapkan:

  • Path direktori harus diakhiri dengan garis miring maju (/).

  • Semua file dalam direktori harus memiliki format file yang sama.

  • Semua file dalam direktori harus memiliki jumlah bidang, urutan bidang, dan tipe data bidang yang sama.

Saat membuat tabel eksternal partisi, atur LOCATION ke direktori induk partisi. Misalnya, jika path file OSS adalah oss://testBucketname/testfolder/p1=2023-06-13/data.csv, Anda harus menentukan LOCATION 'oss://testBucketname/testfolder/' untuk membuat tabel eksternal partisi dengan p1 sebagai kolom kunci partisi.

Penting
  • Saat membuat tabel eksternal Hudi, pastikan file metadata Hudi bernama .hoodie ada di path yang ditentukan.

  • Jika Anda mengatur auto.create.location=true dan path LOCATION tidak ada saat membuat tabel eksternal partisi, direktori OSS akan dibuat secara otomatis.

type

Tidak

Tipe tabel eksternal Hudi. Nilai yang valid:

  • COW (default): Copy on Write. Tipe ini cocok untuk beban kerja yang dominan membaca.

  • MOR: Merge on Read. Tipe ini cocok untuk beban kerja yang dominan menulis.

Penting

Parameter ini wajib hanya ketika STORED AS HUDI ditentukan.

auto.create.location

Tidak

Menentukan apakah path file atau direktori OSS dibuat secara otomatis. Nilai yang valid:

  • true: Membuat path secara otomatis.

  • false (default): Tidak membuat path secara otomatis.

Penting

Parameter ini hanya berlaku saat membuat tabel eksternal partisi.

metadata_location

Tidak

Menentukan path file metadata untuk tabel eksternal Iceberg.

Penting
  • Parameter ini wajib hanya ketika STORED AS ICEBERG ditentukan.

  • Gunakan file metadata terbaru untuk memastikan Anda dapat melakukan kueri data terkini.

Contoh

Contoh 1: Buat tabel eksternal non-partisi

  • Buat tabel eksternal yang disimpan sebagai 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';
  • Buat tabel eksternal yang disimpan sebagai 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');
  • Buat tabel eksternal yang disimpan sebagai 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';
  • Buat tabel eksternal yang disimpan sebagai 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');
  • Buat tabel eksternal yang disimpan sebagai 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/';

Contoh 2: Buat tabel eksternal partisi

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/';

Contoh 3: Buat tabel eksternal partisi multi-level

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/';

Tabel eksternal RDS for MySQL

Penting
  • Untuk membuat tabel eksternal RDS for MySQL, Anda harus terlebih dahulu mengaktifkan ENI pada halaman Cluster Information di Konsol AnalyticDB for MySQL. Mengaktifkan atau menonaktifkan ENI menyebabkan gangguan koneksi database selama sekitar dua menit, sehingga operasi baca dan tulis gagal. Evaluasi dampak potensial dengan cermat sebelum mengaktifkan atau menonaktifkan ENI.

  • Instans RDS for MySQL harus berada di VPC yang sama dengan kluster AnalyticDB for MySQL.

Sintaksis

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

Parameter

Parameter

Wajib

Deskripsi

table_name (column_name column_type[, …])

Ya

Menentukan nama dan skema tabel.

Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan.

ENGINE='MYSQL'

Ya

Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke RDS for MySQL, atur nilai ini ke MYSQL.

TABLE_PROPERTIES

Ya

Properti tabel eksternal.

url

Ya

Titik akhir VPC, nomor port, dan nama database instans RDS for MySQL. Untuk informasi cara mendapatkan titik akhir VPC, lihat Lihat dan ubah titik akhir serta nomor port instans ApsaraDB RDS for MySQL.

tablename

Ya

Nama tabel di database RDS for MySQL.

username

Ya

Akun database RDS for MySQL.

password

Ya

Password akun database RDS for MySQL.

charset

Tidak

Set karakter tabel eksternal MySQL. Nilai yang valid:

  • gbk

  • UTF8 (default)

  • utf8mb4

Contoh

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

Tabel eksternal ApsaraDB for MongoDB

Penting
  • Untuk membuat tabel eksternal ApsaraDB for MongoDB, Anda harus terlebih dahulu mengaktifkan ENI pada halaman Cluster Information di Konsol AnalyticDB for MySQL. Mengaktifkan atau menonaktifkan ENI menyebabkan gangguan koneksi database selama sekitar dua menit, sehingga operasi baca dan tulis gagal. Evaluasi dampak potensial dengan cermat sebelum mengaktifkan atau menonaktifkan ENI.

  • Instans ApsaraDB for MongoDB harus berada di VPC yang sama dengan kluster AnalyticDB for MySQL.

Sintaksis

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

Parameter

Parameter

Wajib

Deskripsi

table_name (column_name column_type[, …])

Ya

Menentukan nama dan skema tabel.

Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan.

ENGINE='MONGODB'

Ya

Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke ApsaraDB for MongoDB, atur nilai ini ke MONGODB.

TABLE_PROPERTIES

Ya

Properti tabel eksternal.

mapped_name

Ya

Nama koleksi MongoDB.

location

Ya

titik akhir vpc instans ApsaraDB for MongoDB.

username

Ya

Akun database ApsaraDB for MongoDB.

Catatan

ApsaraDB for MongoDB memverifikasi akun dan password terhadap database tujuan. Gunakan akun database yang ditentukan dalam titik akhir vpc. Jika mengalami masalah, hubungi dukungan teknis.

password

Ya

Password akun database ApsaraDB for MongoDB.

Contoh

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

Tabel eksternal Tablestore

Penting

Jika instans Tablestore menggunakan VPC, VPC tersebut harus sama dengan kluster AnalyticDB for MySQL Anda.

Sintaksis

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='OTS'
TABLE_PROPERTIES = '{
	"mapped_name":"table_name",
	"location":"tablestore_vpc_address"
}';

Parameter

Parameter

Wajib

Deskripsi

table_name (column_name column_type[, …])

Ya

Menentukan nama dan skema tabel. Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan.

ENGINE='OTS'

Ya

Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke Tablestore, atur nilai ini ke OTS.

mapped_name

Ya

Nama tabel di instans Tablestore. Login ke Konsol Tablestore dan temukan nama tabel pada halaman Instance Management.

location

Ya

Titik akhir VPC instans Tablestore. Login ke Konsol Tablestore dan temukan titik akhir VPC instans pada halaman Instance Management.

Contoh

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

Tabel eksternal MaxCompute

Penting
  • Proyek MaxCompute harus berada di wilayah yang sama dengan kluster AnalyticDB for MySQL.

  • Untuk membuat tabel eksternal MaxCompute secara batch, lihat IMPORT FOREIGN SCHEMA.

Sintaksis

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

Parameter

Parameter

Wajib

Deskripsi

table_name (column_name column_type[, …])

Ya

Menentukan nama dan skema tabel. Skema tabel harus mencakup kolom kunci partisi.

table_name dan column_name menentukan nama tabel dan nama kolom. Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan.

column_type mendukung tipe data dasar dan kompleks MaxCompute, seperti ARRAY, MAP, dan STRUCT.

Catatan

Versi minor 3.2.1.0 dan lebih baru mendukung tipe data kompleks MaxCompute. Untuk informasi selengkapnya tentang tipe data kompleks, lihat Tipe data kompleks.

Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, login ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

ENGINE='ODPS'

Ya

Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke MaxCompute, atur nilai ini ke ODPS.

endpoint

Ya

Titik akhir layanan MaxCompute.

Catatan

Anda hanya dapat mengakses MaxCompute melalui titik akhir VPC. Untuk melihat titik akhir MaxCompute, lihat Titik Akhir.

accessid

Ya

ID AccessKey Akun Alibaba Cloud atau Pengguna RAM yang memiliki izin untuk mengakses MaxCompute.

Untuk informasi cara mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Dapatkan Pasangan Kunci Akses.

accesskey

Ya

Rahasia AccessKey Akun Alibaba Cloud atau Pengguna RAM.

Untuk informasi cara mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Dapatkan Pasangan Kunci Akses.

partition_column

Tidak

Kolom kunci partisi. Parameter ini wajib jika tabel MaxCompute adalah tabel partisi.

project_name

Ya

Nama proyek MaxCompute.

table_name

Ya

Nama tabel di proyek MaxCompute.

auto_refresh

Tidak

Menentukan apakah fitur refresh skema otomatis diaktifkan untuk tabel eksternal MaxCompute saat ini. Nilai yang valid:

  • true: mengaktifkan fitur.

  • false (default): menonaktifkan fitur.

Penting
  • Hanya didukung untuk kluster versi minor 3.2.7.0 atau lebih baru.

  • Sebelum mengaktifkan fitur ini, Anda harus mengonfigurasi sakelar tingkat kluster external_table_schema_refresh_enabled. Untuk informasi selengkapnya, lihat Konfigurasi tingkat kluster dalam topik ini.

auto_refresh_mode

Tidak

Mode refresh skema. Parameter ini hanya berlaku ketika auto_refresh=true. Nilai yang valid:

  • add_only (default): hanya menyinkronkan secara otomatis kolom yang ditambahkan ke tabel sumber MaxCompute. Jika kolom dihapus atau tipe kolom diubah di tabel sumber, hanya peringatan yang dicatat dan metadata tabel eksternal tidak dimodifikasi secara otomatis.

  • full: menyinkronkan secara otomatis kolom yang ditambahkan, dihapus, dan perubahan tipe kolom dari tabel sumber MaxCompute agar skema tabel eksternal tetap konsisten dengan tabel sumber.

Penting

Hanya didukung untuk kluster versi minor 3.2.7.0 atau lebih baru.

Contoh

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

Refresh skema otomatis (auto refresh)

Tabel eksternal MaxCompute mendukung refresh skema otomatis. Setelah diaktifkan, perubahan skema di tabel sumber MaxCompute disinkronkan secara otomatis ke tabel eksternal pada setiap siklus refresh, tanpa perlu membuat ulang tabel eksternal atau merefresh-nya secara manual. Apakah fitur ini diaktifkan dan cakupan refresh-nya dikendalikan oleh parameter auto_refresh dan auto_refresh_mode yang Anda tentukan saat membuat tabel. Untuk informasi selengkapnya, lihat Parameter di atas.

Konfigurasi tingkat kluster

Sebelum menggunakan pengaturan tingkat tabel auto_refresh=true untuk mengaktifkan refresh skema otomatis, Anda harus menjalankan pernyataan berikut untuk mengaktifkan sakelar refresh otomatis tingkat kluster.

-- Aktifkan fitur refresh skema otomatis.
SET ADB_CONFIG external_table_schema_refresh_enabled=true;

-- Interval polling untuk refresh skema otomatis, dalam milidetik. Nilai default: 300000 (5 menit). Konfigurasi ini berlaku setelah Anda restart kluster.
SET ADB_CONFIG external_table_schema_refresh_poll_interval_ms=300000;

Contoh

Contoh berikut membuat tabel eksternal MaxCompute dengan refresh skema otomatis diaktifkan dalam mode add_only:

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

Setelah kolom ditambahkan ke tabel sumber MaxCompute, tabel eksternal secara otomatis menambahkan kolom yang sesuai setelah refresh berikutnya. Kolom yang dihapus atau perubahan tipe kolom di tabel sumber tidak diterapkan secara otomatis.

Contoh berikut membuat tabel eksternal MaxCompute dengan refresh skema otomatis diaktifkan dalam mode full:

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

Setelah kolom ditambahkan, dihapus, atau tipe kolomnya diubah di tabel sumber MaxCompute, tabel eksternal menyinkronkan metadata setelah refresh berikutnya.

Catatan penggunaan

  • Refresh skema otomatis hanya didukung untuk tabel eksternal MaxCompute yang menggunakan ENGINE='ODPS'.

  • add_only adalah mode default dan cocok untuk lingkungan produksi yang hanya mengizinkan penambahan kolom.

  • Mode full secara otomatis menyinkronkan kolom yang dihapus dan perubahan tipe kolom, yang dapat memengaruhi pernyataan SQL, aplikasi, laporan, atau tampilan yang bergantung pada kolom lama. Gunakan mode ini dengan hati-hati.

  • Jika Anda membuat tampilan yang menggunakan * pada tabel eksternal MaxCompute (misalnya, CREATE VIEW view_name AS SELECT * FROM external_table), * diekspansi dan disimpan sebagai daftar tetap kolom saat tampilan dibuat. Setelah mode full menyinkronkan kolom yang dihapus atau diganti nama dari tabel sumber dan perubahan tersebut melibatkan kolom yang disimpan di tampilan, kueri terhadap tampilan akan mengembalikan error yang menunjukkan bahwa tampilan sudah usang dan harus dibuat ulang. Ini adalah perilaku yang diharapkan. Kami menyarankan agar Anda menghindari penggunaan * dalam tampilan. Untuk informasi selengkapnya, lihat CREATE VIEW.

Dokumentasi terkait