全部产品
Search
文档中心

MaxCompute:Periksa apakah pemangkasan partisi efektif

更新时间:Jun 19, 2025

Topik ini menjelaskan cara memeriksa apakah pemangkasan partisi efektif.

Informasi latar belakang

Tabel partisi MaxCompute adalah tabel dengan partisi. Anda dapat menentukan satu atau lebih kolom sebagai kunci partisi untuk membuat tabel partisi. Jika Anda telah menentukan nama partisi yang ingin diakses, MaxCompute hanya membaca data dari partisi tersebut dan tidak memindai seluruh tabel. Hal ini mengurangi biaya serta meningkatkan efisiensi.

Pemangkasan partisi memungkinkan Anda menentukan kondisi filter untuk kolom kunci partisi. Dengan cara ini, MaxCompute hanya membaca data dari partisi yang memenuhi kondisi filter yang telah Anda tentukan dalam pernyataan SQL. Ini menghindari kesalahan dan pemborosan sumber daya yang disebabkan oleh pemindaian tabel penuh. Namun, pemangkasan partisi mungkin tidak berlaku dalam beberapa kasus.

Topik ini menjelaskan pemangkasan partisi dari aspek-aspek berikut:
  • Periksa apakah pemangkasan partisi efektif
  • Skenario di mana pemangkasan partisi tidak berlaku

Periksa apakah pemangkasan partisi efektif

Untuk memeriksa apakah pemangkasan partisi efektif untuk kueri, jalankan pernyataan EXPLAIN untuk melihat rencana eksekusi kueri.
  • Untuk kueri di mana pemangkasan partisi tidak berlaku:
    explain
    select seller_id
    from xxxxx_trd_slr_ord_1d
    where ds=rand();

    Rencana eksekusi menunjukkan bahwa semua 1.344 partisi Tabel xxxxx_trd_slr_ord_1d dibaca.

  • Untuk kueri di mana pemangkasan partisi efektif:
    explain
    select seller_id
    from xxxxx_trd_slr_ord_1d
    where ds='20150801';
    Partition pruning

    Rencana eksekusi menunjukkan bahwa hanya Partisi 20150801 dari Tabel xxxxx_trd_slr_ord_1d yang dibaca.

Skenario di mana pemangkasan partisi tidak berlaku

  • Penggunaan UDF yang Tidak Tepat
    Jika Anda menggunakan fungsi yang ditentukan pengguna (UDF) atau fungsi bawaan tertentu untuk menentukan partisi, pemangkasan partisi mungkin tidak berlaku. Dalam hal ini, kami sarankan Anda menjalankan pernyataan EXPLAIN untuk memeriksa apakah pemangkasan partisi efektif.
    explain
    select ...
    from xxxxx_base2_brd_ind_cw
    where ds = concat(SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 1), SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 2))
    null Untuk informasi lebih lanjut tentang pemangkasan partisi berbasis UDF, lihat bagian "WHERE" di Klausa WHERE (WHERE_condition).
  • Penggunaan JOIN yang Tidak Tepat
    Saat Anda menggabungkan tabel, perhatikan aturan berikut:
    • Jika kondisi pemangkasan partisi ditentukan dalam klausa WHERE, pemangkasan partisi efektif.
    • Jika kondisi pemangkasan partisi ditentukan dalam klausa ON, pemangkasan partisi efektif untuk tabel sekunder, tetapi tidak untuk tabel utama.
    Contoh berikut menjelaskan cara kerja pemangkasan partisi saat tiga jenis operasi JOIN yang berbeda dilakukan:
    • LEFT OUTER JOIN
      • Untuk kueri di mana kondisi pemangkasan partisi ditentukan dalam klausa ON:
        set odps.sql.allow.fullscan=true;
        explain
        select a.seller_id
            ,a.pay_ord_pbt_1d_001
        from xxxxx_trd_slr_ord_1d a
        left outer join
             xxxxx_seller b
        on a.seller_id=b.user_id
        and a.ds='20150801'
        and b.ds='20150801';
        **

        Rencana eksekusi menunjukkan bahwa pemangkasan partisi efektif untuk tabel kanan, tetapi tidak untuk tabel kiri.

      • Untuk kueri di mana kondisi pemangkasan partisi ditentukan dalam klausa WHERE:
        set odps.sql.allow.fullscan=true;
        explain
        select a.seller_id
            ,a.pay_ord_pbt_1d_001
        from xxxxx_trd_slr_ord_1d a
        left outer join
            xxxxx_seller b
        on a.seller_id=b.user_id
        where a.ds='20150801'
        and b.ds='20150801';
        &&

        Rencana eksekusi menunjukkan bahwa pemangkasan partisi efektif untuk kedua tabel.

    • RIGHT OUTER JOIN

      Operasi RIGHT OUTER JOIN mirip dengan operasi LEFT OUTER JOIN. Jika kondisi pemangkasan partisi ditentukan dalam klausa ON, pemangkasan partisi efektif hanya untuk tabel kiri, tetapi tidak untuk tabel kanan. Jika kondisi pemangkasan partisi ditentukan dalam klausa WHERE, pemangkasan partisi efektif untuk kedua tabel.

    • FULL OUTER JOIN

      Pemangkasan partisi efektif hanya ketika kondisi pemangkasan partisi ditentukan dalam klausa WHERE, tetapi tidak dalam klausa ON.

Dampak dan pertimbangan

  • Jika pemangkasan partisi tidak berlaku, kinerja kueri dapat sangat menurun. Masalah ini sulit ditemukan. Kami sarankan Anda memeriksa apakah pemangkasan partisi efektif sebelum mengirim kode.
  • Untuk menggunakan UDF untuk pemangkasan partisi, Anda harus memodifikasi kelas UDF atau menambahkan set odps.sql.udf.ppr.deterministic = true; sebelum pernyataan SQL untuk dieksekusi. Untuk informasi lebih lanjut, lihat Klausa WHERE (WHERE_condition).