Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengubah tipe data kolom
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
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 danORC, Anda tidak dapat menggunakan tipe data yang berbeda untuk kolom jika tabel tidak dipartisi.
-
Untuk tabel yang dipartisi di Parket danORC, jenis kolom partisi dapat berbeda dari jenis kolom partisi lain, dan Athena akan
CAST
ke jenis yang diinginkan, jika memungkinkan. Untuk informasi, lihat Hindari kesalahan ketidakcocokan skema untuk tabel dengan partisi. -
Untuk tabel yang dibuat menggunakan LazySimpleSerDesatu-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. -
Hanya untuk tabel Apache Iceberg, Anda dapat menggunakan ALTER TABLE CHANGE COLUMN pernyataan untuk mengubah tipe data kolom.
ALTER TABLE REPLACE COLUMNS
tidak didukung untuk tabel Iceberg. Untuk informasi selengkapnya, lihat Skema tabel Evolve Iceberg.
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
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 disebutorders_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 aslinyaSELECT
query, sebelum perubahan tipe data:
Select * from orders_json LIMIT 10;