INSERT INTO - Amazon Athena

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 berdasarkanSELECTpernyataan permintaan yang berjalan pada tabel sumber, atau didasarkan pada satu setVALUESdisediakan 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 INTOquery untuk mengubah data yang dipilih ke dalam format tabel tujuan.

Pertimbangan dan batasan

Pertimbangkan hal berikut saat menggunakanINSERTPertanyaan dengan Athena.

  • Saat menjalankanINSERTpermintaan pada tabel dengan data dasar yang dienkripsi di Amazon S3, output file yangINSERTquery menulis tidak dienkripsi secara default. Kami merekomendasikan bahwa Anda mengenkripsiINSERTpermintaan 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, lihat INSERT 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

catatan

CSV, TSV, dan file yang dibatasi khusus didukung.

Tabel bucketed tidak didukung

INSERT INTOtidak didukung pada tabel bucketed. Untuk informasi selengkapnya, lihat Gunakan partisi dan bucketing.

Kueri federasi tidak didukung

INSERT INTOtidak 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 INTOmendukung menulis maksimal 100 partisi ke tabel tujuan. Jika Anda menjalankanSELECTklausul di atas tabel dengan lebih dari 100 partisi, permintaan gagal kecualiSELECTpermintaan 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 INTOatauCREATE TABLE AS SELECTberharap 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 destination_table SELECT * FROM source_tablemempertimbangkan 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.

Sumber daya

Untuk informasi selengkapnya tentang penggunaanINSERT INTOdengan partisi, lihat sumber daya berikut.

File yang ditulis ke Amazon S3

Athena menulis file ke lokasi sumber data di Amazon S3 sebagai hasil dariINSERTPerintah. SetiapINSERToperasi menciptakan file baru, daripada menambahkan ke file yang ada. Lokasi file tergantung pada struktur tabel danSELECTquery, jika ada. Athena menghasilkan file manifest data untuk setiapINSERTkueri. 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. JikaSELECTquery 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_pageviewstabel dan memasukkan mereka ke dalamcanada_pageviewsTabel:

INSERT INTO canada_pageviews SELECT * FROM vancouver_pageviews;

Pilih hanya baris tersebut divancouver_pageviewsTabel tempatdatekolom memiliki nilai antara2019-07-01dan2019-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 dalamcitydanstatekolom dicities_worldtabel hanya dari baris dengan nilaiusadicountrykolom dan memasukkan mereka kecitydanstatekolom dicities_usaTabel:

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 menggunakanVALUESkarena Athena menghasilkan file untuk setiapINSERToperasi. Ini dapat menyebabkan banyak file kecil yang akan dibuat dan menurunkan performa permintaan tabel. Untuk mengidentifikasi file yangINSERTquery 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. ParameteridKolom adalah tipeINTdan semua lajur lain adalah jenisVARCHAR.

Sisipkan satu baris ke dalamcitiestabel, dengan semua nilai kolom yang ditentukan:

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')

Masukkan dua baris ke dalamcitiesTabel:

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'), (3,'Boise','ID','Esto perpetua')