INSERT(tabel eksternal) - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

INSERT(tabel eksternal)

Menyisipkan hasil SELECT kueri ke dalam tabel eksternal yang ada pada katalog eksternal seperti untuk AWS Glue, AWS Lake Formation, atau metastore Apache Hive. Gunakan peran AWS Identity and Access Management (IAM) yang sama yang digunakan untuk CREATE EXTERNAL SCHEMA perintah untuk berinteraksi dengan katalog eksternal dan Amazon S3.

Untuk tabel yang tidak dipartisi, perintah INSERT (tabel eksternal) menulis data ke lokasi Amazon S3 yang ditentukan dalam tabel, berdasarkan properti tabel dan format file yang ditentukan.

Untuk tabel yang dipartisi, INSERT (tabel eksternal) menulis data ke lokasi Amazon S3 sesuai dengan kunci partisi yang ditentukan dalam tabel. Ini juga secara otomatis mendaftarkan partisi baru di katalog eksternal setelah INSERT operasi selesai.

Anda tidak dapat menjalankan INSERT (tabel eksternal) dalam blok transaksi (BEGIN... END). Untuk informasi lebih lanjut tentang transaksi, lihatIsolasi yang dapat diserialisasi.

Sintaks

INSERT INTO external_schema.table_name { select_statement }

Parameter

external_schema.table_name

Nama skema eksternal yang ada dan tabel eksternal target untuk dimasukkan ke dalam.

select_statement

Pernyataan yang menyisipkan satu atau lebih baris ke dalam tabel eksternal dengan mendefinisikan kueri apa pun. Semua baris yang dihasilkan kueri ditulis ke Amazon S3 dalam format teks atau Parket berdasarkan definisi tabel. Kueri harus mengembalikan daftar kolom yang kompatibel dengan tipe data kolom di tabel eksternal. Namun, nama kolom tidak harus cocok.

Catatan penggunaan

Jumlah kolom dalam SELECT kueri harus sama dengan jumlah kolom data dan kolom partisi. Lokasi dan tipe data dari setiap kolom data harus sesuai dengan tabel eksternal. Lokasi kolom partisi harus berada di akhir SELECT kueri, dalam urutan yang sama mereka didefinisikan dalam CREATE EXTERNAL TABLE perintah. Nama kolom tidak harus cocok.

Dalam beberapa kasus, Anda mungkin ingin menjalankan perintah INSERT (tabel eksternal) pada Katalog AWS Glue Data atau metastore Hive. Dalam hal ini AWS Glue, IAM peran yang digunakan untuk membuat skema eksternal harus memiliki izin baca dan tulis di Amazon S3 dan. AWS Glue Jika Anda menggunakan AWS Lake Formation katalog, IAM peran ini menjadi pemilik tabel Formasi Danau yang baru. IAMPeran ini setidaknya harus memiliki izin berikut:

  • SELECT,INSERT, UPDATE izin pada tabel eksternal

  • Izin lokasi data di jalur Amazon S3 dari tabel eksternal

Untuk memastikan bahwa nama file unik, Amazon Redshift menggunakan format berikut untuk nama setiap file yang diunggah ke Amazon S3 secara default.

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

Contohnya adalah 20200303_004509_810669_1007_0001_part_00.parquet.

Pertimbangkan hal berikut saat menjalankan perintah INSERT (tabel eksternal):

  • Tabel eksternal yang memiliki format selain PARQUET atau TEXTFILE tidak didukung.

  • Perintah ini mendukung properti tabel yang ada seperti 'write.parallel', 'write.maxfilesize.mb', 'compression_type', dan 'serialization.null.format'. Untuk memperbarui nilai-nilai tersebut, jalankan ALTER TABLE SET TABLE PROPERTIES perintah.

  • Properti tabel numRows '' secara otomatis diperbarui menjelang akhir INSERT operasi. Properti tabel harus didefinisikan atau ditambahkan ke tabel jika tidak dibuat oleh operasi CREATE EXTERNAL TABLE AS.

  • LIMITKlausa tidak didukung di SELECT kueri luar. Sebagai gantinya, gunakan LIMIT klausa bersarang.

  • Anda dapat menggunakan STL_UNLOAD_LOG tabel untuk melacak file yang ditulis ke Amazon S3 oleh setiap operasi INSERT (tabel eksternal).

  • Amazon Redshift hanya mendukung enkripsi standar Amazon S3 INSERT untuk (tabel eksternal).

INSERT(tabel eksternal) contoh

Contoh berikut menyisipkan hasil SELECT pernyataan ke dalam tabel eksternal.

INSERT INTO spectrum.lineitem SELECT * FROM local_lineitem;

Contoh berikut menyisipkan hasil SELECT pernyataan ke dalam tabel eksternal dipartisi menggunakan partisi statis. Kolom partisi di-hardcode dalam pernyataan. SELECT Kolom partisi harus berada di akhir kueri.

INSERT INTO spectrum.customer SELECT name, age, gender, 'May', 28 FROM local_customer;

Contoh berikut menyisipkan hasil SELECT pernyataan ke dalam tabel eksternal dipartisi menggunakan partisi dinamis. Kolom partisi tidak di-hardcode. Data secara otomatis ditambahkan ke folder partisi yang ada, atau ke folder baru jika partisi baru ditambahkan.

INSERT INTO spectrum.customer SELECT name, age, gender, month, day FROM local_customer;