Kinerja kueri Amazon Redshift Spectrum - Amazon Redshift

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

Kinerja kueri Amazon Redshift Spectrum

Topik ini menjelaskan cara meningkatkan kinerja kueri Redshift Spectrum.

Lihatlah rencana kueri untuk menemukan langkah-langkah apa yang telah didorong ke lapisan Amazon Redshift Spectrum.

Langkah-langkah berikut terkait dengan kueri Redshift Spectrum:

  • Pemindaian Seq S3

  • S3 HashAggregate

  • Pemindaian Kueri S3

  • Pemindaian Seq PartitionInfo

  • Partisi Loop

Contoh berikut menunjukkan rencana query untuk query yang bergabung dengan tabel eksternal dengan tabel lokal. Perhatikan HashAggregate langkah-langkah S3 Seq Scan dan S3 yang dijalankan terhadap data di Amazon S3.

explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)

Perhatikan elemen-elemen berikut dalam rencana query:

  • S3 Seq ScanNode menunjukkan filter diproses pricepaid > 30.00 di lapisan Redshift Spectrum.

    Node filter di bawah XN S3 Query Scan node menunjukkan pemrosesan predikat di Amazon Redshift di atas data yang dikembalikan dari lapisan Redshift Spectrum.

  • S3 HashAggregateNode menunjukkan agregasi di lapisan Redshift Spectrum untuk grup dengan group by spectrum.sales.eventid klausa ().

Berikut ini adalah cara untuk meningkatkan kinerja Redshift Spectrum:

  • Gunakan file data berformat Apache Parquet. Parket menyimpan data dalam format kolom, sehingga Redshift Spectrum dapat menghilangkan kolom yang tidak dibutuhkan dari pemindaian. Saat data dalam format file teks, Redshift Spectrum perlu memindai seluruh file.

  • Gunakan beberapa file untuk mengoptimalkan pemrosesan paralel. Pertahankan ukuran file Anda lebih besar dari 64 MB. Hindari kemiringan ukuran data dengan menyimpan file dengan ukuran yang sama. Untuk informasi tentang file Apache Parquet dan rekomendasi konfigurasi, lihat Format File: Konfigurasi dalam Dokumentasi Parket Apache.

  • Gunakan kolom sesedikit mungkin dalam kueri Anda.

  • Letakkan tabel fakta besar Anda di Amazon S3 dan simpan tabel dimensi kecil yang sering digunakan di database Amazon Redshift lokal Anda.

  • Perbarui statistik tabel eksternal dengan menyetel parameter TABLE PROPERTIES NumRows. Gunakan CREATE EXTERNAL TABLE atau ALTER TABLE untuk mengatur parameter TABLE PROPERTIES NumRows untuk mencerminkan jumlah baris dalam tabel. Amazon Redshift tidak menganalisis tabel eksternal untuk menghasilkan statistik tabel yang digunakan pengoptimal kueri untuk menghasilkan paket kueri. Jika statistik tabel tidak disetel untuk tabel eksternal, Amazon Redshift akan menghasilkan rencana eksekusi kueri. Amazon Redshift menghasilkan rencana ini berdasarkan asumsi bahwa tabel eksternal adalah tabel yang lebih besar dan tabel lokal adalah tabel yang lebih kecil.

  • Perencana kueri Amazon Redshift mendorong predikat dan agregasi ke lapisan kueri Redshift Spectrum bila memungkinkan. Ketika sejumlah besar data dikembalikan dari Amazon S3, pemrosesan dibatasi oleh sumber daya klaster Anda. Redshift Spectrum menskalakan secara otomatis untuk memproses permintaan besar. Dengan demikian, kinerja Anda secara keseluruhan meningkat setiap kali Anda dapat mendorong pemrosesan ke lapisan Redshift Spectrum.

  • Tulis kueri Anda untuk menggunakan filter dan agregasi yang memenuhi syarat untuk didorong ke lapisan Redshift Spectrum.

    Berikut ini adalah contoh dari beberapa operasi yang dapat didorong ke lapisan Redshift Spectrum:

    • Klausul GROUP BY

    • Kondisi perbandingan dan kondisi pencocokan pola, seperti LIKE.

    • Fungsi agregat, seperti COUNT, SUM, AVG, MIN, dan MAX.

    • Fungsi string.

    Operasi yang tidak dapat didorong ke lapisan Redshift Spectrum termasuk DISTINCT dan ORDER BY.

  • Gunakan partisi untuk membatasi data yang dipindai. Partisi data Anda berdasarkan predikat kueri yang paling umum, lalu pangkas partisi dengan memfilter pada kolom partisi. Untuk informasi selengkapnya, lihat Mempartisi tabel eksternal Redshift Spectrum.

    Kueri SVL_S3PARTISI untuk melihat partisi total dan partisi yang memenuhi syarat.

  • Gunakan AWS Glue generator statistik untuk menghitung statistik tingkat kolom untuk tabel. AWS Glue Data Catalog Setelah AWS Glue menghasilkan statistik untuk tabel di Katalog Data, Amazon Redshift Spectrum secara otomatis menggunakan statistik tersebut untuk mengoptimalkan paket kueri. Untuk informasi selengkapnya tentang menggunakan statistik tingkat kolom komputasi AWS Glue, lihat Bekerja dengan statistik kolom di Panduan AWS Glue Pengembang.