EXPLAIN CREATE MATERIALIZED VIEW

Berlaku untuk:check ditandai ya pemeriksaan Databricks SQL ditandai ya Databricks Runtime 17.3 ke atas

Melaporkan apakah kueri untuk tampilan materialized dapat diperbarui secara bertahap. Tambahkan ke CREATE MATERIALIZED VIEW awal EXPLAIN pernyataan untuk memeriksa kelayakan incrementalization sebelum Anda membuat materialized view atau menjalankan refresh yang mahal.

Untuk mempelajari tentang inkrementalisasi tampilan materialisasi, lihat Refresh inkremental untuk tampilan materialisasi.

Laporan apa saja EXPLAIN

EXPLAIN CREATE MATERIALIZED VIEW memeriksa apakah kueri secara struktural memenuhi syarat untuk penyegaran inkremental. Bagian Incremental Update Eligibility output melaporkan salah satu dari dua hasil:

  • The Materialized View can be incrementally refreshed: Pola kueri mendukung penyegaran inkremental.
  • The Materialized View cannot be incrementally refreshed: Kueri secara struktural tidak memenuhi syarat untuk pembaruan inkremental. Di bawah AUTO kebijakan dan FULL refresh, materialized view menggunakan recompute penuh. Di bawah INCREMENTAL atau INCREMENTAL STRICT, gagal CREATE karena penyegaran bertahap tidak memungkinkan. Bagian ini Detailed Incrementalization Info mencantumkan apa saja yang mencegah incrementalisasi.

Kelayakan struktural bukanlah jaminan bahwa penyegaran bertahap akan berjalan. Di bawah kebijakan refresh default AUTO , model biaya membuat keputusan akhir saat runtime dan masih dapat memilih perhitungan ulang penuh untuk tampilan materialized yang memenuhi syarat. Untuk detailnya, lihat Kelayakan dan perilaku runtime.

Kapan harus menggunakan EXPLAIN

Jalankan EXPLAIN CREATE MATERIALIZED VIEW:

  • Sebelum Anda menerapkan materialized view baru, untuk memverifikasi bahwa pola kueri mendukung incremental refresh.
  • Saat Anda melakukan debug refresh lambat, untuk memastikan bahwa materialized view memenuhi syarat. Jika tidak, tulis ulang kuerinya.
  • Setelah Anda menulis ulang kueri, untuk memverifikasi bahwa versi baru memenuhi syarat.
  • Saat Anda bermigrasi dari dbt atau alat lain, untuk memvalidasi bahwa kueri yang telah ditransformasi mendapat manfaat dari penyegaran inkremental.

Syntax

EXPLAIN [CREATE MATERIALIZED VIEW query]

Parameter-parameternya

  • query

    Kueri SQL yang membuat tampilan materialisasi. Lanjutkan EXPLAIN ke pertanyaan.

    Nota

    CREATE MATERIALIZED VIEW kueri dari alur Lakeflow mungkin tidak berfungsi tanpa EXPLAIN pembaruan. Contohnya:

    • Ekspektasi (CONSTRAINT...EXPECT klausa) harus dihapus dari kueri.
    • Himpunan data sumber mungkin perlu memenuhi syarat dengan katalog, skema, atau jalur lain yang tidak diperlukan saat dijalankan dalam konteks alur.

Examples

Contoh berikut menunjukkan output untuk kueri yang memenuhi syarat dan untuk dua kueri yang tidak dapat diperbarui secara bertahap.

Memenuhi syarat untuk penyegaran bertahap

Kueri yang menerapkan filter, proyeksi, dan agregasi ke tabel Delta Lake memenuhi syarat:

EXPLAIN CREATE MATERIALIZED VIEW sales_summary AS
SELECT region, SUM(revenue) AS total_revenue, COUNT(*) AS order_count
FROM catalog.schema.orders
WHERE order_date >= '2024-01-01'
GROUP BY region;
== Incremental Update Eligibility ==
The Materialized View can be incrementally refreshed.

== Detailed Incrementalization Info ==
No issues detected.

Tidak memenuhi syarat: penggunaan LIMIT

Query yang menggunakan LIMIT tidak dapat diinkrementalisasi, karena operator limit tidak dapat dipertahankan secara bertahap:

EXPLAIN CREATE MATERIALIZED VIEW top_customers AS
SELECT customer_id, total_spend
FROM catalog.schema.customer_summary
ORDER BY total_spend DESC
LIMIT 100;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- OPERATOR_NOT_INCREMENTALIZABLE: Operators GlobalLimit, LocalLimit are not incrementalizable. Consider rewriting the query to avoid using them.

Tidak memenuhi syarat: sumber Danau non-Delta

Kueri yang membaca dari sumber non-Delta Lake, seperti file CSV, tidak dapat diinkrementalisasi:

EXPLAIN CREATE MATERIALIZED VIEW external_data AS
SELECT * FROM csv.`/path/to/files/`;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- INPUT_NOT_IN_DELTA: Tables are not in Delta format. Consider converting them to Delta tables.

Kelayakan dan perilaku runtime

EXPLAIN melaporkan apakah struktur kueri mendukung penyegaran inkremental. Fitur ini tidak memprediksi apa yang dilakukan optimizer saat runtime. Di bawah default REFRESH POLICY AUTO, model biaya membuat keputusan akhir dan dapat memilih perhitungan ulang penuh bahkan untuk tampilan materialisasi yang memenuhi syarat, misalnya ketika memperkirakan bahwa operator nesting atau volume data saat ini membuat penghitungan ulang penuh menjadi lebih efisien. Untuk daftar lengkap kebijakan penyegaran, lihat Kebijakan penyegaran.

Jika tampilan materialisasi yang memenuhi syarat secara konsisten menggunakan recompute penuh di bawah AUTO, Anda dapat:

  • Atur REFRESH POLICY INCREMENTAL agar lebih memilih penyegaran bertahap dibandingkan pilihan berbasis biaya. Untuk sintaksis, lihat REFRESH klausa POLICY.
  • Periksa log event pipeline untuk event INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL guna memahami mengapa model biaya menolak rencana inkremental. Untuk detailnya, lihat Log peristiwa Pipeline dan nilai-nilai CostModelRejectionSubType dalam skema log peristiwa Pipeline.

Alasan umum penolakan model biaya meliputi:

  • EXCESSIVE_OPERATOR_NESTING: Definisi kueri ini kompleks dan memiliki banyak tingkat operator nesting, yang dianggap berisiko oleh model biaya untuk pemrosesan inkremental.
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED dan TABLE_SIZE_THRESHOLD_EXCEEDED: Model biaya memperkirakan bahwa perhitungan ulang penuh lebih murah untuk volume data saat ini.

Penolakan model biaya tidak berarti tampilan materialisasi tidak dapat diinkrementalisasi. Artinya, optimizer memilih untuk tidak melakukannya. Pengaturan REFRESH POLICY INCREMENTAL adalah cara yang didukung untuk mengatasi pilihan itu.