Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
INSERT INTO
Menyisipkan baris baru ke dalam tabel tujuan berdasarkanSELECT
pernyataan permintaan yang berjalan pada tabel sumber, atau didasarkan pada satu setVALUES
disediakan sebagai bagian dari pernyataan. Saat tabel sumber didasarkan pada data dasar dalam satu format, seperti CSV atau JSON, dan tabel tujuan didasarkan pada format lain, seperti Parquet atau ORC, Anda dapat menggunakanINSERT INTO
query untuk mengubah data yang dipilih ke dalam format tabel tujuan.
Pertimbangan dan batasan
Pertimbangkan hal berikut saat menggunakanINSERT
Pertanyaan dengan Athena.
-
Saat menjalankan
INSERT
permintaan pada tabel dengan data dasar yang dienkripsi di Amazon S3, output file yangINSERT
query menulis tidak dienkripsi secara default. Kami merekomendasikan bahwa Anda mengenkripsiINSERT
permintaan hasil jika Anda memasukkan ke dalam tabel dengan data terenkripsi.Untuk informasi selengkapnya tentang enkripsi hasil kueri menggunakan konsol, lihatEnkripsi hasil kueri Athena yang disimpan di Amazon S3. Untuk mengaktifkan enkripsi menggunakan AWS CLI atau Athena API, gunakan
EncryptionConfiguration
properti StartQueryExecutiontindakan untuk menentukan opsi enkripsi Amazon S3 sesuai dengan kebutuhan Anda. -
Untuk
INSERT INTO
pernyataan, setelan pemilik bucket yang diharapkan tidak berlaku untuk lokasi tabel tujuan di Amazon S3. Setelan pemilik bucket yang diharapkan hanya berlaku untuk lokasi keluaran Amazon S3 yang Anda tentukan untuk hasil kueri Athena. Untuk informasi selengkapnya, lihat Tentukan lokasi hasil kueri menggunakan konsol Athena. -
Untuk
INSERT INTO
pernyataan yang sesuai dengan ACID, lihatINSERT INTO
bagian. Perbarui data tabel Gunung Es
Format yang didukung dan SerDes
Anda dapat menjalankan INSERT
kueri pada tabel yang dibuat dari data dengan format berikut dan SerDes.
Format data | SerDe |
---|---|
Avro |
org.apache.hadoop.hive.serde2.avro. AvroSerDe |
Ion | com.amazon.ionhiveserde. IonHiveSerDe |
JSON |
org.apache.hive.hcatalog.data. JsonSerDe |
ORC |
org.apache.hadoop.hive.ql.io.orc. OrcSerde |
Parquet |
org.apache.hadoop.hive.ql.io.parquet.serde. ParquetHiveSerDe |
File teks |
org.apache.hadoop.hive.serde2.lazy. LazySimpleSerDe catatanCSV, TSV, dan file yang dibatasi khusus didukung. |
Tabel bucketed tidak didukung
INSERT INTO
tidak didukung pada tabel bucketed. Untuk informasi selengkapnya, lihat Gunakan partisi dan bucketing.
Kueri federasi tidak didukung
INSERT INTO
tidak didukung untuk kueri federasi. Mencoba melakukannya dapat mengakibatkan pesan kesalahan Operasi ini saat ini tidak didukung untuk katalog eksternal
. Untuk informasi tentang kueri federasi, lihat. Gunakan Kueri Federasi Amazon Athena
Partisi
Pertimbangkan poin di bagian ini saat menggunakan partisi dengan INSERT
INTO
atau CREATE TABLE AS SELECT
kueri.
Batas
ParameterINSERT INTO
mendukung menulis maksimal 100 partisi ke tabel tujuan. Jika Anda menjalankanSELECT
klausul di atas tabel dengan lebih dari 100 partisi, permintaan gagal kecualiSELECT
permintaan terbatas untuk 100 partisi atau lebih sedikit.
Untuk informasi tentang cara mengatasi batasan ini, lihatGunakan CTAS dan INSERT INTO untuk bekerja di sekitar batas partisi 100.
Pemesanan kolom
INSERT INTO
atauCREATE TABLE AS SELECT
berharap kolom dipartisi menjadi kolom terakhir dalam daftar kolom diproyeksikan dalamSELECT
.
Jika tabel sumber non-dipartisi, atau dipartisi pada kolom yang berbeda dibandingkan dengan tabel tujuan, kueri sepertiINSERT INTO
mempertimbangkan nilai-nilai di kolom terakhir dari tabel sumber menjadi nilai untuk kolom partisi dalam tabel tujuan. Ingatlah hal ini saat mencoba membuat tabel dipartisi dari tabel non-dipartisi.destination_table
SELECT * FROM
source_table
Sumber daya
Untuk informasi selengkapnya tentang penggunaanINSERT INTO
dengan partisi, lihat sumber daya berikut.
-
Untuk memasukkan data dipartisi ke dalam tabel dipartisi, lihatGunakan CTAS dan INSERT INTO untuk bekerja di sekitar batas partisi 100.
-
Untuk memasukkan data unpartitioned ke dalam tabel dipartisi, lihatGunakan CTAS dan INSERT INTO untuk ETL dan analisis data.
File yang ditulis ke Amazon S3
Athena menulis file ke lokasi sumber data di Amazon S3 sebagai hasil dariINSERT
Perintah. SetiapINSERT
operasi menciptakan file baru, daripada menambahkan ke file yang ada. Lokasi file tergantung pada struktur tabel danSELECT
query, jika ada. Athena menghasilkan file manifest data untuk setiapINSERT
kueri. Manifest melacak file yang kueri menulis. Ini disimpan ke lokasi hasil kueri Athena di Amazon S3. Untuk informasi selengkapnya, lihat Identifikasi file keluaran kueri.
Hindari pembaruan yang sangat transaksional
Saat Anda menggunakan INSERT INTO
untuk menambahkan baris ke tabel di Amazon S3, Athena tidak menulis ulang atau memodifikasi file yang ada. Sebaliknya, ia menulis baris sebagai satu atau lebih file baru. Karena tabel dengan banyak file kecil menghasilkan kinerja kueri yang lebih rendah, dan operasi tulis dan baca seperti PutObject
dan GetObject
menghasilkan biaya yang lebih tinggi dari Amazon S3, pertimbangkan opsi berikut saat menggunakan: INSERT INTO
-
Jalankan
INSERT INTO
operasi lebih jarang pada batch baris yang lebih besar. -
Untuk volume konsumsi data yang besar, pertimbangkan untuk menggunakan layanan seperti Amazon Data Firehose.
-
Hindari menggunakan
INSERT INTO
sama sekali. Sebagai gantinya, kumpulkan baris ke dalam file yang lebih besar dan unggah langsung ke Amazon S3 di mana mereka dapat ditanyakan oleh Athena.
Menemukan file yatim piatu
Jika INSERT INTO
pernyataan CTAS
atau gagal, data yatim piatu dapat ditinggalkan di lokasi data dan dapat dibaca dalam kueri berikutnya. Untuk menemukan file yatim piatu untuk pemeriksaan atau penghapusan, Anda dapat menggunakan file manifest data yang disediakan Athena untuk melacak daftar file yang akan ditulis. Untuk informasi selengkapnya, lihat Identifikasi file keluaran kueri dan DataManifestLocation.
MASUKKAN KE... PILIH
Menentukan kueri untuk berjalan di satu tabel,source_table
, yang menentukan baris untuk dimasukkan ke dalam tabel kedua,destination_table
. JikaSELECT
query menentukan kolom dalamsource_table
, kolom harus tepat sesuai dengan yang ada didestination_table
.
Untuk informasi selengkapnya tentang kueri SELECT
ini, lihat SELECT.
Sinopsis
INSERT INTO destination_table
SELECT select_query
FROM source_table_or_view
Contoh
Pilih semua baris divancouver_pageviews
tabel dan memasukkan mereka ke dalamcanada_pageviews
Tabel:
INSERT INTO canada_pageviews SELECT * FROM vancouver_pageviews;
Pilih hanya baris tersebut divancouver_pageviews
Tabel tempatdate
kolom memiliki nilai antara2019-07-01
dan2019-07-31
, dan kemudian masukkan ke dalamcanada_july_pageviews
:
INSERT INTO canada_july_pageviews SELECT * FROM vancouver_pageviews WHERE date BETWEEN date '2019-07-01' AND '2019-07-31';
Pilih nilai dalamcity
danstate
kolom dicities_world
tabel hanya dari baris dengan nilaiusa
dicountry
kolom dan memasukkan mereka kecity
danstate
kolom dicities_usa
Tabel:
INSERT INTO cities_usa (city,state) SELECT city,state FROM cities_world WHERE country='usa'
MASUKKAN KEDALAM... NILAI
Menyisipkan baris ke dalam tabel yang ada dengan menentukan kolom dan nilai-nilai. kolom yang ditentukan dan tipe data yang terkait harus tepat sesuai dengan kolom dan tipe data dalam tabel tujuan.
penting
Kami tidak menyarankan untuk memasukkan baris menggunakanVALUES
karena Athena menghasilkan file untuk setiapINSERT
operasi. Ini dapat menyebabkan banyak file kecil yang akan dibuat dan menurunkan performa permintaan tabel. Untuk mengidentifikasi file yangINSERT
query menciptakan, memeriksa file manifest data. Untuk informasi selengkapnya, lihat Bekerja dengan hasil kueri dan kueri terbaru.
Sinopsis
INSERT INTO destination_table [(col1,col2,...)]
VALUES (col1value,col2value,...)[,
(col1value,col2value,...)][,
...]
Contoh
Dalam contoh berikut, tabel kota memiliki tiga kolom:id
,city
,state
,state_motto
. Parameterid
Kolom adalah tipeINT
dan semua lajur lain adalah jenisVARCHAR
.
Sisipkan satu baris ke dalamcities
tabel, dengan semua nilai kolom yang ditentukan:
INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')
Masukkan dua baris ke dalamcities
Tabel:
INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'), (3,'Boise','ID','Esto perpetua')