

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

# INSERT INTO
<a name="insert-into"></a>

Menyisipkan baris baru ke dalam tabel tujuan berdasarkan`SELECT`pernyataan permintaan yang berjalan pada tabel sumber, atau didasarkan pada satu set`VALUES`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 menggunakan`INSERT INTO`query untuk mengubah data yang dipilih ke dalam format tabel tujuan. 

## Pertimbangan dan batasan
<a name="insert-into-limitations"></a>

Pertimbangkan hal berikut saat menggunakan`INSERT`Pertanyaan dengan Athena.
+ Saat menjalankan`INSERT`permintaan pada tabel dengan data dasar yang dienkripsi di Amazon S3, output file yang`INSERT`query menulis tidak dienkripsi secara default. Kami merekomendasikan bahwa Anda mengenkripsi`INSERT`permintaan hasil jika Anda memasukkan ke dalam tabel dengan data terenkripsi. 

  Untuk informasi selengkapnya tentang enkripsi hasil kueri menggunakan konsol, lihat[Enkripsi hasil kueri Athena yang disimpan di Amazon S3](encrypting-query-results-stored-in-s3.md). Untuk mengaktifkan enkripsi menggunakan AWS CLI atau Athena API, gunakan `EncryptionConfiguration` properti [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html)tindakan 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](query-results-specify-location-console.md).
+ Untuk `INSERT INTO` pernyataan yang sesuai dengan ACID, lihat `INSERT INTO` bagian. [Perbarui data tabel Gunung Es](querying-iceberg-updating-iceberg-table-data.md)

### Format yang didukung dan SerDes
<a name="insert-into-supported-formats"></a>

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  TSV dan file yang dibatasi khusus didukung.   | 
| CSV | org.apache.hadoop.hive.serde2.open CSVSerde Menulis hanya didukung untuk tipe string. Dari Athena, Anda tidak dapat menulis ke tabel apa pun yang berisi jenis non-string dalam skema Glue. Untuk informasi lebih lanjut, lihat [CSV SerDe](csv-serde.md#csv-serde-opencsvserde-considerations-non-string).  | 

### Tabel bucketed tidak didukung
<a name="insert-into-bucketed-tables-not-supported"></a>

`INSERT INTO`tidak didukung pada tabel bucketed. Untuk informasi selengkapnya, lihat [Gunakan partisi dan bucketing](ctas-partitioning-and-bucketing.md).

### Kueri federasi tidak didukung
<a name="insert-into-federated-queries-not-supported"></a>

`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](federated-queries.md)

### Partitioning
<a name="insert-into-limitations-partitioning"></a>

Pertimbangkan poin di bagian ini saat menggunakan partisi dengan `INSERT INTO` atau `CREATE TABLE AS SELECT` kueri.

#### Batas
<a name="insert-into-partition-limits"></a>

Parameter`INSERT INTO`mendukung menulis maksimal 100 partisi ke tabel tujuan. Jika Anda menjalankan`SELECT`klausul di atas tabel dengan lebih dari 100 partisi, permintaan gagal kecuali`SELECT`permintaan terbatas untuk 100 partisi atau lebih sedikit.

Untuk informasi tentang cara mengatasi batasan ini, lihat[Gunakan CTAS dan INSERT INTO untuk bekerja di sekitar batas partisi 100](ctas-insert-into.md).

#### Pemesanan kolom
<a name="insert-into-partition-detection"></a>

`INSERT INTO`atau`CREATE TABLE AS SELECT`berharap kolom dipartisi menjadi kolom terakhir dalam daftar kolom diproyeksikan dalam`SELECT`. 

Jika tabel sumber non-dipartisi, atau dipartisi pada kolom yang berbeda dibandingkan dengan tabel tujuan, kueri seperti`INSERT INTO destination_table SELECT * FROM source_table`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.

#### Sumber daya
<a name="insert-into-partition-resources"></a>

Untuk informasi selengkapnya tentang penggunaan`INSERT INTO`dengan partisi, lihat sumber daya berikut.
+ Untuk memasukkan data dipartisi ke dalam tabel dipartisi, lihat[Gunakan CTAS dan INSERT INTO untuk bekerja di sekitar batas partisi 100](ctas-insert-into.md).
+ Untuk memasukkan data unpartitioned ke dalam tabel dipartisi, lihat[Gunakan CTAS dan INSERT INTO untuk ETL dan analisis data](ctas-insert-into-etl.md). 

### File yang ditulis ke Amazon S3
<a name="insert-into-files-written-to-s3"></a>

Athena menulis file ke lokasi sumber data di Amazon S3 sebagai hasil dari`INSERT`Perintah. Setiap`INSERT`operasi menciptakan file baru, daripada menambahkan ke file yang ada. Lokasi file tergantung pada struktur tabel dan`SELECT`query, jika ada. Athena menghasilkan file manifest data untuk setiap`INSERT`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](querying-finding-output-files.md#querying-identifying-output-files).

### Hindari pembaruan yang sangat transaksional
<a name="insert-into-transactional-caveat"></a>

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](performance-tuning-data-optimization-techniques.md#performance-tuning-avoid-having-too-many-files), 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](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html).
+ Hindari menggunakan `INSERT INTO` sama sekali. Sebagai gantinya, kumpulkan baris menjadi file yang lebih besar dan unggah langsung ke Amazon S3 di mana mereka dapat ditanyakan oleh Athena.

### Menemukan file yatim piatu
<a name="insert-into-files-partial-data"></a>

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](querying-finding-output-files.md#querying-identifying-output-files) dan [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation).

## MASUKKAN KE... PILIH
<a name="insert-into-select"></a>

Menentukan kueri untuk berjalan di satu tabel,`source_table`, yang menentukan baris untuk dimasukkan ke dalam tabel kedua,`destination_table`. Jika`SELECT`query menentukan kolom dalam`source_table`, kolom harus tepat sesuai dengan yang ada di`destination_table`.

Untuk informasi selengkapnya tentang kueri `SELECT` ini, lihat [SELECT](select.md).

### Sinopsis
<a name="insert-into-select-synopsis"></a>

```
INSERT INTO destination_table 
SELECT select_query 
FROM source_table_or_view
```

### Contoh
<a name="insert-into-select-examples"></a>

Pilih semua baris di`vancouver_pageviews`tabel dan memasukkan mereka ke dalam`canada_pageviews`Tabel:

```
INSERT INTO canada_pageviews 
SELECT * 
FROM vancouver_pageviews;
```

Pilih hanya baris tersebut di`vancouver_pageviews`Tabel tempat`date`kolom memiliki nilai antara`2019-07-01`dan`2019-07-31`, dan kemudian masukkan ke dalam`canada_july_pageviews`:

```
INSERT INTO canada_july_pageviews
SELECT *
FROM vancouver_pageviews
WHERE date
    BETWEEN date '2019-07-01'
        AND '2019-07-31';
```

Pilih nilai dalam`city`dan`state`kolom di`cities_world`tabel hanya dari baris dengan nilai`usa`di`country`kolom dan memasukkan mereka ke`city`dan`state`kolom di`cities_usa`Tabel:

```
INSERT INTO cities_usa (city,state)
SELECT city,state
FROM cities_world
    WHERE country='usa'
```

## MASUKKAN KEDALAM... NILAI
<a name="insert-into-values"></a>

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 menggunakan`VALUES`karena Athena menghasilkan file untuk setiap`INSERT`operasi. Ini dapat menyebabkan banyak file kecil yang akan dibuat dan menurunkan performa permintaan tabel. Untuk mengidentifikasi file yang`INSERT`query menciptakan, memeriksa file manifest data. Untuk informasi selengkapnya, lihat [Bekerja dengan hasil kueri dan kueri terbaru](querying.md).

### Sinopsis
<a name="insert-into-values-synopsis"></a>

```
INSERT INTO destination_table [(col1,col2,...)] 
VALUES (col1value,col2value,...)[,
       (col1value,col2value,...)][,
       ...]
```

### Contoh
<a name="insert-into-values-examples"></a>

Dalam contoh berikut, tabel kota memiliki tiga kolom:`id`,`city`,`state`,`state_motto`. Parameter`id`Kolom adalah tipe`INT`dan semua lajur lain adalah jenis`VARCHAR`.

Sisipkan satu baris ke dalam`cities`tabel, dengan semua nilai kolom yang ditentukan:

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

Masukkan dua baris ke dalam`cities`Tabel:

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