Mesin Athena versi 3 - Amazon Athena

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 dan Presto sehingga Anda mendapatkan akses lebih cepat ke peningkatan komunitas, terintegrasi dan disetel dalam mesin Athena.

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 Featuredan 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 menggunakan tdigest alih-alih qdigest 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_geographyFungsi 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_percentileFungsi 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(value, base) Di mesin Athena versi 3, ini telah berubah sesuai log(base, value) dengan standar. SQL

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":nullbukan 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 lebih awal dari 0.13.0. Karena SDK versi sebelumnya tidak mengisi kolom AWS Glue, Lake Formation tidak dapat menentukan kolom yang diizinkan untuk diakses.

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/path/file_name.parquet atau Tipe kolom 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(precision, scale) sintaks untuk menentukan tipe data untuk kolom. decimal

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

2023-02-24T00:00:00.000Z

2023-02-24T00:00:00.000Z

Mesin Athena versi 3:

# _col0 _col1
1

2023-02-24T00:00:00.000Z

2023-02-24T00:00:00.000

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.

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 hasilndibatasi 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.