

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

# Menangani pembaruan skema
<a name="handling-schema-updates-chapter"></a>

Bagian ini menyediakan panduan tentang penanganan pembaruan skema untuk berbagai format data. Athena adalah mesin schema-on-read kueri. Ini berarti bahwa saat Anda membuat tabel di Athena, itu berlaku skema saat membaca data. Itu tidak mengubah atau menulis ulang data yang mendasari. 

Jika Anda mengantisipasi perubahan dalam skema tabel, pertimbangkan untuk membuat mereka dalam format data yang cocok untuk kebutuhan Anda. Tujuan Anda adalah untuk menggunakan kembali pertanyaan Athena yang ada terhadap skema yang berkembang, dan menghindari kesalahan ketidakcocokan skema saat kueri tabel dengan partisi.

Untuk mencapai tujuan ini, pilih format data tabel berdasarkan tabel dalam topik berikut.

**Topics**
+ [Operasi pembaruan skema yang didukung oleh format data](#summary-of-updates)
+ [Memahami akses indeks untuk Apache ORC dan Apache Parquet](#index-access)
+ [Buat pembaruan skema](make-schema-updates.md)
+ [Perbarui tabel dengan partisi](updates-and-partitions.md)

## Operasi pembaruan skema yang didukung oleh format data
<a name="summary-of-updates"></a>

Tabel berikut merangkum format penyimpanan data dan manipulasi skema mereka didukung. Gunakan tabel ini untuk membantu Anda memilih format yang akan memungkinkan Anda untuk terus menggunakan Athena kueri bahkan saat skema Anda berubah dari waktu ke waktu. 

Dalam tabel ini, mengamati bahwa Parquet dan ORC adalah format columnar dengan metode akses kolom default yang berbeda. Secara default, Parquet akan mengakses kolom berdasarkan nama dan ORC berdasarkan indeks (nilai ordinal). Oleh karena itu, Athena menyediakan SerDe properti yang didefinisikan saat membuat tabel untuk beralih metode akses kolom default yang memungkinkan fleksibilitas yang lebih besar dengan evolusi skema. 

Untuk Parket, `parquet.column.index.access` properti dapat diatur ke`true`, yang menetapkan metode akses kolom untuk menggunakan nomor urut kolom. Menetapkan properti ini ke`false`akan mengubah metode akses kolom untuk menggunakan nama kolom. Demikian pula, untuk ORC menggunakan`orc.column.index.access`properti untuk mengontrol metode akses kolom. Untuk informasi selengkapnya, lihat [Memahami akses indeks untuk Apache ORC dan Apache Parquet](#index-access).

CSV dan TSV memungkinkan Anda untuk melakukan semua manipulasi skema kecuali penataan ulang kolom, atau menambahkan kolom di awal tabel. Misalnya, jika evolusi skema Anda hanya memerlukan penggantian nama kolom tetapi tidak menghapusnya, Anda dapat memilih untuk membuat tabel Anda di CSV atau TSV. Jika Anda memerlukan menghapus kolom, jangan gunakan CSV atau TSV, dan sebagai gantinya gunakan format lain yang didukung, sebaiknya, format kolumnar, seperti Parquet atau ORC.


**Pembaruan skema dan format data di Athena**  

| Jenis pembaruan skema yang diharapkan | Ringkasan | CSV (dengan dan tanpa tajuk) dan TSV | JSON | AVRO | PARQUET: Baca dengan nama (default) | PARQUET: Dibaca dengan indeks | ORC: Dibaca berdasarkan indeks (default) | ORC: Baca dengan nama | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  [Ganti nama kolom](updates-renaming-columns.md) | Simpan data Anda di CSV dan TSV, atau di ORC dan Parquet jika dibaca berdasarkan indeks. | Y | T | T | T  | Y | Y | T | 
|  [Tambahkan kolom di awal atau di tengah tabel](updates-add-columns-beginning-middle-of-table.md) | Simpan data Anda di JSON, AVRO, atau di Parquet dan ORC jika mereka dibaca berdasarkan nama. Jangan gunakan CSV dan TSV. | T | Y | Y | Y | T | T | Y | 
|  [Tambahkan kolom di akhir tabel](updates-add-columns-end-of-table.md) | Simpan data Anda di CSV atau TSV, JSON, AVRO, ORC, atau Parquet. | Y | Y | Y | Y | Y | Y | Y | 
| [Hapus kolom](updates-removing-columns.md) |  Simpan data Anda di JSON, AVRO, atau Parquet dan ORC, jika mereka dibaca berdasarkan nama. Jangan gunakan CSV dan TSV. | T | Y | Y | Y | T | T | Y | 
| [Susun ulang kolom](updates-reordering-columns.md) | Simpan data Anda di AVRO, JSON atau ORC dan Parquet jika dibaca berdasarkan nama. | T | Y | Y | Y | T | T | Y | 
| [Mengubah tipe data kolom](updates-changing-column-type.md) | Simpan data Anda dalam format apa pun, tetapi uji kueri Anda di Athena untuk memastikan jenis data kompatibel. Untuk Parquet dan ORC, mengubah tipe data bekerja hanya untuk tabel dipartisi. | Y | Y | Y | Y | Y | Y | Y | 

## Memahami akses indeks untuk Apache ORC dan Apache Parquet
<a name="index-access"></a>

Parquet dan ORC adalah format penyimpanan data kolumnar yang dapat dibaca berdasarkan indeks, atau dengan nama. Menyimpan data Anda dalam salah satu format ini memungkinkan Anda melakukan semua operasi pada skema dan menjalankan kueri Athena tanpa kesalahan skema ketidakcocokan. 
+ Athena*membaca ORC berdasarkan indeks secara baku*, sebagaimana didefinisikan dalam`SERDEPROPERTIES ( 'orc.column.index.access'='true')`. Untuk informasi selengkapnya, lihat [ORC: Dibaca dengan indeks](#orc-read-by-index).
+ Athena membaca*Parket dengan nama secara lalai*, sebagaimana didefinisikan dalam`SERDEPROPERTIES ( 'parquet.column.index.access'='false')`. Untuk informasi selengkapnya, lihat [Parket: Baca dengan nama](#parquet-read-by-name).

Karena ini adalah default, menentukan SerDe properti ini dalam `CREATE TABLE` kueri Anda adalah opsional, mereka digunakan secara implisit. Saat digunakan, mereka memungkinkan Anda untuk menjalankan beberapa operasi update skema sementara mencegah operasi seperti lainnya. Untuk mengaktifkan operasi tersebut, jalankan `CREATE TABLE` kueri lain dan ubah SerDe pengaturan. 

**catatan**  
 SerDe Properti *tidak* secara otomatis disebarkan ke setiap partisi. Gunakan `ALTER TABLE ADD PARTITION` pernyataan untuk mengatur SerDe properti untuk setiap partisi. Untuk mengotomatiskan proses ini, menulis script yang berjalan`ALTER TABLE ADD PARTITION`.

Bagian berikut akan menjelaskan kasus ini secara terperinci.

### ORC: Dibaca dengan indeks
<a name="orc-read-by-index"></a>

Tabel di*ORC dibaca oleh indeks*Secara default. Ini didefinisikan oleh sintaks berikut:

```
WITH SERDEPROPERTIES ( 
  'orc.column.index.access'='true')
```

*Membaca berdasarkan indeks*memungkinkan Anda untuk mengubah nama kolom. Tapi kemudian Anda kehilangan kemampuan untuk menghapus kolom atau menambahkannya di tengah tabel. 

Untuk membuat ORC dibaca dengan nama, yang akan memungkinkan Anda untuk menambahkan kolom di tengah tabel atau menghapus kolom di ORC, atur SerDe properti `orc.column.index.access` ke `false` dalam pernyataan. `CREATE TABLE` Dalam konfigurasi ini, Anda akan kehilangan kemampuan untuk mengubah nama kolom.

**catatan**  
Di mesin Athena versi 2, ketika tabel ORC diatur untuk dibaca berdasarkan nama, Athena mengharuskan semua nama kolom dalam file ORC berada dalam huruf kecil. Karena Apache Spark tidak nama field huruf kecil saat menghasilkan file ORC, Athena mungkin tidak dapat membaca data sehingga dihasilkan. Solusinya adalah mengganti nama kolom menjadi huruf kecil, atau menggunakan mesin Athena versi 3. 

Contoh berikut menggambarkan bagaimana mengubah ORC untuk membuatnya dibaca dengan nama:

```
CREATE EXTERNAL TABLE orders_orc_read_by_name (
   `o_comment` string,
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderpriority` string, 
   `o_orderstatus` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_orderdate` string
) 
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
WITH SERDEPROPERTIES ( 
  'orc.column.index.access'='false') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/orders_orc/';
```

### Parket: Baca dengan nama
<a name="parquet-read-by-name"></a>

Tabel di*Parket dibaca dengan nama*Secara default. Ini didefinisikan oleh sintaks berikut:

```
WITH SERDEPROPERTIES ( 
  'parquet.column.index.access'='false')
```

*Membaca dengan nama*memungkinkan Anda untuk menambahkan kolom di tengah tabel dan menghapus kolom. Tapi kemudian Anda kehilangan kemampuan untuk mengganti nama kolom. 

Untuk membuat Parket dibaca oleh indeks, yang akan memungkinkan Anda untuk mengganti nama kolom, Anda harus membuat tabel dengan `parquet.column.index.access` SerDe properti diatur ke. `true`

# Buat pembaruan skema
<a name="make-schema-updates"></a>

Topik ini menjelaskan beberapa perubahan yang dapat Anda buat pada skema dalam `CREATE TABLE` pernyataan tanpa benar-benar mengubah data Anda. Untuk memperbarui skema, Anda dapat dalam beberapa kasus menggunakan `ALTER TABLE` perintah, tetapi dalam kasus lain Anda tidak benar-benar memodifikasi tabel yang ada. Sebagai gantinya, Anda membuat tabel dengan nama baru yang memodifikasi skema yang Anda gunakan dalam pernyataan asli `CREATE TABLE` Anda.

Tergantung pada bagaimana Anda mengharapkan skema Anda untuk berkembang, untuk terus menggunakan Athena kueri, memilih format data yang kompatibel. 

Pertimbangkan aplikasi yang membaca informasi pesanan dari `orders` tabel yang ada dalam dua format: CSV dan Parket. 

Contoh berikut akan membuat tabel di Parquet.

```
CREATE EXTERNAL TABLE orders_parquet (
   `orderkey` int, 
   `orderstatus` string, 
   `totalprice` double, 
   `orderdate` string, 
   `orderpriority` string, 
   `clerk` string, 
   `shippriority` int
) STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_ parquet/';
```

Contoh berikut membuat tabel yang sama di CSV:

```
CREATE EXTERNAL TABLE orders_csv (
   `orderkey` int, 
   `orderstatus` string, 
   `totalprice` double, 
   `orderdate` string, 
   `orderpriority` string, 
   `clerk` string, 
   `shippriority` int
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
```

Topik berikut menunjukkan bagaimana pembaruan tabel ini memengaruhi kueri Athena.

**Topics**
+ [Tambahkan kolom di awal atau di tengah tabel](updates-add-columns-beginning-middle-of-table.md)
+ [Tambahkan kolom pada akhir tabel](updates-add-columns-end-of-table.md)
+ [Hapus kolom](updates-removing-columns.md)
+ [Ubah Nama kolom](updates-renaming-columns.md)
+ [Urutkan kolom](updates-reordering-columns.md)
+ [Mengubah tipe data kolom](updates-changing-column-type.md)

# Tambahkan kolom di awal atau di tengah tabel
<a name="updates-add-columns-beginning-middle-of-table"></a>

Menambahkan kolom adalah salah satu perubahan skema yang paling sering. Misalnya, Anda dapat menambahkan kolom baru untuk memperkaya tabel dengan data baru. Atau, Anda dapat menambahkan kolom baru jika sumber untuk kolom yang ada telah berubah, dan menjaga versi sebelumnya dari kolom ini, untuk menyesuaikan aplikasi yang bergantung pada mereka.

Untuk menambahkan kolom di awal atau di tengah tabel, dan terus menjalankan kueri terhadap tabel yang ada, gunakan AVRO, JSON, dan Parket dan ORC jika SerDe properti mereka diatur untuk dibaca berdasarkan nama. Untuk informasi, lihat [Memahami akses indeks untuk Apache ORC dan Apache Parquet](handling-schema-updates-chapter.md#index-access).

Jangan menambahkan kolom di awal atau di tengah tabel di CSV dan TSV, karena format ini bergantung pada pemesanan. Menambahkan kolom dalam kasus tersebut akan menyebabkan kesalahan ketidakcocokan skema saat skema partisi berubah.

 Contoh berikut membuat tabel baru yang menambahkan `o_comment` kolom di tengah tabel berdasarkan data JSON.

```
CREATE EXTERNAL TABLE orders_json_column_addition (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_comment` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json/';
```

# Tambahkan kolom pada akhir tabel
<a name="updates-add-columns-end-of-table"></a>

Jika Anda membuat tabel dalam salah satu format yang didukung Athena, seperti Parquet, ORC, Avro, JSON, CSV, dan TSV, Anda dapat menggunakan`ALTER TABLE ADD COLUMNS`pernyataan untuk menambahkan kolom setelah kolom yang ada tapi sebelum kolom partisi.

Contoh berikut menambahkan`comment`kolom pada akhir`orders_parquet`tabel sebelum kolom partisi: 

```
ALTER TABLE orders_parquet ADD COLUMNS (comment string)
```

**catatan**  
Untuk melihat kolom tabel baru di Athena Kueri Editor setelah Anda menjalankan`ALTER TABLE ADD COLUMNS`, secara manual refresh daftar tabel di editor, dan kemudian memperluas tabel lagi.

# Hapus kolom
<a name="updates-removing-columns"></a>

Anda mungkin perlu menghapus kolom dari tabel jika mereka tidak lagi berisi data, atau untuk membatasi akses ke data di dalamnya.
+ Anda dapat menghapus kolom dari tabel di JSON, Avro, dan Parquet dan ORC jika mereka dibaca oleh nama. Untuk informasi, lihat [Memahami akses indeks untuk Apache ORC dan Apache Parquet](handling-schema-updates-chapter.md#index-access). 
+ Kami tidak menyarankan untuk menghapus kolom dari tabel di CSV dan TSV jika Anda ingin mempertahankan tabel yang telah Anda buat di Athena. Menghapus kolom istirahat skema dan mengharuskan Anda membuat tabel tanpa kolom dihapus.

Dalam contoh ini, menghapus kolom``totalprice``dari tabel di Parquet dan menjalankan kueri. Di Athena, Parquet dibaca dengan nama secara default, ini adalah mengapa kita menghilangkan konfigurasi SERDEPROPERTIES yang menentukan membaca dengan nama. Perhatikan bahwa kueri berikut berhasil, meski Anda mengubah skema:

```
CREATE EXTERNAL TABLE orders_parquet_column_removed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

# Ubah Nama kolom
<a name="updates-renaming-columns"></a>

Anda mungkin ingin mengubah nama kolom dalam tabel Anda untuk memperbaiki ejaan, membuat nama kolom lebih deskriptif, atau untuk menggunakan kembali kolom yang ada untuk menghindari penataan ulang kolom.

Anda dapat mengubah nama kolom jika Anda menyimpan data Anda di CSV dan TSV, atau di Parquet dan ORC yang dikonfigurasi untuk dibaca berdasarkan indeks. Untuk informasi, lihat [Memahami akses indeks untuk Apache ORC dan Apache Parquet](handling-schema-updates-chapter.md#index-access). 

Athena membaca data dalam CSV dan TSV dalam urutan kolom dalam skema dan mengembalikan mereka dalam urutan yang sama. Ini tidak menggunakan nama kolom untuk pemetaan data ke kolom, itulah sebabnya Anda dapat mengubah nama kolom di CSV atau TSV tanpa melanggar permintaan Athena. 

Salah satu strategi untuk mengubah nama kolom adalah untuk membuat tabel baru berdasarkan data yang mendasari sama, tetapi menggunakan nama kolom baru. Contoh berikut akan membuat `orders_parquet` baru menggunakan `orders_parquet_column_renamed`. Contoh mengubah nama ``o_totalprice`` kolom ke ``o_total_price``, kemudian menjalankan kueri di Athena: 

```
CREATE EXTERNAL TABLE orders_parquet_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

Dalam kasus tabel Parquet, kueri berikut berjalan, tetapi kolom berganti nama tidak menunjukkan data karena kolom sedang diakses oleh nama (default di Parquet) bukan oleh indeks:

```
SELECT * 
FROM orders_parquet_column_renamed;
```

Kueri dengan tabel di CSV terlihat serupa:

```
CREATE EXTERNAL TABLE orders_csv_column_renamed (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_total_price` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_comment` string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
```

Dalam kasus tabel CSV, kueri berikut berjalan dan menampilkan data di semua kolom, termasuk salah satu yang diubah namanya:

```
SELECT * 
FROM orders_csv_column_renamed;
```

# Urutkan kolom
<a name="updates-reordering-columns"></a>

Anda dapat menyusun ulang kolom hanya untuk tabel dengan data dalam format yang dibaca berdasarkan nama, seperti JSON atau Parquet, yang berbunyi berdasarkan nama secara default. Anda juga dapat membuat ORC dibaca berdasarkan nama, jika diperlukan. Untuk informasi, lihat [Memahami akses indeks untuk Apache ORC dan Apache Parquet](handling-schema-updates-chapter.md#index-access).

Contoh berikut membuat tabel baru dengan kolom dalam urutan yang berbeda:

```
CREATE EXTERNAL TABLE orders_parquet_columns_reordered (
   `o_comment` string,
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderpriority` string, 
   `o_orderstatus` string, 
   `o_clerk` string, 
   `o_shippriority` int, 
   `o_orderdate` string
) 
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
```

# Mengubah tipe data kolom
<a name="updates-changing-column-type"></a>

Anda mungkin ingin menggunakan jenis kolom yang berbeda ketika tipe yang ada tidak dapat lagi menyimpan jumlah informasi yang diperlukan. Misalnya, nilai kolom ID mungkin melebihi ukuran tipe `INT` data dan memerlukan penggunaan tipe `BIGINT` data.

## Pertimbangan-pertimbangan
<a name="updates-changing-column-type-considerations"></a>

Saat berencana menggunakan tipe data yang berbeda untuk kolom, pertimbangkan hal-hal berikut: 
+ Dalam kebanyakan kasus, Anda tidak dapat mengubah tipe data kolom secara langsung. Sebagai gantinya, Anda membuat ulang tabel Athena dan menentukan kolom dengan tipe data baru. 
+ Hanya tipe data tertentu yang dapat dibaca sebagai tipe data lainnya. Lihat tabel di bagian ini untuk tipe data yang dapat diperlakukan sedemikian rupa.
+ Untuk data di Parket dan ORC, Anda tidak dapat menggunakan tipe data yang berbeda untuk kolom jika tabel tidak dipartisi. 
+ Untuk tabel yang dipartisi di Parquet dan ORC, tipe kolom partisi dapat berbeda dari tipe kolom partisi lain, dan Athena akan`CAST`ke jenis yang diinginkan, jika memungkinkan. Untuk informasi, lihat [Hindari kesalahan ketidakcocokan skema untuk tabel dengan partisi](updates-and-partitions.md#partitions-dealing-with-schema-mismatch-errors).
+ Untuk tabel yang dibuat menggunakan [LazySimpleSerDe](lazy-simple-serde.md)satu-satunya, dimungkinkan untuk menggunakan `ALTER TABLE REPLACE COLUMNS` pernyataan untuk mengganti kolom yang ada dengan tipe data yang berbeda, tetapi semua kolom yang ada yang ingin Anda simpan juga harus didefinisikan ulang dalam pernyataan, atau mereka akan dihapus. Untuk informasi selengkapnya, lihat [ALTER TABLE REPLACE COLUMNS](alter-table-replace-columns.md).
+ Hanya untuk tabel Apache Iceberg, Anda dapat menggunakan [MENGUBAH KOLOM PERUBAHAN TABEL](querying-iceberg-alter-table-change-column.md) pernyataan untuk mengubah tipe data kolom. `ALTER TABLE REPLACE COLUMNS`tidak didukung untuk tabel Iceberg. Untuk informasi selengkapnya, lihat [Skema tabel Evolve Iceberg](querying-iceberg-evolving-table-schema.md).

**penting**  
Kami sangat menyarankan agar Anda menguji dan memverifikasi pertanyaan Anda sebelum melakukan terjemahan tipe data. Jika Athena tidak dapat menggunakan tipe data target, `CREATE TABLE` kueri mungkin gagal. 

## Gunakan tipe data yang kompatibel
<a name="updates-changing-column-type-use-compatible-data-types"></a>

Bila memungkinkan, gunakan tipe data yang kompatibel. Tabel berikut mencantumkan tipe data yang dapat diperlakukan sebagai tipe data lainnya:


| Tipe data asli | Tipe data target yang tersedia | 
| --- | --- | 
| STRING | BYTE, TINYINT, SMALLINT, INT, BIGINT | 
| BYTE | TINYINT, SMALLINT, INT, BIGINT | 
| TINYINT | SMALLINT, INT, BIGINT | 
| SMALLINT | INT, BIGINT | 
| INT | BIGINT | 
| FLOAT | DOUBLE | 

Contoh berikut menggunakan `CREATE TABLE` pernyataan untuk tabel asli untuk membuat `orders_json` tabel baru yang disebut`orders_json_bigint`. Tabel baru menggunakan `BIGINT` bukan `INT` sebagai tipe data untuk ``o_shippriority`` kolom. 

```
CREATE EXTERNAL TABLE orders_json_bigint (
   `o_orderkey` int, 
   `o_custkey` int, 
   `o_orderstatus` string, 
   `o_totalprice` double, 
   `o_orderdate` string, 
   `o_orderpriority` string, 
   `o_clerk` string, 
   `o_shippriority` BIGINT
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket/orders_json';
```

Kueri berikut berjalan dengan sukses, mirip dengan aslinya`SELECT`query, sebelum perubahan tipe data:

```
Select * from orders_json 
LIMIT 10;
```

# Perbarui tabel dengan partisi
<a name="updates-and-partitions"></a>

Di Athena, tabel dan partisi yang harus menggunakan format data yang sama tetapi skema mereka mungkin berbeda. Saat Anda membuat partisi baru, partisi yang biasanya mewarisi skema tabel. Seiring waktu, skema mungkin mulai berbeda. Alasan meliputi:
+ Jika skema tabel Anda perubahan, skema untuk partisi tidak diperbarui untuk tetap sinkron dengan tabel skema. 
+  AWS Glue Crawler memungkinkan Anda menemukan data dalam partisi dengan skema yang berbeda. Ini berarti bahwa jika Anda membuat tabel di Athena dengan AWS Glue, setelah crawler selesai diproses, skema untuk tabel dan partisinya mungkin berbeda.
+ Jika Anda menambahkan partisi secara langsung menggunakan AWS API.

Athena memproses tabel dengan partisi berhasil jika mereka memenuhi kendala berikut. Jika kendala ini tidak terpenuhi, Athena mengeluarkanHIVE\$1PARTITION\$1SCHEMA\$1MISMATCHkesalahan. 
+ Setiap skema partisi kompatibel dengan skema tabel. 
+ Format data tabel memungkinkan jenis pembaruan yang ingin Anda lakukan: menambah, menghapus, menyusun ulang kolom, atau mengubah jenis data kolom. 

  Misalnya, untuk format CSV dan TSV, Anda dapat mengganti nama kolom, menambahkan kolom baru di ujung tabel, dan mengubah jenis data kolom jika jenisnya kompatibel, tetapi Anda tidak dapat menghapus kolom. Untuk format lain, Anda dapat menambahkan atau menghapus kolom, atau mengubah jenis data kolom yang lain jika jenis kompatibel. Untuk informasi selengkapnya, lihat [ Pembaruan dan Format Data di Athena](handling-schema-updates-chapter.md#summary-of-updates). 

## Hindari kesalahan ketidakcocokan skema untuk tabel dengan partisi
<a name="partitions-dealing-with-schema-mismatch-errors"></a>

Pada awal eksekusi kueri, Athena memverifikasi skema tabel dengan memeriksa bahwa setiap jenis data kolom kompatibel antara tabel dan partisi. 
+ Untuk jenis penyimpanan data Parquet dan ORC, Athena bergantung pada nama kolom dan menggunakannya untuk verifikasi skema berbasis nama kolom. Ini menghilangkan`HIVE_PARTITION_SCHEMA_MISMATCH`kesalahan untuk tabel dengan partisi di Parquet dan ORC. (Ini berlaku untuk ORC jika SerDe properti diatur untuk mengakses indeks dengan nama:`orc.column.index.access=FALSE`. Parket membaca indeks dengan nama secara default).
+ Untuk CSV, JSON, dan Avro, Athena menggunakan verifikasi skema berbasis indeks. Ini berarti bahwa jika Anda mengalami kesalahan ketidakcocokan skema, Anda harus drop partisi yang menyebabkan ketidakcocokan skema dan menciptakan itu, sehingga Athena dapat mengkueri tanpa gagal.

 Athena membandingkan skema tabel untuk skema partisi. Jika Anda membuat tabel di CSV, JSON, dan AVRO di Athena dengan AWS Glue Crawler, setelah Crawler selesai diproses, skema untuk tabel dan partisinya mungkin berbeda. Jika ada ketidakcocokan antara skema tabel dan skema partisi, pertanyaan Anda gagal di Athena karena kesalahan verifikasi skema yang mirip dengan ini:'crawler\$1test.click\$1avro' dinyatakan sebagai tipe 'string', tetapi partisi 'partition\$10=2017-01-17' menyatakan kolom 'col68' sebagai tipe 'double'.”

Solusi khas untuk kesalahan tersebut adalah untuk menjatuhkan partisi yang menyebabkan kesalahan dan menciptakan itu. Lihat informasi yang lebih lengkap di [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) dan [ALTER TABLE ADD PARTITION](alter-table-add-partition.md).