全部产品
Search
文档中心

ApsaraDB for SelectDB:Deduplikasi akurat berbasis bitmap

更新时间:Jul 30, 2025

Topik ini menjelaskan fitur deduplikasi berbasis bitmap yang disediakan oleh ApsaraDB for SelectDB untuk membantu Anda melakukan deduplikasi data dan mempercepat kueri.

Ikhtisar

ApsaraDB for SelectDB mendukung tipe data bitmap. Dalam model Aggregate key, bidang Value bertipe bitmap dapat digunakan dengan fungsi agregasi irisan dan gabungan koleksi untuk deduplikasi data yang akurat.

Fitur deduplikasi berbasis bitmap dalam gudang data tradisional memiliki performa buruk ketika memproses irisan dan gabungan untuk bitmap dengan ratusan juta elemen atau lebih. Hal ini disebabkan oleh beberapa alasan: Pertama, ketika ukuran bitmap sangat besar (melebihi 1 GB), waktu pemrosesan untuk I/O jaringan dan disk menjadi signifikan lebih lama. Kedua, setelah pemindaian data selesai di kluster, semua data dikirim ke node tingkat atas tunggal untuk perhitungan gabungan, memberikan beban besar pada node tersebut.

ApsaraDB for SelectDB dioptimalkan untuk lingkungan terdistribusi, yaitu dapat membagi nilai kolom bitmap berdasarkan bucket menggunakan algoritma hash. Dengan cara ini, nilai-nilai yang berbeda disimpan di bucket yang berbeda. Ini memastikan bahwa nilai bitmap di bucket yang berbeda ortogonal, sehingga secara signifikan mengurangi kardinalitas. Dalam kasus kueri, bitmap ortogonal di bucket yang berbeda pertama-tama diagregasi dan dihitung, kemudian node tingkat atas menggabungkan nilai-nilai hasil perhitungan dan mengeluarkannya. Ini meningkatkan efisiensi komputasi dan menghilangkan hambatan yang disebabkan oleh komputasi node tunggal di tingkat atas.

Contoh

  1. Buat tabel yang menggunakan model Aggregate key dan memiliki bidang Value bertipe data bitmap. Gunakan fungsi irisan atau gabungan sebagai fungsi agregasi, seperti bitmap_union. Kolom hid dibuat untuk menunjukkan ID bucket. Contoh kode berikut memberikan ilustrasi:

    Catatan

    Konfigurasikan kolom hid dan jumlah bucket dengan tepat. Kardinalitas kolom hid harus minimal lima kali jumlah bucket untuk memastikan distribusi data yang seimbang setelah penggunaan hash bucketing.

    CREATE TABLE `user_tag_Bitmap` (
      `tag` bigint(20) NULL COMMENT "Tag pengguna",
      `hid` smallint(6) NULL COMMENT "ID Bucket",
      `user_id` Bitmap Bitmap_UNION NULL COMMENT ""
    ) ENGINE=OLAP
    AGGREGATE KEY(`tag`, `hid`)
    COMMENT "OLAP"
    DISTRIBUTED BY HASH(`hid`) BUCKETS 3

    Kolom hid ditambahkan ke skema tabel untuk menunjukkan rentang nilai kolom user_id sebagai kolom hash bucket.

  2. Impor data.

    LOAD LABEL user_tag_Bitmap_test
    (
        DATA INFILE('hdfs://abc')
        INTO TABLE user_tag_Bitmap
        COLUMNS TERMINATED BY ','
        (tmp_tag, tmp_user_id)
        SET (
            tag = tmp_tag,
            hid = ceil(tmp_user_id/500),
            user_id = to_Bitmap(tmp_user_id)
        )
    )
    # Catatan: Angka 500 tidak tetap. Anda dapat menyesuaikan angka berdasarkan kebutuhan bisnis Anda.
  3. Data yang diimpor berada dalam format berikut. Dua kolom menentukan tag dan ID pengguna.

    11111111,1
    11111112,2
    11111113,3
    11111114,4
    ...

    Selama impor data, ApsaraDB for SelectDB memotong rentang nilai bitmap di kolom user_id. Sebagai contoh, nilai HID dari ID pengguna dalam rentang [1,5000000) sama, dan baris dengan nilai HID yang sama dialokasikan ke bucket. Dengan cara ini, nilai bitmap di setiap bucket ortogonal. Fitur ortogonal dari nilai bitmap antar bucket dapat digunakan, yang sangat mengurangi penggunaan sumber daya komputasi untuk irisan dan gabungan koleksi.

  4. Setelah data diimpor, Anda dapat memanggil fungsi bitmap untuk melakukan operasi terkait bitmap. Untuk informasi lebih lanjut tentang fungsi bitmap yang dapat Anda panggil, lihat bagian "Fungsi bitmap" di Referensi SQL.

Fungsi bitmap ortogonal

Fungsi berikut tersedia untuk kueri bitmap dalam skenario ortogonal: Bitmap_orthogonal_intersect, orthogonal_Bitmap_intersect_count, orthogonal_Bitmap_union_count, orthogonal_Bitmap_expr_calculate, dan orthogonal_Bitmap_expr_calculate_count. Bagian berikut menjelaskan fungsi-fungsi tersebut.

Catatan

Fungsi bitmap ortogonal tidak dapat digunakan dalam tabel partisi. Karena partisi dari tabel partisi ortogonal, data antar partisi tidak dapat dijamin ortogonal. Akibatnya, hasil perhitungan tidak dapat diperkirakan.

Bitmap_orthogonal_intersect

Menghitung irisan bitmap.

Sintaks

orthogonal_Bitmap_intersect(Bitmap_column, column_to_filter, filter_values)

Parameter

Parameter

Deskripsi

Bitmap_column

Nama kolom bitmap.

column_to_filter

Nama kolom dimensi yang digunakan untuk penyaringan.

filter_values

Daftar variabel panjang nilai yang digunakan untuk menyaring kolom dimensi tertentu.

Contoh

SELECT Bitmap_COUNT(orthogonal_Bitmap_intersect(user_id, tag, 13080800, 11110200)) FROM user_tag_Bitmap WHERE tag IN (13080800, 11110200);

Selama eksekusi kueri, agregasi dilakukan dalam dua tahap. Pada tahap pertama, ApsaraDB for SelectDB menyaring tag berdasarkan filter_values, kemudian menghitung irisan nilai bitmap dari semua tag yang teragregasi. Pada tahap kedua, ApsaraDB for SelectDB secara iteratif menghitung gabungan semua nilai bitmap yang diperoleh dari tahap pertama.

orthogonal_Bitmap_intersect_count

Menghitung irisan bitmap dan menghitung hasil irisan. Sintaksnya sama dengan intersect_count, tetapi implementasinya berbeda.

Sintaks

orthogonal_Bitmap_intersect_count(Bitmap_column, column_to_filter, filter_values)

Parameter

Parameter

Deskripsi

Bitmap_column

Nama kolom bitmap.

column_to_filter

Nama kolom dimensi yang digunakan untuk penyaringan.

filter_values

Daftar variabel panjang nilai yang digunakan untuk menyaring kolom dimensi tertentu.

Contoh

SELECT orthogonal_Bitmap_intersect_count(user_id, tag, 1150000, 1150001, 390006) FROM user_tag_Bitmap WHERE tag IN (1150000, 1150001, 390006);

Selama eksekusi kueri, agregasi dilakukan dalam dua tahap. Pada tahap pertama, ApsaraDB for SelectDB menyaring tag berdasarkan filter_values, kemudian menghitung irisan nilai bitmap dari semua tag yang teragregasi, dan akhirnya menghitung hasil irisan. Pada tahap kedua, ApsaraDB for SelectDB secara iteratif menghitung jumlah semua nilai hitungan yang diperoleh dari tahap pertama.

orthogonal_Bitmap_union_count

Menghitung gabungan nilai bitmap dan menghitung hasil gabungan. Sintaksnya sama dengan Bitmap_union_count, tetapi implementasinya berbeda.

Sintaks

orthogonal_Bitmap_union_count(Bitmap_column)

Parameter

Parameter

Deskripsi

Bitmap_column

Nama kolom bitmap di mana gabungan nilai akan dihitung untuk pencacahan.

Contoh

SELECT orthogonal_Bitmap_union_count(user_id) FROM user_tag_Bitmap WHERE tag IN (1150000, 1150001, 390006);

Selama eksekusi kueri, agregasi dilakukan dalam dua tahap. Pada tahap pertama, ApsaraDB for SelectDB menghitung gabungan nilai bitmap, kemudian menghitung hasil gabungan. Pada tahap kedua, ApsaraDB for SelectDB secara iteratif menghitung jumlah semua nilai hitungan yang diperoleh dari tahap pertama.

orthogonal_Bitmap_expr_calculate

Menghitung irisan, gabungan, dan selisih bitmap menggunakan ekspresi.

Sintaks

orthogonal_Bitmap_expr_calculate(Bitmap_column, filter_column, input_string)

Parameter

Parameter

Deskripsi

Bitmap_column

Nama kolom bitmap di mana gabungan nilai akan dihitung untuk pencacahan.

filter_column

Kolom dimensi yang digunakan untuk penyaringan, yaitu kolom kunci untuk perhitungan.

input_string

String ekspresi untuk menghitung irisan, gabungan, dan selisih bitmap berdasarkan kolom kunci.

Kalkulator berikut didukung oleh ekspresi:

& mewakili perhitungan irisan, | mewakili perhitungan gabungan,-mewakili perhitungan selisih, ^ mewakili perhitungan XOR eksklusif, dan \mewakili karakter escape.

Contoh

SELECT orthogonal_Bitmap_expr_calculate(user_id, tag, '(833736|999777)&(1308083|231207)&(1000|20000-30000)') FROM user_tag_Bitmap WHERE tag IN (833736,999777,130808,231207,1000,20000,30000);

Selama eksekusi kueri, agregasi dilakukan dalam dua tahap. Pada tahap pertama, ApsaraDB for SelectDB mengurai input_string untuk mendapatkan kondisi filter tag, kemudian menyaring data, dan akhirnya melakukan perhitungan bitmap pada data yang telah disaring berdasarkan input_string. Pada tahap kedua, ApsaraDB for SelectDB menghitung gabungan semua nilai bitmap yang diperoleh dari tahap pertama dan mengembalikan hasil bitmap akhir.

orthogonal_Bitmap_expr_calculate_count

Menghitung irisan, gabungan, dan selisih bitmap menggunakan ekspresi dan menghitung hasil perhitungan. Sintaks dan parameter sama dengan orthogonal_Bitmap_expr_calculate.

Sintaks

orthogonal_Bitmap_expr_calculate_count(Bitmap_column, filter_column, input_string)

Parameter

Parameter

Deskripsi

Bitmap_column

Nama kolom bitmap di mana gabungan nilai akan dihitung untuk pencacahan.

filter_column

Kolom dimensi yang digunakan untuk penyaringan, yaitu kolom kunci untuk perhitungan.

input_string

String ekspresi untuk menghitung irisan, gabungan, dan selisih bitmap berdasarkan kolom kunci.

Kalkulator berikut didukung oleh ekspresi:

& mewakili perhitungan irisan, | mewakili perhitungan gabungan,-mewakili perhitungan selisih, ^ mewakili perhitungan XOR eksklusif, dan \mewakili karakter escape.

Contoh

SELECT orthogonal_Bitmap_expr_calculate_count(user_id, tag, '(833736|999777)&(1308083|231207)&(1000|20000-30000)') FROM user_tag_Bitmap WHERE tag IN (833736,999777,130808,231207,1000,20000,30000);

Selama eksekusi kueri, agregasi dilakukan dalam dua tahap. Pada tahap pertama, ApsaraDB for SelectDB mengurai input_string untuk mendapatkan kondisi filter tag, kemudian menyaring data dan melakukan perhitungan bitmap pada data yang telah disaring berdasarkan input_string, dan akhirnya menghitung hasil perhitungan. Pada tahap kedua, ApsaraDB for SelectDB menghitung gabungan semua nilai bitmap yang diperoleh dari tahap pertama dan mengembalikan hasil bitmap akhir.