View a markdown version of this page

Pemecahan masalah kueri di Amazon Redshift Spectrum - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pemecahan masalah kueri di Amazon Redshift Spectrum

Topik ini adalah referensi untuk masalah umum yang mungkin Anda temui dengan kueri Amazon Redshift Spectrum.

Untuk melihat kesalahan yang dihasilkan oleh kueri Redshift Spectrum, kueri tabel SVL_S3LOG sistem.

Percobaan ulang terlampaui

Jika permintaan Amazon Redshift Spectrum habis, permintaan tersebut dibatalkan dan dikirim kembali. Setelah lima percobaan ulang gagal, kueri gagal dengan kesalahan berikut.

error:  Spectrum Scan Error: Retries exceeded

Kemungkinan penyebabnya meliputi:

  • Ukuran file besar (lebih besar dari 1 GB). Periksa ukuran file Anda di Amazon S3 dan cari file besar dan ukuran file miring. Pisahkan file besar menjadi file yang lebih kecil, antara 100 MB dan 1 GB. Cobalah untuk membuat file dengan ukuran yang sama.

  • Throughput jaringan lambat. Coba kueri Anda nanti.

Akses dibatasi

Amazon Redshift Spectrum tunduk pada kuota AWS layanan lain. Di bawah penggunaan tinggi, permintaan Redshift Spectrum mungkin diperlukan untuk melambat, mengakibatkan kesalahan berikut.

error:  Spectrum Scan Error: Access throttled

Dua jenis pelambatan dapat terjadi:

  • Akses dibatasi oleh Amazon S3.

  • Akses dibatasi oleh AWS KMS.

Konteks kesalahan memberikan detail lebih lanjut tentang jenis pelambatan. Berikut ini, Anda dapat menemukan penyebab dan kemungkinan resolusi untuk pelambatan ini.

Akses dibatasi oleh Amazon S3

Amazon S3 mungkin membatasi permintaan Redshift Spectrum jika tingkat permintaan baca pada awalan terlalu tinggi. Untuk informasi tentang tingkat GET/HEAD permintaan yang dapat Anda capai di Amazon S3, lihat Meng optimalkan Kinerja Amazon S3 di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. Tingkat GET/HEAD permintaan Amazon S3 memperhitungkan semua GET/HEAD permintaan pada awalan sehingga aplikasi berbeda yang mengakses awalan yang sama berbagi tingkat permintaan total.

Jika permintaan Redshift Spectrum Anda sering dibatasi oleh Amazon S3, kurangi jumlah GET/HEAD permintaan Amazon S3 yang dibuat Redshift Spectrum ke Amazon S3. Untuk melakukan ini, coba gabungkan file kecil menjadi file yang lebih besar. Sebaiknya gunakan ukuran file 64 MB atau lebih besar.

Juga pertimbangkan untuk mempartisi tabel Redshift Spectrum Anda untuk mendapatkan manfaat dari pemfilteran awal dan untuk mengurangi jumlah file yang diakses di Amazon S3. Untuk informasi selengkapnya, lihat Partisi tabel eksternal Redshift Spectrum.

Akses dibatasi oleh AWS KMS

Jika Anda menyimpan data di Amazon S3 menggunakan enkripsi sisi server (SSE-S3 atau SSE-KMS), Amazon S3 memanggil operasi API AWS KMS untuk setiap file yang diakses Redshift Spectrum. Permintaan ini diperhitungkan dalam kuota operasi kriptografi Anda; untuk informasi selengkapnya, lihat Kuota AWS KMS Permintaan. Untuk informasi selengkapnya tentang SSE-S3 dan SSE-KMS, lihat Mel indungi Data Menggunakan Server-Side Enkripsi dan Mel indungi Data Menggunakan Server-Side Enkripsi dengan kunci KMS yang Disimpan AWS KMS di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

Langkah pertama untuk mengurangi jumlah permintaan yang dibuat oleh Redshift Spectrum AWS KMS adalah mengurangi jumlah file yang diakses. Untuk melakukan ini, coba gabungkan file kecil menjadi file yang lebih besar. Sebaiknya gunakan ukuran file 64 MB atau lebih besar.

Jika permintaan Redshift Spectrum Anda sering dibatasi AWS KMS, pertimbangkan untuk meminta kenaikan kuota untuk tingkat AWS KMS permintaan Anda untuk operasi kriptografi. Untuk meminta kenaikan kuota, lihat AWS Batas Layanan di Referensi Umum Amazon Web Services.

Batas sumber daya terlampaui

Redshift Spectrum memberlakukan batas atas pada jumlah memori yang dapat digunakan permintaan. Permintaan Redshift Spectrum yang membutuhkan lebih banyak memori gagal, mengakibatkan kesalahan berikut.

error:  Spectrum Scan Error: Resource limit exceeded

Ada dua alasan umum yang dapat menyebabkan permintaan Redshift Spectrum melebihi tunjangan memorinya:

  • Redshift Spectrum memproses sejumlah besar data yang tidak dapat dibagi menjadi potongan yang lebih kecil.

  • Langkah agregasi besar diproses oleh Redshift Spectrum.

Sebaiknya gunakan format file yang mendukung pembacaan paralel dengan ukuran split 128 MB atau kurang. Lihat File data untuk kueri di Amazon Redshift Spectrum format file yang didukung dan pedoman umum untuk pembuatan file data. Saat menggunakan format file atau algoritma kompresi yang tidak mendukung pembacaan paralel, sebaiknya jaga ukuran file antara 64 MB dan 128 MB.

Tidak ada baris yang dikembalikan untuk tabel yang dipartisi

Jika kueri Anda mengembalikan nol baris dari tabel eksternal yang dipartisi, periksa apakah partisi telah ditambahkan untuk tabel eksternal ini. Redshift Spectrum hanya memindai file di lokasi Amazon S3 yang telah ditambahkan secara eksplisit menggunakanALTER TABLE … ADD PARTITION. Kueri SVV_EXTERNAL_PARTITIONS tampilan untuk menemukan partisi yang ada. Jalan ALTER TABLE … ADD PARTITION kan untuk setiap partisi yang hilang.

Tidak ada kesalahan resmi

Verifikasi bahwa peran IAM untuk cluster memungkinkan akses ke objek file Amazon S3. Jika database eksternal Anda ada di Amazon Athena, verifikasi bahwa peran IAM memungkinkan akses ke sumber daya Athena. Untuk informasi selengkapnya, lihat Kebijakan IAM untuk Amazon Redshift Spectrum.

Format data yang tidak kompatibel

Untuk format file kolumnar, seperti Apache Parquet, tipe kolom disematkan dengan data. Jenis kolom dalam definisi CREATE EXTERNAL TABLE harus sesuai dengan jenis kolom file data. Jika ada ketidakcocokan, Anda menerima kesalahan yang mirip dengan berikut ini:

File 'https://s3bucket/location/file has an incompatible Parquet schema for column ‘s3://s3bucket/location.col1'. Column type: VARCHAR, Par

Pesan kesalahan mungkin terpotong karena batas panjang pesan. Untuk mengambil pesan kesalahan lengkap, termasuk nama kolom dan jenis kolom, kueri SVL_S3LOG tampilan sistem.

Contoh berikut menanyakan SVL_S3LOG untuk kueri terakhir yang diselesaikan.

select message from svl_s3log where query = pg_last_query_id() order by query,segment,slice;

Berikut ini adalah contoh hasil yang menunjukkan pesan kesalahan lengkap.

                            message
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-
Spectrum Scan Error. File 'https://s3bucket/location/file has an incompatible
Parquet schema for column ' s3bucket/location.col1'. 
Column type: VARCHAR, Parquet schema:\noptional int64 l_orderkey [i:0 d:1 r:0]\n

Untuk memperbaiki kesalahan, ubah tabel eksternal agar sesuai dengan jenis kolom file Parquet.

Kesalahan sintaks saat menggunakan Hive DDL di Amazon Redshift

Amazon Redshift mendukung bahasa definisi data (DDL) untuk CREATE EXTERNAL TABLE yang mirip dengan Hive DDL. Namun, kedua jenis DDL tidak selalu persis sama. Jika Anda menyalin Hive DDL untuk membuat atau mengubah tabel eksternal Amazon Redshift, Anda mungkin mengalami kesalahan sintaks. Berikut ini adalah contoh perbedaan antara Amazon Redshift dan Hive DDL:

  • Amazon Redshift memerlukan tanda kutip tunggal (') di mana Hive DDL mendukung tanda kutip ganda (“).

  • Amazon Redshift tidak mendukung tipe data STRING. Gunakan VARCHAR sebagai gantinya.

Izin untuk membuat tabel sementara

Untuk menjalankan kueri Redshift Spectrum, pengguna database harus memiliki izin untuk membuat tabel sementara di database. Contoh berikut memberikan izin sementara pada database spectrumdb ke grup spectrumusers pengguna.

grant temp on database spectrumdb to group spectrumusers;

Untuk informasi selengkapnya, lihat HIBAH.

Rentang tidak valid

Redshift Spectrum mengharapkan bahwa file di Amazon S3 yang termasuk dalam tabel eksternal tidak diganti selama kueri. Jika ini terjadi, itu dapat mengakibatkan kesalahan berikut.

Error: HTTP response error code: 416 Message: InvalidRange The requested range is not satisfiable

Untuk menghindari kesalahan, pastikan file Amazon S3 tidak diganti saat ditanya dengan Redshift Spectrum.

Nomor versi Parket tidak valid

Redshift Spectrum memeriksa metadata dari setiap file Apache Parquet yang diaksesnya. Jika pemeriksaan gagal, itu dapat mengakibatkan kesalahan yang mirip dengan berikut ini:

File 'https://s3.region.amazonaws.com/s3bucket/location/file has an invalid version number

Ada dua alasan umum yang dapat menyebabkan pemeriksaan gagal:

Bidang wajib hilang dari informasi partisi eksternal

Saat Anda mencoba menambahkan partisi ke tabel eksternal di katalog eksternal, Anda mungkin mendapatkan kesalahan berikut:

Error: The required field (<field_name>) is missing from the external partition information. Add missing field in partition and retry. Partition location: <partition_path>

Kesalahan ini berarti bahwa salah satu partisi di tabel eksternal yang digunakan dalam kueri Anda memiliki informasi metadata partisi yang hilang. Ini dapat terjadi dalam kasus-kasus berikut:

  • Anda menambahkan partisi ke tabel eksternal di katalog eksternal, seperti AWS Glue Data Catalog, dengan informasi paruh.

  • Anda menanyakan tabel yang dipartisi di Amazon Redshift saat menambahkan atau memperbarui partisi untuk tabel yang sesuai di katalog eksternal, seperti. AWS Glue Data Catalog

Berikut ini adalah bidang yang harus diisi saat mengambil partisi dari: AWS Glue Data Catalog

  • StorageDescriptor

    • InputFormat

    • OutputFormat

    • SerDeInfo

  • Nilai

Anda dapat menanyakan SVV_EXTERNAL_PARTITIONS untuk menemukan partisi yang ada dan melihat detail di bidangnya.

Untuk daftar lengkap bidang AWS Glue Data Catalog partisi, lihat Partisi di Refer AWS Glue ensi API Web.