Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mesin Athena versi 3
Untuk engine versi 3, Athena telah memperkenalkan pendekatan integrasi berkelanjutan untuk manajemen perangkat lunak open source yang meningkatkan konkurensi dengan proyek Trino
Rilis mesin Athena versi 3 ini mendukung semua fitur mesin Athena versi 2. Dokumen ini menyoroti perbedaan utama antara mesin Athena versi 2 dan mesin Athena versi 3. Untuk informasi selengkapnya, lihat artikel AWS
Big Data Blog Upgrade ke mesin Athena versi 3 untuk meningkatkan kinerja kueri dan mengakses lebih banyak fitur analitik
Memulai
Untuk memulai, buat workgroup Athena baru yang menggunakan mesin Athena versi 3 atau konfigurasikan workgroup yang ada untuk menggunakan versi 3. Setiap workgroup Athena dapat meng-upgrade dari engine versi 2 ke engine versi 3 tanpa gangguan dalam kemampuan Anda untuk mengirimkan pertanyaan.
Untuk informasi selengkapnya, lihat Mengubah versi mesin Athena.
Perbaikan dan fitur baru
Fitur dan pembaruan yang tercantum termasuk peningkatan dari Athena sendiri dan dari fungsionalitas yang tergabung dari Trino open source. Untuk daftar lengkap operator dan fungsi SQL kueri, lihat dokumentasi Trino
Fitur Ditambahkan
Dukungan algoritma bucketing Apache Spark
Athena dapat membaca bucket yang dihasilkan oleh algoritma hash Spark. Untuk menentukan bahwa data awalnya ditulis oleh algoritma hash Spark, masukkan ('bucketing_format'='spark')
TBLPROPERTIES
klausa pernyataan Anda. CREATE TABLE
Jika properti ini tidak ditentukan, algoritma hash Hive digunakan.
CREATE EXTERNAL TABLE `spark_bucket_table`( `id` int, `name` string ) CLUSTERED BY (`name`) INTO 8 BUCKETS STORED AS PARQUET LOCATION 's3://amzn-s3-demo-bucket/to/bucketed/table/' TBLPROPERTIES ('bucketing_format'='spark')
Fungsi Menambahkan
Fungsi di bagian ini baru untuk mesin Athena versi 3.
Fungsi agregat
listagg (x, separator) - Mengembalikan nilai input digabungkan, dipisahkan oleh string pemisah.
SELECT listagg(value, ',') WITHIN GROUP (ORDER BY value) csv_value FROM (VALUES 'a', 'c', 'b') t(value);
Fungsi array
contains_sequence (x, seq) - Mengembalikan nilai true jika array x berisi semua array seq sebagai subset sekuensial (semua nilai dalam urutan berurutan yang sama).
SELECT contains_sequence(ARRAY [1,2,3,4,5,6], ARRAY[1,2]);
Fungsi biner
murmur3 (biner) — Menghitung hash biner 128-bit MurmurHash 3.
SELECT murmur3(from_base64('aaaaaa'));
Fungsi konversi
format_number (number) - Mengembalikan string diformat menggunakan simbol unit.
SELECT format_number(123456); -- '123K'
SELECT format_number(1000000); -- '1M'
Fungsi tanggal dan waktu
timezone_hour (timestamp) - Mengembalikan jam zona waktu offset dari stempel waktu.
SELECT EXTRACT(TIMEZONE_HOUR FROM TIMESTAMP '2020-05-10 12:34:56 +08:35');
timezone_minute (timestamp) - Mengembalikan menit zona waktu offset dari stempel waktu.
SELECT EXTRACT(TIMEZONE_MINUTE FROM TIMESTAMP '2020-05-10 12:34:56 +08:35');
Fungsi geospasial
to_encoded_polyline (Geometry) - Mengkodekan linestring atau multipoint ke polyline.
SELECT to_encoded_polyline(ST_GeometryFromText( 'LINESTRING (-120.2 38.5, -120.95 40.7, -126.453 43.252)'));
from_encoded_polyline (varchar) - Mendekode polyline ke linestring.
SELECT ST_AsText(from_encoded_polyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));
to_geojson_geometry (SphericalGeography) - Mengembalikan geografi bola tertentu dalam format Geo. JSON
SELECT to_geojson_geometry(to_spherical_geography(ST_GeometryFromText( 'LINESTRING (0 0, 1 2, 3 4)')));
from_geojson_geometry (varchar) - Mengembalikan objek tipe geografi bola dari representasi Geo, menghapus kunci/nilai non geometri. JSON Feature
dan FeatureCollection
tidak didukung.
SELECT from_geojson_geometry(to_geojson_geometry(to_spherical_geography(ST_GeometryFromText( 'LINESTRING (0 0, 1 2, 3 4)'))));
geometry_nearest_points (Geometry, Geometry) — Mengembalikan titik-titik pada setiap geometri yang terdekat satu sama lain. Jika salah satu geometri kosong, kembaliNULL. Jika tidak, mengembalikan deretan dua Point
objek yang memiliki jarak minimum dari dua titik pada geometri. Poin pertama adalah dari argumen Geometri pertama, yang kedua dari argumen Geometri kedua. Jika ada beberapa pasangan dengan jarak minimum yang sama, satu pasangan dipilih secara sewenang-wenang.
SELECT geometry_nearest_points(ST_GeometryFromText( 'LINESTRING (50 100, 50 200)'), ST_GeometryFromText( 'LINESTRING (10 10, 20 20)'));
Atur fungsi Digest
make_set_digest (x) — Menyusun semua nilai masukan x ke dalam setdigest.
SELECT make_set_digest(value) FROM (VALUES 1, 2, 3) T(value);
Fungsi string
soundex (char) - Mengembalikan string karakter yang berisi representasi fonetik char.
SELECT name FROM nation WHERE SOUNDEX(name) = SOUNDEX('CHYNA'); -- CHINA
concat_ws (string0, string1,..., stringN) - Mengembalikan rangkaian menggunakan sebagai pemisah. string1, string2, ...,
stringN
string0
Jika string0
nol, maka nilai kembalinya adalah nol. Setiap nilai null yang disediakan dalam argumen setelah pemisah dilewati.
SELECT concat_ws(',', 'def', 'pqr', 'mno');
Fungsi jendela
GROUPS— Menambahkan dukungan untuk bingkai jendela berdasarkan grup.
SELECT array_agg(a) OVER( ORDER BY a ASC NULLS FIRST GROUPS BETWEEN 1 PRECEDING AND 2 FOLLOWING) FROM (VALUES 3, 3, 3, 2, 2, 1, null, null) T(a);
Peningkatan kinerja
Peningkatan kinerja di mesin Athena versi 3 meliputi yang berikut ini.
-
Pengambilan metadata AWS Glue tabel yang lebih cepat — Kueri yang melibatkan beberapa tabel akan mengurangi waktu perencanaan kueri.
-
Pemfilteran dinamis untuk RIGHT JOIN - Pemfilteran dinamis sekarang diaktifkan untuk gabungan kanan yang memiliki kondisi gabungan kesetaraan, seperti pada contoh berikut.
SELECT * FROM lineitem RIGHT JOIN tpch.tiny.supplier ON lineitem.suppkey = supplier.suppkey WHERE supplier.name = 'abc';
-
Pernyataan siap besar - Meningkatkan ukuran header HTTP permintaan/respons default menjadi 2 MB untuk memungkinkan pernyataan disiapkan besar.
-
approx_percentile () -
approx_percentile
Fungsi sekarang menggunakantdigest
alih-alihqdigest
untuk mengambil nilai kuantil perkiraan dari distribusi. Ini menghasilkan kinerja yang lebih tinggi dan penggunaan memori yang lebih rendah. Perhatikan bahwa sebagai akibat dari perubahan ini, fungsi mengembalikan hasil yang berbeda dari yang terjadi di mesin Athena versi 2. Untuk informasi selengkapnya, lihat Fungsi approx_percentile mengembalikan hasil yang berbeda.
Peningkatan keandalan
Penggunaan dan pelacakan memori mesin umum di mesin Athena versi 3 telah ditingkatkan. Kueri besar kurang rentan terhadap kegagalan dari crash node.
Peningkatan sintaks kueri
INTERSECTALL- Ditambahkan dukungan untukINTERSECT ALL
.
SELECT * FROM (VALUES 1, 2, 3, 4) INTERSECT ALL SELECT * FROM (VALUES 3, 4);
EXCEPTALL- Ditambahkan dukungan untukEXCEPT
ALL
.
SELECT * FROM (VALUES 1, 2, 3, 4) EXCEPT ALL SELECT * FROM (VALUES 3, 4);
RANGEPRECEDING- Ditambahkan dukungan untuk RANGE PRECEDING
dalam fungsi jendela.
SELECT sum(x) over (order by x range 1 preceding) FROM (values (1), (1), (2), (2)) t(x);
MATCH_ RECOGNIZE - Ditambahkan dukungan untuk pencocokan pola baris, seperti pada contoh berikut.
SELECT m.id AS row_id, m.match, m.val, m.label FROM (VALUES(1, 90),(2, 80),(3, 70),(4, 70)) t(id, value) MATCH_RECOGNIZE ( ORDER BY id MEASURES match_number() AS match, RUNNING LAST(value) AS val, classifier() AS label ALL ROWS PER MATCH AFTER MATCH SKIP PAST LAST ROW PATTERN (() | A) DEFINE A AS true ) AS m;
Format data dan peningkatan tipe data
Mesin Athena versi 3 memiliki format data dan peningkatan tipe data berikut.
-
LZ4dan ZSTD - Menambahkan dukungan untuk membaca LZ4 dan data Parket ZSTD terkompresi. Menambahkan dukungan untuk menulis ORC data ZSTD terkompresi.
-
Tabel berbasis symlink - Menambahkan dukungan untuk membuat tabel berbasis symlink pada file Avro. Berikut contohnya.
CREATE TABLE test_avro_symlink ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' ... INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
-
SphericalGeography SphericalGeography Jenis ini memberikan dukungan asli untuk fitur spasial yang diwakili pada koordinat geografis (kadang-kadang disebut koordinat geodetik, lat/lon, atau lon/lat). Koordinat geografis adalah koordinat bola yang dinyatakan dalam satuan sudut (derajat).
to_spherical_geography
Fungsi mengembalikan koordinat geografis (bola) dari koordinat geometris (planar), seperti pada contoh berikut.SELECT to_spherical_geography(ST_GeometryFromText( 'LINESTRING (-40.2 28.9, -40.2 31.9, -37.2 31.9)'));
Melanggar perubahan
Saat Anda bermigrasi dari mesin Athena versi 2 ke mesin Athena versi 3, perubahan tertentu dapat memengaruhi skema tabel, sintaks, atau penggunaan tipe data. Bagian ini mencantumkan pesan kesalahan terkait dan menyediakan solusi yang disarankan.
Perubahan sintaks kueri
IGNORENULLStidak dapat digunakan dengan fungsi jendela non-nilai
Pesan galat: Tidak dapat menentukan klausa perlakuan nol untuk
.bool_or
fungsi
Penyebab: sekarang IGNORE NULLS
dapat digunakan hanya dengan fungsi nilaifirst_value
,last_value
,nth_value
,lead
, danlag
. Perubahan ini dibuat agar sesuai dengan ANSI SQL spesifikasi.
Solusi yang disarankan: Hapus IGNORE
NULLS
dari fungsi jendela non-nilai dalam string kueri.
CONCATfungsi harus memiliki dua atau lebih argumen
Pesan Kesalahan: INVALID_ FUNCTION _ARGUMENT: Harus ada dua atau lebih argumen penggabungan
Penyebab: Sebelumnya, fungsi CONCAT
string menerima argumen tunggal. Di mesin Athena versi 3, CONCAT
fungsi ini membutuhkan minimal dua argumen.
Solusi yang disarankan: Ubah kejadian CONCAT(str)
toCONCAT(str, '')
.
Di mesin Athena versi 3, fungsi dapat memiliki tidak lebih dari 127 argumen. Untuk informasi selengkapnya, lihat Terlalu banyak argumen untuk panggilan fungsi.
Fungsi approx_percentile mengembalikan hasil yang berbeda
approx_percentile
Fungsi ini mengembalikan hasil yang berbeda di mesin Athena versi 3 daripada yang dilakukan di mesin Athena versi 2.
Pesan kesalahan: Tidak ada.
Penyebab: approx_percentile
Fungsi ini tunduk pada perubahan versi.
penting
Karena output approx_percentile
fungsi adalah perkiraan, dan perkiraan dapat berubah dari satu versi ke versi berikutnya, Anda tidak harus bergantung pada approx_percentile
fungsi untuk aplikasi kritis.
Solusi yang Disarankan: Untuk memperkirakan perilaku mesin Athena versi 2approx_percentile
, Anda dapat menggunakan serangkaian fungsi yang berbeda di mesin Athena versi 3. Misalnya, Anda memiliki kueri berikut di mesin Athena versi 2:
SELECT approx_percentile(somecol, 2E-1)
Untuk memperkirakan output yang sama di mesin Athena versi 3, Anda dapat mencoba qdigest_agg
dan value_at_quantile
berfungsi, seperti pada contoh berikut. Perhatikan bahwa, bahkan dengan solusi ini, perilaku yang sama tidak dijamin.
SELECT value_at_quantile(qdigest_agg(somecol, 1), 2E-1)
Fungsi geospasial tidak mendukung input varbinary
Pesan kesalahan: FUNCTION_ NOT _ FOUND untuk st_ XXX
Penyebab: Beberapa fungsi geospasial tidak lagi mendukung jenis VARBINARY
input lama atau tanda tangan fungsi terkait teks.
Solusi yang disarankan: Gunakan fungsi geospasial untuk mengonversi tipe input menjadi tipe yang didukung. Jenis input yang didukung ditunjukkan dalam pesan kesalahan.
Dalam klausa GROUP BY, kolom bersarang harus dikutip ganda
Pesan kesalahan:”
column_name
"."nested_column
“harus berupa ekspresi agregat atau muncul dalam klausa GROUP BY
Penyebab: Mesin Athena versi 3 mengharuskan nama kolom bersarang dalam GROUP BY
klausa dikutip ganda. Misalnya, kueri berikut menghasilkan kesalahan karena, dalam GROUP BY
klausa, tidak user.name
dikutip ganda.
SELECT "user"."name" FROM dataset GROUP BY user.name
Solusi yang disarankan: Tempatkan tanda kutip ganda di sekitar nama kolom bersarang dalam GROUP BY
klausa, seperti pada contoh berikut.
SELECT "user"."name" FROM dataset GROUP BY "user"."name"
FilterNode Kesalahan tak terduga saat menggunakan OPTIMIZE pada tabel Iceberg
Pesan kesalahan: Tak terduga FilterNode ditemukan dalam rencana; mungkin konektor tidak dapat menangani WHERE ekspresi yang disediakan.
Penyebab: OPTIMIZE
Pernyataan yang dijalankan pada tabel Iceberg menggunakan WHERE
klausa yang menyertakan kolom non-partisi dalam ekspresi filternya.
Solusi yang Disarankan: OPTIMIZE
Pernyataan ini mendukung penyaringan berdasarkan partisi saja. Saat Anda menjalankan OPTIMIZE
tabel yang dipartisi, sertakan hanya kolom partisi dalam klausa. WHERE
Jika Anda menjalankan OPTIMIZE
tabel non-partisi, jangan tentukan klausa. WHERE
Log () urutan fungsi argumen
Di mesin Athena versi 2, urutan argumen untuk log()
fungsi tersebut adalah. log(
Di mesin Athena versi 3, ini telah berubah sesuai value
,
base
)log(
dengan standar. SQLbase
,
value
)
Fungsi menit () tidak mendukung interval tahun ke bulan
Pesan kesalahan: Parameter tak terduga (interval tahun ke bulan) untuk menit fungsi. Diharapkan: menit (stempel waktu dengan zona waktu), menit (waktu dengan zona waktu), menit (stempel waktu), menit (waktu), menit (interval hari ke detik).
Penyebab: Pada mesin Athena versi 3, pemeriksaan tipe telah dibuat lebih tepat sesuai EXTRACT
dengan spesifikasi. ANSI SQL
Solusi yang disarankan: Perbarui kueri untuk memastikan jenis cocok dengan tanda tangan fungsi yang disarankan.
ORDEREkspresi BY harus muncul dalam SELECT daftar
Pesan galat: Untuk SELECTDISTINCT, ekspresi ORDER BY harus muncul dalam SELECT daftar
Penyebab: Aliasing tabel yang salah digunakan dalam SELECT
klausa.
Solusi yang disarankan: Periksa kembali apakah semua kolom dalam ORDER BY
ekspresi memiliki referensi yang tepat dalam SELECT DISTINCT
klausa.
Kegagalan kueri saat membandingkan beberapa kolom yang dikembalikan dari subquery
Contoh pesan kesalahan: Ekspresi nilai dan hasil subquery harus dari jenis yang sama: baris (varchar, varchar) vs baris (baris (varchar, varchar))
Penyebab: Karena pembaruan sintaks di mesin Athena versi 3, kesalahan ini terjadi ketika kueri mencoba membandingkan beberapa nilai yang dikembalikan dari subquery, dan pernyataan subquery melampirkan daftar kolomnya dalam tanda kurung, seperti pada contoh berikut. SELECT
SELECT * FROM table1 WHERE (t1_col1, t1_col2) IN (SELECT (t2_col1, t2_col2) FROM table2)
Solusi: Di mesin Athena versi 3, hapus tanda kurung di sekitar daftar kolom dalam SELECT
pernyataan subquery, seperti pada contoh query diperbarui berikut.
SELECT * FROM table1 WHERE (t1_col1, t1_col2) IN (SELECT t2_col1, t2_col2 FROM table2)
SKIPadalah kata yang dicadangkan untuk DML pertanyaan
Kata SKIP
itu sekarang menjadi kata yang dicadangkan untuk DML pertanyaan sepertiSELECT
. Untuk digunakan SKIP
sebagai pengidentifikasi dalam DML kueri, lampirkan dalam tanda kutip ganda.
Untuk informasi lebih lanjut tentang kata-kata yang dipesan di Athena, lihat. Melarikan diri dari kata kunci yang dicadangkan dalam kueri
SYSTEMVERSIONKlausa SYSTEM _ TIME dan _ tidak digunakan lagi untuk perjalanan waktu
Pesan kesalahan: masukan tidak cocok 'SYSTEM_TIME'. Mengharapkan: 'TIMESTAMP', '' VERSION
Penyebab: Di mesin Athena versi 2, tabel Iceberg menggunakan FOR SYSTEM_VERSION AS OF
klausa dan untuk stempel FOR SYSTEM_TIME AS OF
waktu dan perjalanan waktu versi. Mesin Athena versi 3 menggunakan klausa FOR
TIMESTAMP AS OF
danFOR VERSION AS OF
.
Solusi yang disarankan: Perbarui SQL kueri untuk menggunakan VERSION AS OF
klausa TIMESTAMP AS OF
dan untuk operasi perjalanan waktu, seperti pada contoh berikut.
Perjalanan waktu dengan stempel waktu:
SELECT * FROM TABLE FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)
Perjalanan waktu berdasarkan versi:
SELECT * FROM TABLE FOR VERSION AS OF 949530903748831860
Terlalu banyak argumen untuk konstruktor array
Pesan Kesalahan: TOO_ MANY _ARGUMENTS: Terlalu banyak argumen untuk konstruktor array
.
Penyebab: Jumlah maksimum elemen dalam konstruktor array sekarang diatur pada 254.
Solusi yang disarankan: Pecah elemen menjadi beberapa array yang masing-masing memiliki 254 atau lebih sedikit elemen, dan gunakan CONCAT
fungsi untuk menggabungkan array, seperti pada contoh berikut.
CONCAT( ARRAY[x1,x2,x3...x254], ARRAY[y1,y2,y3...y254], ... )
Pengidentifikasi dengan panjang nol tidak diizinkan
Pesan galat: Pengenal terbatas tanpa panjang nol tidak diizinkan
.
Penyebab: Sebuah query menggunakan string kosong sebagai alias kolom.
Solusi yang disarankan: Perbarui kueri untuk menggunakan alias yang tidak kosong untuk kolom.
Perubahan pemrosesan data
Validasi bucket
Pesan Kesalahan: HIVE_ INVALID _ BUCKET _FILES: Tabel sarang rusak
.
Penyebab: Meja mungkin rusak. Untuk memastikan kebenaran kueri untuk tabel bucketed, Athena engine versi 3 memungkinkan validasi tambahan pada tabel berember untuk memastikan kebenaran kueri dan menghindari kegagalan tak terduga saat runtime.
Solusi yang disarankan: Buat ulang tabel menggunakan mesin Athena versi 3.
Mengirimkan struct ke JSON sekarang mengembalikan nama bidang
Saat Anda mentransmisikan struct
ke JSON dalam SELECT
kueri di mesin Athena versi 3, pemeran sekarang mengembalikan nama bidang dan nilai (misalnya "useragent":null
bukan hanya nilai (misalnya,null
).
Perubahan penegakan keamanan tingkat kolom tabel gunung es
Pesan Kesalahan: Akses Ditolak: Tidak dapat memilih dari kolom
Penyebab: Tabel Iceberg dibuat di luar Athena dan menggunakan versi Apache SDK Iceberg
Solusi yang disarankan: Lakukan pembaruan menggunakan ALTER TABLE SET TBLPROPERTIES pernyataan Athena atau gunakan Iceberg terbaru SDK untuk memperbaiki tabel dan memperbarui informasi kolom di. AWS Glue
Null dalam tipe data Daftar sekarang disebarkan ke UDFs
Pesan kesalahan: Pengecualian Pointer Null
Penyebab: Masalah ini dapat memengaruhi Anda jika Anda menggunakan UDF konektor dan telah menerapkan fungsi Lambda yang ditentukan pengguna.
Athena engine versi 2 memfilter null dalam tipe data Daftar yang diteruskan ke fungsi yang ditentukan pengguna. Di mesin Athena versi 3, null sekarang dipertahankan dan diteruskan ke. UDF Hal ini dapat menyebabkan pengecualian pointer null jika UDF upaya untuk dereferensi elemen null tanpa memeriksa.
Misalnya, jika Anda memiliki data [null, 1, null, 2, 3, 4]
dalam sumber data asal seperti DynamoDB, berikut ini diteruskan ke fungsi Lambda yang ditentukan pengguna:
Mesin Athena versi 2: [1,2,3,4]
Mesin Athena versi 3: [null, 1, null, 2, 3,
4]
Solusi yang disarankan: Pastikan fungsi Lambda yang ditentukan pengguna Anda menangani elemen nol dalam tipe data daftar.
Substring dari array karakter tidak lagi berisi spasi empuk
Pesan kesalahan: Tidak ada kesalahan yang dilemparkan, tetapi string yang dikembalikan tidak lagi berisi spasi empuk. Misalnya, substr(char[20],1,100)
sekarang mengembalikan string dengan panjang 20 bukan 100.
Solusi yang disarankan: Tidak ada tindakan yang diperlukan.
Pemaksaan tipe kolom desimal yang tidak didukung
Pesan kesalahan: HIVE _ CURSOR _ERROR: Gagal membaca file Parket: s3://amzn-s3-demo-bucket/
atau Tipe kolom path
/file_name
.parquet yang tidak didukung (varchar) untuk kolom Parket ([
column_name
]
Penyebab: Athena engine versi 2 kadang-kadang berhasil (tetapi sering gagal) ketika mencoba pemaksaan tipe data dari desimal. varchar
Karena Athena engine versi 3 memiliki validasi tipe yang memeriksa apakah tipe tersebut kompatibel sebelum mencoba membaca nilainya, upaya pemaksaan seperti itu sekarang selalu gagal.
Solusi yang Disarankan: Untuk mesin Athena versi 2 dan mesin Athena versi 3, ubah skema Anda AWS Glue untuk menggunakan tipe data numerik, bukan untuk kolom desimal dalam file Parketvarchar
. Baik rawl ulang data dan pastikan bahwa tipe data kolom baru adalah tipe desimal, atau secara manual membuat ulang tabel di Athena dan menggunakan decimal(
sintaks untuk menentukan tipe data untuk kolom. decimalprecision
,
scale
)
Nilai NaN mengambang atau ganda tidak dapat lagi dilemparkan ke bigint
Pesan Kesalahan: INVALID_ CAST _ARGUMENT: Tidak dapat mentransmisikan NaN nyata/ganda
ke bigint
Penyebab: Di mesin Athena versi 3, tidak NaN
bisa lagi dilemparkan ke 0 sebagai. bigint
Solusi yang disarankan: Pastikan NaN
nilai tidak ada dalam float
atau double
kolom saat Anda mentransmisikanbigint
.
uuid () fungsi mengembalikan perubahan tipe
Masalah berikut mempengaruhi tabel dan tampilan.
Pesan galat: Jenis sarang yang tidak didukung
: uuid
Penyebab: Di mesin Athena versi 2, uuid()
fungsi mengembalikan string, tetapi di mesin Athena versi 3, ia mengembalikan pseudo yang dihasilkan secara acak (tipe 4). UUID Karena tipe data UUID kolom tidak didukung di Athena, uuid()
fungsi tidak dapat lagi digunakan secara langsung dalam CTAS kueri untuk menghasilkan UUID kolom di mesin Athena versi 3.
Misalnya, CREATE TABLE
pernyataan berikut berhasil diselesaikan di mesin Athena versi 2 tetapi NOTmengembalikan SUPPORTED _: Jenis sarang yang tidak didukung: uuid di mesin Athena versi 3:
CREATE TABLE uuid_table AS SELECT uuid() AS myuuid
Demikian pula, CREATE VIEW
pernyataan berikut berhasil diselesaikan di mesin Athena versi 2 tetapi mengembalikan Jenis kolom tidak valid untuk kolom myuuid: Jenis sarang yang tidak didukung: uuid
di mesin Athena versi 3:
CREATE VIEW uuid_view AS SELECT uuid() AS myuuid
Ketika tampilan yang dibuat di mesin Athena versi 2 ditanyakan di mesin Athena versi 3, kesalahan seperti berikut terjadi:
VIEW_IS_STALE: baris 1:15: Lihat 'awsdatacatalog.mydatabase.uuid_view' sudah basi atau dalam keadaan tidak valid: kolom [myuuid] dari jenis uuid yang diproyeksikan dari tampilan kueri pada posisi 0 tidak dapat dipaksa ke kolom [myuuid] tipe varchar yang disimpan dalam definisi tampilan
Solusi yang Disarankan: Saat Anda membuat tabel atau tampilan, gunakan cast()
fungsi untuk mengonversi uuid()
output menjadivarchar
, seperti pada contoh berikut:
CREATE TABLE uuid_table AS SELECT CAST(uuid() AS VARCHAR) AS myuuid
CREATE VIEW uuid_view AS SELECT CAST(uuid() AS VARCHAR) AS myuuid
CHARdan VARCHAR masalah paksaan
Gunakan solusi di bagian ini jika Anda mengalami masalah paksaan dengan dan varchar
di char
mesin Athena versi 3. Jika Anda tidak dapat menggunakan solusi ini, silakan hubungi. AWS Support
CONCATkegagalan fungsi dengan campuran CHAR dan VARCHAR input
Masalah: Kueri berikut berhasil pada mesin Athena versi 2.
SELECT concat(CAST('abc' AS VARCHAR(20)), '12', CAST('a' AS CHAR(1)))
Namun, pada mesin Athena versi 3, kueri yang sama gagal dengan yang berikut:
Pesan kesalahan: FUNCTION_ NOT _FOUND: baris 1:8: Parameter tak terduga (varchar (20), varchar (2), char (1)) untuk fungsi concat. Diharapkan: concat (char (x), char (y)), concat (array (E), E) E, concat (E, array (E)) E, concat (array (E)) E, concat (varchar), concat (varbinary)
Solusi yang Disarankan: Saat menggunakan concat
fungsi, lemparkan ke char
atauvarchar
, tetapi tidak ke campuran keduanya.
SQL|| kegagalan penggabungan dengan dan input CHAR VARCHAR
Pada mesin Athena versi 3, operator ||
penggabungan batang vertikal ganda memerlukan input. varchar
Input tidak dapat berupa kombinasi varchar
dan char
jenis.
Pesan kesalahan: TYPE_ NOT _FOUND: baris 1:26: Jenis tidak diketahui: char (
65537)
Penyebab: Kueri yang digunakan ||
untuk menggabungkan a char
dan a varchar
dapat menghasilkan kesalahan, seperti pada contoh berikut.
SELECT CAST('a' AS CHAR) || CAST('b' AS VARCHAR)
Solusi yang Disarankan: Gabungkan varchar
denganvarchar
, seperti pada contoh berikut.
SELECT CAST('a' AS VARCHAR) || CAST('b' AS VARCHAR)
CHARdan kegagalan VARCHAR UNION kueri
Pesan galat: NOT_SUPPORTED: Jenis sarang yang tidak didukung: char (65536). CHARJenis yang didukung: CHAR (<= 255)
Penyebab: Sebuah query yang mencoba untuk menggabungkan char
danvarchar
, seperti dalam contoh berikut:
CREATE TABLE t1 (c1) AS SELECT CAST('a' as CHAR) as c1 UNION ALL SELECT CAST('b' AS VARCHAR) AS c1
Solusi yang Disarankan: Dalam kueri contoh, 'a'
gunakan sebagai varchar
bukanchar
.
Ruang kosong yang tidak diinginkan setelah CHAR atau VARCHAR paksaan
Di Athena engine versi 3, kapan char(X)
dan varchar
data dipaksa ke satu jenis saat membentuk array atau kolom tunggal, char(65535)
adalah tipe target, dan setiap bidang berisi banyak spasi trailing yang tidak diinginkan.
Penyebab: Mesin Athena versi 3 memaksa varchar
dan char(X)
ke char(65535)
dan kemudian melapisi data dengan spasi.
Solusi yang Disarankan: Lemparkan setiap bidang secara eksplisit ke. varchar
Perubahan stempel waktu
Casting Timestamp dengan zona waktu ke perubahan perilaku varchar
Di mesin Athena versi 2, casting a Timestamp
dengan zona waktu varchar
menyebabkan beberapa literal zona waktu berubah (misalnya, US/Eastern
diubah menjadi). America/New_York
Perilaku ini tidak terjadi di mesin Athena versi 3.
Tanggal timestamp overflow melempar kesalahan
Pesan kesalahan: Millis overflow
: XXX
Penyebab: Karena tanggal ISO 8601 tidak diperiksa luapan di mesin Athena versi 2, beberapa tanggal menghasilkan stempel waktu negatif. Mesin Athena versi 3 memeriksa luapan ini dan memberikan pengecualian.
Solusi yang Disarankan: Pastikan stempel waktu berada dalam jangkauan.
Zona waktu politik dengan TIME tidak didukung
Pesan galat: INVALIDLITERAL
Penyebab: Pertanyaan sepertiSELECT TIME
'13:21:32.424 America/Los_Angeles'
.
Solusi yang disarankan: Hindari menggunakan zona waktu politik denganTIME
.
Ketidakcocokan presisi di kolom Timestamp menyebabkan kesalahan serialisasi
Pesan galat: SERIALIZATION _ERROR: Tidak dapat membuat serial kolom '
COLUMNZ
'tipe 'stempel waktu (3)' pada posisi X
:Y
COLUMNZ
adalah nama keluaran kolom yang menyebabkan masalah. Angka-angka X
:Y
menunjukkan posisi kolom dalam output.
Penyebab: Mesin Athena versi 3 memeriksa untuk memastikan bahwa ketepatan stempel waktu dalam data sama dengan presisi yang ditentukan untuk tipe data kolom dalam spesifikasi tabel. Saat ini, presisi ini selalu 3. Jika data memiliki presisi yang lebih besar dari ini, kueri gagal dengan kesalahan yang dicatat.
Solusi yang disarankan: Periksa data Anda untuk memastikan bahwa stempel waktu Anda memiliki presisi milidetik.
Ketepatan stempel waktu yang salah dalam UNLOAD dan CTAS kueri untuk tabel Iceberg
Pesan kesalahan: Ketepatan stempel waktu yang salah untuk stempel waktu (6);
presisi yang dikonfigurasi adalah MILLISECONDS
Penyebab: Mesin Athena versi 3 memeriksa untuk memastikan bahwa ketepatan stempel waktu dalam data sama dengan presisi yang ditentukan untuk tipe data kolom dalam spesifikasi tabel. Saat ini, presisi ini selalu 3. Jika data memiliki presisi yang lebih besar dari ini (misalnya, mikrodetik, bukan milidetik), kueri dapat gagal dengan kesalahan yang dicatat.
Solusi: Untuk mengatasi masalah ini, pertama-tama CAST
presisi stempel waktu ke 6, seperti pada CTAS contoh berikut yang membuat tabel Iceberg. Perhatikan bahwa presisi harus ditentukan sebagai 6 bukan 3 untuk menghindari kesalahan presisi Timestamp (3) tidak didukung untuk
Iceberg.
CREATE TABLE my_iceberg_ctas WITH (table_type = 'ICEBERG', location = 's3://amzn-s3-demo-bucket/table_ctas/', format = 'PARQUET') AS SELECT id, CAST(dt AS timestamp(6)) AS "dt" FROM my_iceberg
Kemudian, karena Athena tidak mendukung stempel waktu 6, berikan nilai lagi ke stempel waktu (misalnya, dalam tampilan). Contoh berikut menciptakan tampilan dari my_iceberg_ctas
tabel.
CREATE OR REPLACE VIEW my_iceberg_ctas_view AS SELECT cast(dt AS timestamp) AS dt FROM my_iceberg_ctas
Membaca tipe Long sebagai Timestamp atau sebaliknya dalam ORC file sekarang menyebabkan kesalahan file yang salah ORC
Pesan kesalahan: Kesalahan saat membuka Hive split 'FILE(SPLITPOSITION)' File cacat ORC. Tidak dapat membaca timestamp SQL tipe dari ORC stream .long_type dari tipe LONG
Penyebab: Mesin Athena versi 3 sekarang menolak paksaan implisit dari tipe data ke atau dari keLong
. Timestamp
Timestamp
Long
Sebelumnya, Long
nilai secara implisit diubah menjadi stempel waktu seolah-olah mereka adalah milidetik epoch.
Solusi yang disarankan: Gunakan from_unixtime
fungsi untuk mentransmisikan kolom secara eksplisit, atau gunakan from_unixtime
fungsi untuk membuat kolom tambahan untuk kueri future.
Waktu dan interval tahun ke bulan tidak didukung
Pesan galat: TYPEMISMATCH
Penyebab: Mesin Athena versi 3 tidak mendukung waktu dan interval tahun ke bulan (misalnya,SELECT TIME '01:00' + INTERVAL '3'
MONTH
).
Timestamp overflow untuk format parket int96
Pesan galat: Nanos tidak valid timeOfDay
Penyebab: Stempel waktu meluap untuk format Parket. int96
Solusi yang disarankan: Identifikasi file tertentu yang memiliki masalah. Kemudian buat file data lagi dengan perpustakaan Parket terkenal up-to-date, atau gunakan AthenaCTAS. Jika masalah berlanjut, hubungi dukungan Athena dan beri tahu kami bagaimana file data dihasilkan.
Ruang yang diperlukan antara nilai tanggal dan waktu saat casting dari string ke stempel waktu
Pesan kesalahan: INVALID_ CAST _ARGUMENT: Nilai tidak dapat dilemparkan ke stempel waktu
.
Penyebab: Athena engine versi 3 tidak lagi menerima tanda hubung sebagai pemisah yang valid antara nilai tanggal dan waktu dalam string input ke. cast
Misalnya, kueri berikut berfungsi di mesin Athena versi 2 tetapi tidak di mesin Athena versi 3:
SELECT CAST('2021-06-06-23:38:46' AS timestamp) AS this_time
Solusi yang disarankan: Di mesin Athena versi 3, ganti tanda hubung antara tanggal dan waktu dengan spasi, seperti pada contoh berikut.
SELECT CAST('2021-06-06 23:38:46' AS timestamp) AS this_time
to_iso8601 () stempel waktu mengembalikan perubahan nilai
Pesan kesalahan: Tidak ada
Penyebab: Di mesin Athena versi 2, to_iso8601
fungsi mengembalikan stempel waktu dengan zona waktu meskipun nilai yang diteruskan ke fungsi tidak termasuk zona waktu. Di mesin Athena versi 3, to_iso8601
fungsi mengembalikan stempel waktu dengan zona waktu hanya ketika argumen yang dilewatkan termasuk zona waktu.
Misalnya, kueri berikut meneruskan tanggal saat ini ke to_iso8601
fungsi dua kali: pertama sebagai stempel waktu dengan zona waktu, dan kemudian sebagai stempel waktu.
SELECT TO_ISO8601(CAST(CURRENT_DATE AS TIMESTAMP WITH TIME ZONE)), TO_ISO8601(CAST(CURRENT_DATE AS TIMESTAMP))
Output berikut menunjukkan hasil query di setiap mesin.
Mesin Athena versi 2:
# | _col0 | _col1 |
---|---|---|
1 |
|
|
Mesin Athena versi 3:
# | _col0 | _col1 |
---|---|---|
1 |
|
|
Solusi yang disarankan: Untuk mereplikasi perilaku sebelumnya, Anda dapat meneruskan nilai stempel waktu ke with_timezone
fungsi sebelum meneruskannyato_iso8601
, seperti pada contoh berikut:
SELECT to_iso8601(with_timezone(TIMESTAMP '2023-01-01 00:00:00.000', 'UTC'))
Hasil
# | _col0 |
---|---|
1 |
2023-01-01T00:00:00.000Z
|
at_timezone () parameter pertama harus menentukan tanggal
Masalah: Di mesin Athena versi 3, at_timezone
fungsi tidak dapat mengambil time_with_timezone
nilai sebagai parameter pertama.
Penyebab: Tanpa informasi tanggal, tidak dapat ditentukan apakah nilai yang dilewati adalah siang hari atau waktu standar. Misalnya, at_timezone('12:00:00 UTC', 'America/Los_Angeles')
ambigu karena tidak ada cara untuk menentukan apakah nilai yang dilewatkan adalah Pacific Daylight Time (PDT) atau Pacific Standard Time (PST).
Batasan
Mesin Athena versi 3 memiliki keterbatasan sebagai berikut.
-
Kinerja kueri — Banyak kueri berjalan lebih cepat di mesin Athena versi 3, tetapi beberapa paket kueri dapat berbeda dari mesin Athena versi 2. Akibatnya, beberapa pertanyaan dapat berbeda dalam latensi atau biaya.
-
Konektor Trino dan Presto - Baik konektor Trino
maupun Presto tidak didukung. Gunakan Kueri Gabungan Amazon Athena untuk menghubungkan sumber data. Untuk informasi selengkapnya, lihat Gunakan Kueri Federasi Amazon Athena. -
Eksekusi toleran kesalahan — Eksekusi toleran kesalahan Trino (Trino Tardigrade) tidak didukung
. -
Batas parameter fungsi - Fungsi tidak dapat mengambil lebih dari 127 parameter. Untuk informasi selengkapnya, lihat Terlalu banyak argumen untuk panggilan fungsi.
Batas berikut diperkenalkan di Athena mesin versi 2 untuk memastikan bahwa permintaan tidak gagal karena keterbatasan sumber daya. Batas ini tidak dapat dikonfigurasi oleh pengguna.
-
Jumlah elemen hasil— Jumlah elemen hasil
n
dibatasi hingga 10.000 atau kurang untuk fungsi-fungsi berikut:min(col, n)
,max(col, n)
,min_by(col1, col2, n)
, danmax_by(col1, col2, n)
. -
GROUPINGSETS— Jumlah maksimum irisan dalam satu set pengelompokan adalah 2048.
-
Panjang baris file teks maksimum - Panjang baris maksimum default untuk file teks adalah 200 MB.
-
Fungsi urutan ukuran hasil maksimal— Ukuran hasil maksimum dari fungsi urutan adalah 50000 entri. Misalnya,
SELECT sequence(0,45000,1)
berhasil, tapiSELECT sequence(0,55000,1)
gagal dengan pesan kesalahanHasil dari fungsi urutan tidak harus memiliki lebih dari 50000 entri
. Batas ini berlaku untuk semua jenis input untuk fungsi urutan, termasuk cap waktu.