全部产品
Search
文档中心

MaxCompute:DISTRIBUTED MAPJOIN

更新时间:Jul 02, 2025

DISTRIBUTED MAPJOIN adalah versi dioptimalkan dari MAPJOIN. Anda dapat menggunakannya untuk menggabungkan tabel kecil dengan tabel besar, serta mengurangi pengacakan dan pengurutan pada tabel besar.

Catatan Penggunaan

  • Ukuran tabel yang ingin digabungkan harus berbeda. Ukuran tabel besar harus lebih dari 10 TB, sedangkan ukuran tabel kecil harus berada dalam rentang [1 GB, 100 GB].

  • Data di tabel kecil harus didistribusikan secara merata. Jika tabel kecil memiliki ekor panjang, data berlebih akan terkonsentrasi di satu shard, yang dapat menyebabkan kesalahan kehabisan memori (OOM) atau masalah waktu habis panggilan prosedur jarak jauh (RPC).

  • Jika tugas SQL berjalan lebih dari 20 menit, disarankan menggunakan DISTRIBUTED MAPJOIN untuk optimasi.

  • Sumber daya berlebih digunakan selama tugas berjalan. Oleh karena itu, hindari menjalankan tugas dalam grup kuota kecil.

    Catatan

    Anda dapat mengubah grup kuota pada halaman Quotas. Untuk informasi lebih lanjut, lihat Kelola kuota di konsol baru MaxCompute.

Menggunakan DISTRIBUTED MAPJOIN

Untuk menggunakan DISTRIBUTED MAPJOIN dalam pernyataan SELECT, tambahkan petunjuk /*+distmapjoin(<table_name>(shard_count=<n>,replica_count=<m>))*/ ke dalam pernyataan. Parameter shard_count dan replica_count digunakan untuk menentukan paralelisme tugas. Gunakan rumus berikut untuk menghitung paralelisme: Paralelisme = shard_count × replica_count.

  • Parameter

    • table_name: nama tabel kecil yang ingin digabungkan.

    • shard_count=<n>: jumlah shard data dari tabel kecil yang ingin digabungkan. Shard data dari tabel kecil didistribusikan ke setiap node komputasi untuk pemrosesan. n menentukan jumlah shard. Secara umum, parameter ini diatur ke angka ganjil.

      Catatan
      • Disarankan menentukan parameter shard_count secara manual. Perkirakan nilai parameter shard_count berdasarkan ukuran tabel kecil. Jumlah data yang diproses oleh node shard tunggal sebaiknya berada dalam rentang [200 MB, 500 MB].

      • Jika Anda menetapkan parameter shard_count pada nilai yang terlalu besar, kinerja dan stabilitas pemrosesan data dapat menurun. Sebaliknya, jika parameter shard_count diatur ke nilai yang terlalu kecil, kesalahan mungkin terjadi akibat penggunaan memori yang berlebihan.

    • replica_count=<m>: jumlah replika dari tabel kecil. m menentukan jumlah replika. Nilai default: 1.

      Catatan

      Untuk mengurangi permintaan akses berlebih dan mencegah kegagalan tugas akibat kegagalan node tunggal, buat beberapa replika data dalam shard yang sama. Jika node sering dimulai ulang karena paralelisme tinggi atau kinerja lingkungan tidak stabil, tingkatkan nilai parameter replica_count. Disarankan mengatur parameter ini ke 2 atau 3.

  • Sintaksis

    -- Direkomendasikan. Tentukan parameter shard_count dan pertahankan nilai default 1 untuk parameter replica_count.
    /*+distmapjoin(a(shard_count=5))*/
    
    -- Direkomendasikan. Tentukan parameter shard_count dan replica_count.
    /*+distmapjoin(a(shard_count=5,replica_count=2))*/
    
    -- Gunakan DISTRIBUTED MAPJOIN untuk menggabungkan beberapa tabel kecil.
    /*+distmapjoin(a(shard_count=5,replica_count=2),b(shard_count=5,replica_count=2)) */
    
    -- Gunakan DISTRIBUTED MAPJOIN dan MAPJOIN bersama-sama.
    /*+distmapjoin(a(shard_count=5,replica_count=2)),mapjoin(b)*/

Contoh

Contoh ini menunjukkan cara menggunakan DISTRIBUTED MAPJOIN saat menyisipkan data ke dalam tabel partisi bernama tmall_dump_lasttable.

  • Sintaksis JOIN

    insert OVERWRITE table tmall_dump_lasttable partition(ds='20211130')
    select t1.*
    from
    (
        select nid, doc,type
        from search_ods.dump_lasttable where ds='20211203'
    )t1
    join
    (
        select distinct item_id
        from tbcdm.dim_tb_itm
        where ds='20211130'
        and bc_type='B'
        and is_online='Y'
    )t2
    on t1.nid=t2.item_id;
  • Sintaksis DISTRIBUTED MAPJOIN

    insert OVERWRITE table tmall_dump_lasttable partition (ds='20211130')
    select /*+ distmapjoin(t2(shard_count=35)) */ t1.*
    from
    (
        select nid, doc, type
        from search_ods.dump_lasttable where ds='20211203'
    )t1
    join
    (
        select distinct item_id
        from tbcdm.dim_tb_itm
        where ds='20211130'
        and bc_type='B'
        and is_online='Y'
    )t2
    on t1.nid=t2.item_id;