Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tipe data di Amazon Athena
Saat menjalankanCREATE TABLE
, Anda menentukan nama kolom dan tipe data yang dapat berisi setiap kolom. Tabel yang Anda buat disimpan di AWS Glue Data Catalog.
Untuk memfasilitasi interoperabilitas dengan mesin query lainnya, Athena menggunakan nama tipe data Apache HiveCREATE TABLE
Untuk kueri DHTML sepertiSELECT
,, danCTAS
, INSERT INTO
Athena menggunakan nama tipe data Trino
DDL | DML~ | Deskripsi |
---|---|---|
BOOLEAN | Nilai adalah true danfalse . |
|
TINYINT | Bilangan bulat bertanda 8-bit dalam format komplemen dua, dengan nilai minimum -2 7 dan nilai maksimum 2 7 -1. | |
SMALLINT | Integer bertanda 16-bit dalam format komplemen dua, dengan nilai minimum -2 15 dan nilai maksimum 2 15 -1. | |
INT, BILANGAN BULAT | Nilai bertanda 32-bit dalam format komplemen dua, dengan nilai minimum -2 31 dan nilai maksimum 2 31 -1. | |
BIGINT | Integer bertanda 64-bit dalam format komplemen dua, dengan nilai minimum -2 63 dan nilai maksimum 2 63 -1. | |
FLOAT | REAL | Nomor floating point presisi tunggal bertanda 32-bit. Kisarannya adalah 1.40129846432481707e-45 hingga 3.40282346638528860e+38, positif atau negatif. Mengikuti Standar IEEE untuk Aritmatika Floating-Point (IEEE 754). |
DOUBLE | Nomor floating point presisi ganda yang ditandatangani 64-bit. Kisarannya adalah 4.94065645841246544e-324d hingga 1.79769313486231570e+308d, positif atau negatif. Mengikuti Standar IEEE untuk Aritmatika Floating-Point (IEEE 754). | |
DESIMAL ( |
adalah jumlah total digit. (opsional) adalah jumlah digit di bagian pecahan dengan default 0. Sebagai contoh, gunakan definisi jenis ini:decimal(11,5) ,decimal(15) . Nilai maksimum untuk presisi adalah 38, dan nilai maksimum untuk skala adalah 38. |
|
CHAR, CHAR (panjang) |
Data karakter panjang tetap, dengan panjang tertentu antara 1 dan 255, seperti char (10). Jika Untuk informasi lebih lanjut, lihat tipe data CHAR Hive |
|
STRING | VARCHAR | Data karakter panjang variabel. |
VARCHAR (panjang) |
Data karakter panjang variabel dengan panjang baca maksimum. String terpotong pada panjang yang ditentukan saat dibaca. Jika string data yang mendasarinya lebih panjang, string data yang mendasarinya tetap tidak berubah. | |
BINARY | VARBINARY | Data biner panjang variabel. |
TIME | Waktu dalam sehari dengan presisi milidetik. | |
Tidak tersedia | WAKTU (presisi ) |
Waktu dalam sehari dengan presisi tertentu. TIME(3) setara denganTIME . |
Tidak tersedia | TIME WITH TIME ZONE | Waktu dalam satu zona waktu. Zona waktu harus ditentukan sebagai offset dari UTC. |
DATE | Tanggal kalender dengan tahun, bulan, dan hari. | |
TIMESTAMP | STEMPEL WAKTU, STEMPEL WAKTU TANPA ZONA WAKTU | Tanggal kalender dan waktu hari dengan presisi milidetik. |
Tidak tersedia | TIMESTAMP (presisi ), TIMESTAMP (presisi ) TANPA ZONA WAKTU |
Tanggal kalender dan waktu hari dengan presisi tertentu. TIMESTAMP(3) setara denganTIMESTAMP . |
Tidak tersedia | TIMESTAMP WITH TIME ZONE | Tanggal kalender dan waktu dalam zona waktu. Zona waktu dapat ditentukan sebagai offset dari UTC, sebagai nama zona waktu IANA, atau menggunakan UTC, UT, Z, atau GMT. |
Tidak tersedia | TIMESTAMP (presisi ) DENGAN ZONA WAKTU |
Tanggal kalender dan waktu hari dengan presisi tertentu, dalam zona waktu. |
Tidak tersedia | INTERVAL TAHUN KE BULAN | Interval satu atau lebih bulan penuh |
Tidak tersedia | INTERVAL HARI KE DETIK | Interval satu atau lebih detik, menit, jam, atau hari |
ARRAY< element_type > |
ARRAY [element_type ] |
Sebuah array nilai. Semua nilai harus memiliki tipe yang sama. |
PETA < |
PETA ( |
Peta di mana nilai dapat dicari dengan kunci. Semua kunci harus memiliki nilai yang sama, dan semua nilai harus memiliki nilai yang sama. |
|
|
Struktur data dengan bidang bernama dan nilainya. |
Tidak tersedia | JSON | Jenis nilai JSON, yang dapat berupa objek JSON, array JSON, nomor JSON, string JSON, atau. true false null |
Tidak tersedia | UUID | Sebuah UUID (Universalally Unique Identifier). |
Tidak tersedia | IPADDRESS | Alamat IPv4 atau IPv6. |
Tidak tersedia | HyperLogLog |
Tipe data ini mendukung perkiraan fungsi internal. Untuk informasi lebih lanjut tentang setiap jenis, kunjungi tautan ke entri yang sesuai dalam dokumentasi Trino. |
P4 HyperLogLog |
||
SetDigest |
||
QDigest |
||
TDigest |
Contoh tipe data
Tabel berikut menunjukkan contoh literal untuk tipe data DHTML.
Tipe data | Contoh |
---|---|
BOOLEAN |
|
TINYINT |
|
SMALLINT |
|
INT, BILANGAN BULAT |
|
BIGINT |
|
REAL |
|
DOUBLE |
|
DESIMAL ( |
|
CHAR, CHAR (panjang) |
|
VARCHAR, VARCHAR (panjang) |
|
VARBINARY |
|
WAKTU, WAKTU (presisi ) |
|
TIME WITH TIME ZONE |
|
DATE |
|
|
|
TIMESTAMP DENGAN ZONA WAKTU, TIMESTAMP (presisi ) DENGAN ZONA WAKTU |
|
INTERVAL TAHUN KE BULAN |
|
INTERVAL HARI KE DETIK |
|
ARRAY [element_type ] |
|
PETA ( |
Perhatikan bahwa peta dibuat dari array kunci dan array nilai. |
|
Perhatikan bahwa baris yang dibuat dengan cara ini tidak memiliki nama kolom. Untuk menambahkan nama kolom, Anda dapat menggunakan
|
JSON |
|
UUID |
|
IPADDRESS |
|
Pertimbangan untuk tipe data
Batas ukuran
Untuk tipe data yang tidak menentukan batas ukuran, perlu diingat bahwa ada batas praktis 32MB untuk semua data dalam satu baris. Untuk informasi selengkapnya, lihat Row or column size limitation di Pertimbangan dan batasan untuk kueri SQL di Amazon Athena.
CHAR dan VARCHAR
CHAR(
Nilai selalu memiliki hitungan n
)
karakter. Misalnya, jika Anda mentransmisikan 'abc' ken
CHAR(7)
, 4 spasi tambahan ditambahkan.
Perbandingan CHAR
nilai termasuk ruang depan dan belakang.
Jika panjang ditentukan untuk CHAR
atauVARCHAR
, string dipotong pada panjang yang ditentukan saat dibaca. Jika string data yang mendasarinya lebih panjang, string data yang mendasarinya tetap tidak berubah.
Untuk menghindari satu kutipan dalam CHAR
atauVARCHAR
, gunakan kutipan tunggal tambahan.
Untuk mentransmisikan tipe data non-string ke string dalam kueri DHTML, lemparkan ke tipe VARCHAR
data.
Untuk menggunakan substr
fungsi untuk mengembalikan substring dengan panjang tertentu dari tipe CHAR
data, Anda harus terlebih dahulu melemparkan CHAR
nilai sebagaiVARCHAR
. Dalam contoh berikut, col1
menggunakan tipe CHAR
data.
substr(CAST(col1 AS VARCHAR), 1, 4)
DECIMAL
Untuk menentukan nilai desimal sebagai literal dalam SELECT
kueri, seperti saat memilih baris dengan nilai desimal tertentu, Anda dapat menentukan DECIMAL
jenis dan mencantumkan nilai desimal sebagai literal dalam tanda kueri tunggal dalam kueri Anda, seperti pada contoh berikut.
SELECT * FROM my_table WHERE decimal_value = DECIMAL '0.12'
SELECT DECIMAL '44.6' + DECIMAL '77.2'
Bekerja dengan data stempel waktu
Bagian ini menjelaskan beberapa pertimbangan untuk bekerja dengan data stempel waktu di Athena.
catatan
Perawatan stempel waktu agak berubah antara mesin Athena versi 2 dan mesin Athena versi 3. Untuk informasi tentang kesalahan terkait stempel waktu yang dapat terjadi di mesin Athena versi 3 dan solusi yang disarankan, lihat di referensi. Perubahan stempel waktu Mesin Athena versi 3
Format untuk menulis data stempel waktu ke objek Amazon S3
Format di mana data stempel waktu harus ditulis ke objek Amazon S3 bergantung pada tipe data kolom dan pustaka SerDeyang Anda gunakan.
-
Jika Anda memiliki kolom tabel tipe
DATE
, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format ISOYYYY-MM-DD
, atau tipe tanggal bawaan seperti untuk Parket atau ORC. -
Jika Anda memiliki kolom tabel tipe
TIME
, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format ISOHH:MM:SS
, atau tipe waktu bawaan seperti untuk Parket atau ORC. -
Jika Anda memiliki kolom tabel tipe
TIMESTAMP
, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam formatYYYY-MM-DD HH:MM:SS.SSS
(perhatikan ruang antara tanggal dan waktu), atau tipe waktu bawaan seperti untuk Parket, ORC, atau Ion.catatan
Stempel waktu SerDe OpenCSV adalah pengecualian dan harus dikodekan sebagai zaman UNIX resolusi milidetik.
Memastikan bahwa data yang dipartisi waktu cocok dengan bidang stempel waktu dalam catatan
Produsen data harus memastikan nilai partisi sejajar dengan data di dalam partisi. Misalnya, jika data Anda memiliki timestamp
properti dan Anda menggunakan Firehose untuk memuat data ke Amazon S3, Anda harus menggunakan partisi dinamis karena partisi default Firehose adalah. wall-clock-based
Gunakan string sebagai tipe data untuk kunci partisi
Untuk alasan kinerja, lebih baik digunakan STRING
sebagai tipe data untuk kunci partisi. Meskipun Athena mengenali nilai partisi dalam format YYYY-MM-DD
sebagai tanggal saat Anda menggunakan DATE
tipe, ini dapat menyebabkan kinerja yang buruk. Untuk alasan ini, kami menyarankan Anda menggunakan tipe STRING
data untuk kunci partisi sebagai gantinya.
Cara menulis kueri untuk bidang stempel waktu yang juga dipartisi waktu
Cara Anda menulis kueri untuk bidang stempel waktu yang dipartisi waktu tergantung pada jenis tabel yang ingin Anda kueri.
Tabel sarang
Dengan tabel Hive yang paling umum digunakan di Athena, mesin kueri tidak memiliki pengetahuan tentang hubungan antara kolom dan kunci partisi. Untuk alasan ini, Anda harus selalu menambahkan predikat dalam kueri Anda untuk kolom dan kunci partisi.
Misalnya, Anda memiliki event_time
kolom dan kunci event_date
partisi dan ingin menanyakan peristiwa antara pukul 23:00 dan 03:00. Dalam hal ini, Anda harus menyertakan predikat dalam kueri Anda untuk kolom dan kunci partisi, seperti pada contoh berikut.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Tabel gunung es
Dengan tabel Iceberg, Anda dapat menggunakan nilai partisi yang dihitung, yang menyederhanakan kueri Anda. Misalnya, tabel Iceberg Anda dibuat dengan PARTITIONED BY
klausa seperti berikut:
PARTITIONED BY (event_date month(event_time))
Dalam hal ini, mesin kueri secara otomatis memangkas partisi berdasarkan nilai predikat. event_time
Karena itu, kueri Anda hanya perlu menentukan predikat untukevent_time
, seperti pada contoh berikut.
WHERE event_time BETWEEN
start_time
ANDend_time
Untuk informasi selengkapnya, lihat Membuat tabel Iceberg.