AnalyticDB for MySQL memungkinkan Anda membuat berbagai jenis tabel eksternal, termasuk tabel eksternal OSS, RDS for MySQL, ApsaraDB for MongoDB, Tablestore, dan MaxCompute.
Prasyarat
Kluster Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse AnalyticDB for MySQL telah dibuat.
Versi minor kluster harus 3.1.8.0 atau lebih baru.
CatatanUntuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di Konsol AnalyticDB for MySQL.
Anda harus terlebih dahulu membuat database eksternal. Untuk informasi selengkapnya, lihat CREATE EXTERNAL DATABASE.
Catatan penggunaan
Anda hanya dapat membuat tabel eksternal OSS lintas Akun Alibaba Cloud.
Tabel eksternal OSS
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 TABLEuntuk 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 |
| 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. |
| 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. |
| 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 |
| Ya | Menentukan format file. Jika format file adalah .txt atau .csv, atur parameter ini ke File dalam format Penting Hanya kluster dengan versi minor 3.1.8.0 atau lebih baru yang mendukung file |
| Ya | Menentukan path file atau direktori OSS. Saat menentukan path direktori OSS, ikuti aturan berikut untuk mencegah kegagalan kueri atau hasil yang tidak diharapkan:
Saat membuat tabel eksternal partisi, atur LOCATION ke direktori induk partisi. Misalnya, jika path file OSS adalah Penting
|
| Tidak | Tipe tabel eksternal Hudi. Nilai yang valid:
Penting Parameter ini wajib hanya ketika |
| Tidak | Menentukan apakah path file atau direktori OSS dibuat secara otomatis. Nilai yang valid:
Penting Parameter ini hanya berlaku saat membuat tabel eksternal partisi. |
| Tidak | Menentukan path file metadata untuk tabel eksternal Iceberg. Penting
|
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
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 |
| Ya | Menentukan nama dan skema tabel. Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan. |
| Ya | Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke RDS for MySQL, atur nilai ini ke MYSQL. |
| Ya | Properti tabel eksternal. |
| 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. |
| Ya | Nama tabel di database RDS for MySQL. |
| Ya | Akun database RDS for MySQL. |
| Ya | Password akun database RDS for MySQL. |
| Tidak | Set karakter tabel eksternal MySQL. Nilai yang valid:
|
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
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 |
| Ya | Menentukan nama dan skema tabel. Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan. |
| Ya | Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke ApsaraDB for MongoDB, atur nilai ini ke MONGODB. |
| 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
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 |
| Ya | Menentukan nama dan skema tabel. Untuk informasi tentang aturan penamaan tabel dan kolom, lihat Konvensi penamaan. |
| Ya | Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke Tablestore, atur nilai ini ke OTS. |
| Ya | Nama tabel di instans Tablestore. Login ke Konsol Tablestore dan temukan nama tabel pada halaman Instance Management. |
| 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
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 |
| Ya | Menentukan nama dan skema tabel. Skema tabel harus mencakup kolom kunci partisi.
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. |
| Ya | Mesin penyimpanan tabel eksternal. Untuk membaca dan menulis data ke MaxCompute, atur nilai ini ke ODPS. |
| Ya | Titik akhir layanan MaxCompute. Catatan Anda hanya dapat mengakses MaxCompute melalui titik akhir VPC. Untuk melihat titik akhir MaxCompute, lihat Titik Akhir. |
| 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. |
| Ya | Rahasia AccessKey Akun Alibaba Cloud atau Pengguna RAM. Untuk informasi cara mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Dapatkan Pasangan Kunci Akses. |
| Tidak | Kolom kunci partisi. Parameter ini wajib jika tabel MaxCompute adalah tabel partisi. |
| Ya | Nama proyek MaxCompute. |
| Ya | Nama tabel di proyek MaxCompute. |
| Tidak | Menentukan apakah fitur refresh skema otomatis diaktifkan untuk tabel eksternal MaxCompute saat ini. Nilai yang valid:
Penting
|
| Tidak | Mode refresh skema. Parameter ini hanya berlaku ketika
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
Tabel eksternal OSS: Impor data dari OSS menggunakan tabel eksternal.
Tabel eksternal RDS for MySQL: Impor data dari RDS for MySQL menggunakan tabel eksternal.
Tabel eksternal ApsaraDB for MongoDB: Impor data dari ApsaraDB for MongoDB menggunakan tabel eksternal.
Tabel eksternal Tablestore: Kueri dan impor data Tablestore.
Tabel eksternal MaxCompute: Impor data dari MaxCompute menggunakan tabel eksternal.