Tipe data di Amazon Athena - Amazon Athena

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 Hive untuk pernyataan DDL seperti. CREATE TABLE Untuk kueri DHTML sepertiSELECT,, danCTAS, INSERT INTO Athena menggunakan nama tipe data Trino. Tabel berikut menunjukkan tipe data yang didukung di Athena. Dimana tipe DDL dan DML berbeda dalam hal nama, ketersediaan, atau sintaks, mereka ditampilkan dalam kolom terpisah.

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 (presisi, skala) precisionadalah jumlah total digit. scale(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 panjang ditentukan, string terpotong pada panjang yang ditentukan saat dibaca. Jika string data yang mendasarinya lebih panjang, string data yang mendasarinya tetap tidak berubah.

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 < key_type, value_type > PETA (key_type, value_type) Peta di mana nilai dapat dicari dengan kunci. Semua kunci harus memiliki nilai yang sama, dan semua nilai harus memiliki nilai yang sama.
STRUCT< field_name_1: field_type_1, field_name_2: field_type_2,... > BARIS (field_name_1 field_type_1, field_name_2 field_type_2,...) 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

true

false

TINYINT

TINYINT '123'

SMALLINT

SMALLINT '123'

INT, BILANGAN BULAT

123456790

BIGINT

BIGINT '1234567890'

2147483648

REAL

'123456.78'

DOUBLE

1.234

DESIMAL (presisi, skala)

DECIMAL '123.456'

CHAR, CHAR (panjang)

CHAR 'hello world', CHAR 'hello ''world''!'

VARCHAR, VARCHAR (panjang)

VARCHAR 'hello world', VARCHAR 'hello ''world''!'

VARBINARY

X'00 01 02'

WAKTU, WAKTU (presisi)

TIME '10:11:12', TIME '10:11:12.345'

TIME WITH TIME ZONE

TIME '10:11:12.345 -06:00'

DATE

DATE '2024-03-25'

TIMESTAMP, TIMESTAMP TANPA ZONA WAKTU, TIMESTAMP (presisi), TIMESTAMP (presisi) TANPA ZONA WAKTU

TIMESTAMP '2024-03-25 11:12:13', TIMESTAMP '2024-03-25 11:12:13.456'

TIMESTAMP DENGAN ZONA WAKTU, TIMESTAMP (presisi) DENGAN ZONA WAKTU

TIMESTAMP '2024-03-25 11:12:13.456 Europe/Berlin'

INTERVAL TAHUN KE BULAN

INTERVAL '3' MONTH

INTERVAL HARI KE DETIK

INTERVAL '2' DAY

ARRAY [element_type]

ARRAY['one', 'two', 'three']

PETA (key_type, value_type)

MAP(ARRAY['one', 'two', 'three'], ARRAY[1, 2, 3])

Perhatikan bahwa peta dibuat dari array kunci dan array nilai.

BARIS (field_name_1 field_type_1, field_name_2 field_type_2,...)

ROW('one', 'two', 'three')

Perhatikan bahwa baris yang dibuat dengan cara ini tidak memiliki nama kolom. Untuk menambahkan nama kolom, Anda dapat menggunakanCAST, seperti pada contoh berikut:

CAST(ROW(1, 2, 3) AS ROW(one INT, two INT, three INT))
JSON

JSON '{"one":1, "two": 2, "three": 3}'

UUID

UUID '12345678-90ab-cdef-1234-567890abcdef'

IPADDRESS

IPADDRESS '10.0.0.1'

IPADDRESS '2001:db8::1'

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(n)Nilai selalu memiliki hitungan n karakter. Misalnya, jika Anda mentransmisikan 'abc' keCHAR(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 tipeDATE, 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 tipeTIME, 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 tipeTIMESTAMP, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format YYYY-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 AND end_time AND event_date BETWEEN start_time_date AND end_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 AND end_time

Untuk informasi selengkapnya, lihat Membuat tabel Iceberg.