Tema ini menjelaskan cara menggunakan tabel eksternal dan pernyataan INSERT INTO untuk mengekspor data dari AnalyticDB for MySQL Data Warehouse Edition (V3.0) ke Object Storage Service (OSS). Hanya file CSV dan Parquet yang dapat diekspor dari AnalyticDB for MySQL ke OSS.
Prasyarat
Sebuah direktori dibuat di OSS dengan melakukan operasi berikut untuk menyimpan data AnalyticDB for MySQL:
- Catatan
Pastikan bahwa Bucket OSS yang terlibat berada di wilayah yang sama dengan kluster AnalyticDB for MySQL Data Warehouse Edition (V3.0).
Buat sebuah bucket di konsol OSS. Untuk informasi lebih lanjut, lihat Buat bucket.
Buat sebuah direktori di dalam bucket. Untuk informasi lebih lanjut, lihat Buat direktori.
Sebagai contoh, Anda dapat membuat direktori bernama
adb_data/di OSS untuk menyimpan data yang diekspor dari AnalyticDB for MySQL Data Warehouse Edition (V3.0).
Sebuah kluster Data Warehouse Edition (V3.0) AnalyticDB for MySQL, akun, dan database telah dibuat. Daftar putih telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Buat kluster.
Jika kluster AnalyticDB for MySQL Data Warehouse Edition (V3.0) berada dalam mode elastis, Anda harus masuk ke konsol AnalyticDB for MySQL dan melihat informasi kluster, lalu mengaktifkan Antarmuka Jaringan Elastis (ENI) di bagian Informasi Jaringan.
Prosedur
Dalam contoh ini, data diekspor dari tabel source_table di database adb_demo dari kluster AnalyticDB for MySQL Data Warehouse Edition (V3.0) ke direktori adb_data di OSS.
Hubungkan ke kluster AnalyticDB for MySQL dan database. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster AnalyticDB for MySQL.
Buat tabel eksternal di database
adb_demo. Untuk informasi lebih lanjut, lihat bagian "Tabel eksternal OSS non-partisi" dari topik Menggunakan tabel eksternal untuk mengimpor data ke Data Warehouse Edition.Pilih pernyataan yang dapat dieksekusi untuk menulis data berdasarkan jenis tabel eksternal, dan tulis data sumber ke tabel eksternal yang dibuat di Langkah 2. Untuk informasi lebih lanjut tentang sintaksis yang didukung untuk berbagai jenis tabel eksternal, lihat bagian "Sintaksis yang digunakan untuk menulis data ke tabel eksternal yang tidak dipartisi" dan "Sintaksis yang digunakan untuk menulis data ke tabel eksternal yang dipartisi" dari topik ini.
Setelah tugas penulisan di Langkah 3 selesai, masuk ke konsol OSS dan lihat data yang diekspor ke direktori di OSS. Sebagai alternatif, hubungkan ke kluster AnalyticDB for MySQL untuk memeriksa data yang diekspor ke tabel eksternal.
Sintaksis yang digunakan untuk menulis data ke tabel eksternal yang tidak dipartisi
Ketika Anda mengeksekusi INSERT INTO atau INSERT OVERWRITE SELECT untuk mengimpor data, pernyataan tersebut secara default dieksekusi secara sinkron. Jika ratusan gigabyte data diimpor, koneksi antara klien dan server AnalyticDB for MySQL mungkin ditutup, dan tugas impor data gagal. Dalam hal ini, kami sarankan Anda mengeksekusi pernyataan INSERT OVERWRITE SELECT secara asinkron untuk mengimpor data dengan menambahkan SUBMIT JOB di awal pernyataan. Contoh: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Untuk informasi lebih lanjut tentang cara menyerahkan tugas asinkron, lihat Kirim pekerjaan impor secara asinkron.
Secara default, objek yang diimpor ke OSS tidak berisi nama kolom. Jika Anda ingin objek-objek ini memiliki nama kolom, tambahkan petunjuk berikut di awal pernyataan impor data: /*+sql_output_oss_file_head_enable=true*/.
INSERT SELECT FROM
Fitur: Jika data Anda disimpan di tabel yang berbeda, Anda dapat mengeksekusi pernyataan
INSERT SELECT FROMuntuk menyalin data ke tabel eksternal. Anda dapat menulis data dari tabel sumber ke tabel eksternal, lalu mengekspor data ke OSS. Setiap kali data ditulis, objek OSS baru dihasilkan.PentingKolom yang ingin Anda ekspor harus semuanya ditulis ke tabel eksternal. Anda tidak dapat menentukan kolom tertentu yang akan ditulis.
Sintaksis:
INSERT INTO table_name SELECT select_statement FROM from_statement;Contoh:
insert into oss_table select col1, col2, col3 from source_table;
INSERT OVERWRITE SELECT
Fitur: Anda dapat mengeksekusi pernyataan
INSERT OVERWRITE SELECTuntuk menyisipkan data secara batch ke tabel. Jika data sudah ada di tabel eksternal, semua objek di jalur tabel eksternal asli dihapus sebelum objek OSS baru dihasilkan.PentingKolom yang ingin Anda ekspor harus semuanya ditulis ke tabel eksternal. Anda tidak dapat menentukan kolom tertentu yang akan ditulis.
Sintaksis:
INSERT OVERWRITE table_name select_statement;Contoh:
INSERT OVERWRITE oss_table SELECT col1, col2, col3 FROM source_table;
REPLACE SELECT FROM
Fitur: Tabel eksternal OSS tidak mendukung kunci utama. Kinerja penulisan pernyataan
REPLACE SELECT FROMkonsisten dengan pernyataanINSERT SELECT FROM. Data ditambahkan ke tabel lain. Jika data sudah ada di tabel tujuan, data yang ada tetap tidak berubah, dan data baru disimpan ke objek OSS baru.
Ekspor data dalam format CSV ke objek OSS tunggal (format Parquet tidak didukung)
Fitur: Anda dapat menentukan objek OSS tunggal menggunakan petunjuk dan mengekspor data ke objek ini. Ketika kata kunci overwrite disertakan, objek dengan nama yang sama di direktori yang didefinisikan dalam parameter TABLE_PROPERTIES tabel eksternal akan ditimpa. Objek lain di direktori tidak terpengaruh.
PentingKolom yang ingin Anda ekspor harus semuanya ditulis ke tabel eksternal. Anda tidak dapat menentukan kolom tertentu yang akan ditulis.
Deskripsi versi:
Versi AnalyticDB for MySQL sebelum 3.1.2 tidak mendukung fitur ini. Nama objek dihasilkan secara otomatis oleh sistem, dan beberapa objek diekspor. Sistem secara dinamis menentukan jumlah objek berdasarkan seberapa cepat tugas konkuren dijalankan.
Versi AnalyticDB for MySQL 3.1.2 dan seterusnya memungkinkan Anda mengekspor data dari tabel eksternal AnalyticDB for MySQL dalam format CSV ke objek OSS tunggal menggunakan petunjuk. Anda dapat menentukan nama untuk objek tersebut. Jika data tabel eksternal diekspor tanpa petunjuk, beberapa objek diekspor seperti pada versi AnalyticDB for MySQL sebelum 3.1.2.
Sintaksis:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] table_name SELECT select_statement FROM from_statement;Contoh:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] oss_table SELECT * FROM source_table;
Sintaksis yang digunakan untuk menulis data ke tabel eksternal yang dipartisi
Ketika Anda mengeksekusi INSERT INTO atau INSERT OVERWRITE SELECT untuk mengimpor data, pernyataan tersebut secara default dieksekusi secara sinkron. Jika ratusan gigabyte data diimpor, koneksi antara klien dan server AnalyticDB for MySQL mungkin ditutup, dan tugas impor data gagal. Dalam hal ini, kami sarankan Anda mengeksekusi pernyataan INSERT OVERWRITE SELECT secara asinkron untuk mengimpor data dengan menambahkan SUBMIT JOB di awal pernyataan. Contoh: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Untuk informasi lebih lanjut tentang cara menyerahkan tugas asinkron, lihat Kirim pekerjaan impor secara asinkron.
Secara default, objek yang diimpor ke OSS tidak berisi nama kolom. Jika Anda ingin objek-objek ini memiliki nama kolom, tambahkan petunjuk berikut di awal pernyataan impor data: /*+sql_output_oss_file_head_enable=true*/.
Ketika Anda menulis data dari tabel yang dipartisi ke objek, objek tersebut tidak berisi data dari kolom kunci partisi. Data dari kolom kunci partisi ditampilkan di direktori OSS.
Data dari tabel eksternal yang dipartisi tidak dapat diekspor ke objek OSS tunggal.
Sebagai contoh, dua kolom kunci partisi dan tiga kolom umum didefinisikan untuk tabel yang dipartisi. Kolom kunci partisi di partisi hash bernama pcol1, dan nilainya adalah 1. Kolom kunci partisi di partisi daftar bernama pcol2, dan nilainya adalah a. Data dari tabel yang dipartisi diekspor ke jalur adb_data/ di OSS. Jika Anda menulis data dari partisi yang pcol1-nya diatur ke 1 dan pcol2-nya diatur ke a, jalur relatif objek adalah adb_data/pcol1=1/pcol2=a/. Objek CSV atau Parquet tidak berisi nilai kolom pcol1 dan pcol2. Hanya nilai dari tiga kolom umum yang disertakan.
INSERT INTO PARTITION SELECT FROM
Fitur: Anda dapat mengeksekusi pernyataan INSERT INTO PARTITION SELECT FROM untuk menyisipkan data secara batch ke tabel eksternal yang dipartisi. Saat Anda menulis data, Anda dapat menentukan semua kolom partisi dan nilainya di bidang PARTITION. Anda juga dapat menentukan hanya nilai partisi tingkat tinggi. Nilai partisi tingkat rendah dihasilkan secara dinamis. Sebagai alternatif, Anda mungkin tidak menentukan bidang PARTITION. Dalam hal ini, nilai partisi semua tingkat dihasilkan secara dinamis.
Data baru ditambahkan ke partisi yang sesuai. Setiap kali data ditulis, objek OSS baru dihasilkan.
Kolom yang ingin Anda ekspor harus semuanya ditulis ke tabel eksternal. Anda tidak dapat menentukan kolom tertentu yang akan ditulis.
Partisi statis sepenuhnya
Sintaksis:
INSERT INTO table_name PARTITION(par1=val1,par2=val2,...)
select_statement;Contoh:
INSERT INTO oss_table_par PARTITION(par1=val1,par2=val2)
select col1, col2, col3 FROM source_table;Partisi statis-dinamis
Sintaksis:
INSERT INTO table_name PARTITION(par1=val1,par2,...)
select_statement;Contoh:
INSERT INTO oss_table_par PARTITION(par1=val1,par2)
SELECT col1, col2, col3, par2col FROM source_table;Partisi dinamis sepenuhnya
Sintaksis:
INSERT INTO table_name
select_statement;Contoh:
INSERT INTO oss_table_par
SELECT col1, col2, col3, par1col, par2col FROM source_table;INSERT OVERWRITE PARTITION SELECT
Fitur: Pernyataan INSERT OVERWRITE PARTITION SELECT digunakan dengan cara yang sama seperti pernyataan INSERT INTO PARTITION SELECT. Namun, ketika Anda mengeksekusi pernyataan INSERT OVERWRITE PARTITION SELECT, objek yang ada di partisi yang diinginkan dibersihkan. Objek di partisi yang tidak memiliki data baru yang ditulis tidak dibersihkan.
Sintaksis:
INSERT OVERWRITE table_name PARTITION(par1=val1,par2=val2,...)[IF NOT EXISTS]
select_statement;Contoh:
INSERT OVERWRITE oss_table_par PARTITION(par1=val1,par2=val2) IF NOT EXISTS
SELECT col1, col2, col3 FROM source_table;REPLACE INTO PARTITION SELECT FROM
Fitur: Tabel eksternal tidak mendukung kunci utama. Kinerja penulisan pernyataan REPLACE INTO PARTITION SELECT FROM konsisten dengan pernyataan INSERT INTO PARTITION SELECT FROM.
Pernyataan yang tidak didukung
AnalyticDB for MySQL tidak mengizinkan Anda menyisipkan data ke tabel eksternal per baris. INSERT INTO VALUES dan REPLACE INTO VALUES tidak didukung.