Menangani pembaruan skema - Amazon Athena

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

Menangani pembaruan skema

Bagian ini menyediakan panduan tentang penanganan pembaruan skema untuk berbagai format data. Athena adalahschema-on-readmesin query. 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.

Ringkasan: Pembaruan dan format data di Athena

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 menyediakanSerDeproperti didefinisikan saat membuat tabel untuk beralih metode akses kolom default yang memungkinkan fleksibilitas yang lebih besar dengan evolusi skema.

Untuk Parket,parquet.column.index.accessproperti dapat diatur ketrue, yang menetapkan metode akses kolom untuk menggunakan nomor urut kolom. Menetapkan properti ini kefalseakan mengubah metode akses kolom untuk menggunakan nama kolom. Demikian pula, untuk ORC menggunakanorc.column.index.accessproperti untuk mengontrol metode akses kolom. Untuk informasi selengkapnya, lihat Akses indeks di ORC dan parket.

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 PARKET: Baca dengan nama (default) PARKET: Baca dengan indeks ORC: Baca berdasarkan indeks (default) ORC: Baca dengan nama
Ganti nama kolom Simpan data Anda di CSV dan TSV, atau di ORC dan Parquet jika dibaca berdasarkan indeks. Y N N N Y Y N
Tambahkan kolom di awal atau di tengah tabel Simpan data Anda di JSON, AVRO, atau di Parquet dan ORC jika mereka dibaca berdasarkan nama. Jangan gunakan CSV dan TSV. N Y Y Y N N Y
Tambahkan kolom di akhir tabel Simpan data Anda di CSV atau TSV, JSON, AVRO, ORC, atau Parquet. Y Y Y Y Y Y Y
Hapus kolom Simpan data Anda di JSON, AVRO, atau Parquet dan ORC, jika mereka dibaca berdasarkan nama. Jangan gunakan CSV dan TSV. N Y Y Y N N Y
Susun ulang kolom Simpan data Anda di AVRO, JSON atau ORC dan Parquet jika dibaca berdasarkan nama. N Y Y Y N N Y
Mengubah tipe data kolom 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

Akses indeks di ORC dan parket

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.

  • Athenamembaca ORC berdasarkan indeks secara baku, sebagaimana didefinisikan dalamSERDEPROPERTIES ( 'orc.column.index.access'='true'). Untuk informasi selengkapnya, lihat ORC: Dibaca oleh indeks.

  • Athena membacaParket dengan nama secara lalai, sebagaimana didefinisikan dalamSERDEPROPERTIES ( 'parquet.column.index.access'='false'). Untuk informasi selengkapnya, lihat Parket: Baca dengan nama.

Karena ini adalah default, menentukan iniSerDeproperti diCREATE TABLEquery 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 yang lainCREATE TABLEquery dan mengubahSerDepengaturan.

catatan

YangSerDeproperti adalahtidaksecara otomatis disebarkan ke setiap partisi. GunakanALTER TABLE ADD PARTITIONpernyataan untuk mengaturSerDeproperti untuk setiap partisi. Untuk mengotomatiskan proses ini, menulis script yang berjalanALTER TABLE ADD PARTITION.

Bagian berikut akan menjelaskan kasus ini secara terperinci.

ORC: Dibaca oleh indeks

Tabel diORC dibaca oleh indeksSecara default. Ini didefinisikan oleh sintaks berikut:

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

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

Untuk membuat ORC dibaca berdasarkan nama, yang akan memungkinkan Anda untuk menambahkan kolom di tengah tabel atau menghapus kolom di ORC, aturSerDesifatorc.column.index.accesskepadafalsedi dalamCREATE TABLEpernyataan. 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 mensyaratkan bahwa 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 untuk mengubah nama kolom menjadi dalam 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://schema_updates/orders_orc/';

Parket: Baca dengan nama

Tabel diParket dibaca dengan namaSecara default. Ini didefinisikan oleh sintaks berikut:

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

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

Untuk membuat Parket dibaca berdasarkan indeks, yang akan memungkinkan Anda untuk mengganti nama kolom, Anda harus membuat tabel denganparquet.column.index.access SerDeproperti diatur ketrue.