Berbagi teknologi

Bagaimana cara menerapkan deduplikasi data di PostgreSQL, terutama untuk struktur data yang kompleks?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

garis pemisah yang indah

Bahasa pemrograman Bahasa pemrograman PostgreSQL


Di PostgreSQL, deduplikasi data adalah tugas umum dan penting. Deduplikasi dapat diterapkan pada tipe data sederhana atau struktur data kompleks. Panduan ini akan mengeksplorasi secara detail cara menerapkan deduplikasi data di PostgreSQL, dan memberikan solusi serta kode contoh spesifik untuk berbagai situasi.

garis pemisah yang indah

1. Deduplikasi tipe data dasar

Untuk tipe data dasar, seperti integer, string, dll, Anda dapat menggunakan DISTINCT Kata kunci untuk mencapai deduplikasi.

SELECT DISTINCT column_name
FROM your_table;
  • 1
  • 2

Misalnya ada sebuah file bernama students tabel yang berisiname Kolom (tipe string), untuk mendapatkan nama siswa yang unik dapat dituliskan seperti ini:

SELECT DISTINCT name
FROM students;
  • 1
  • 2

menjelaskan: DISTINCT Kata kunci memastikan bahwa kumpulan hasil yang dikembalikan tidak berisi baris duplikat.

garis pemisah yang indah

2. Deduplikasi data multi kolom

Jika Anda perlu menghapus duplikat berdasarkan beberapa kolom, Anda bisa DISTINCT Tentukan beberapa kolom setelah kata kunci.

SELECT DISTINCT column1, column2
FROM your_table;
  • 1
  • 2

Misalnya untuk orders meja, berisicustomer_id Danproduct_id Dua kolom, untuk mendapatkan kombinasi pelanggan dan produk unik:

SELECT DISTINCT customer_id, product_id
FROM orders;
  • 1
  • 2

Penjelasan: Kueri di atas akan menghasilkan hasil yang berbeda customer_id Danproduct_id kombinasi.

garis pemisah yang indah

3. Deduplikasi struktur data yang kompleks

Saat memproses data yang berisi struktur data kompleks seperti array dan struktur, metode deduplikasinya akan berbeda.

(1) Deduplikasi tipe array

PostgreSQL menyediakan fungsi untuk menangani deduplikasi array.

SELECT ARRAY(SELECT DISTINCT unnest(array_column)) AS distinct_array
FROM your_table;
  • 1
  • 2

Asumsikan ada meja users , yang memiliki kolomhobbies Ini adalah tipe array bilangan bulat. Untuk mendapatkan array hobi yang berbeda dari setiap pengguna:

SELECT ARRAY(SELECT DISTINCT unnest(hobbies)) AS distinct_hobbies
FROM users;
  • 1
  • 2

Penjelasan: Penggunaan pertama unnest Fungsi ini memperluas array menjadi beberapa baris dan kemudian menerapkannyaDISTINCT Lakukan deduplikasi dan terakhir gunakanARRAY Fungsi ini menyusun kembali hasil deduplikasi menjadi sebuah array.

(2) Deduplikasi tipe JSON

Jika data disimpan di JSON Tipe kolom dapat diekstraksi denganJSON Nilai-nilai di dalamnya dihapus duplikatnya.

SELECT DISTINCT json_extract_path_text(json_column, 'key') AS distinct_value
FROM your_table;
  • 1
  • 2

Misalnya untuk file bernama employee_details tabel yang didalamnya terdapat ajson Daftarinfo ,Termasuksalary Pasangan nilai kunci, untuk mendapatkan nilai gaji yang berbeda:

SELECT DISTINCT json_extract_path_text(info, 'alary') AS distinct_salary
FROM employee_details;
  • 1
  • 2

menjelaskan: json_extract_path_text fungsi digunakan untuk mendapatkan dariJSON Ekstrak nilai kunci yang ditentukan dari data, lalu hapus duplikat nilai yang diekstraksi.

(3) Deduplikasi tipe struktur (tipe komposit)

Untuk tipe struktur kustom, Anda dapat mengekstrak bidang struktur untuk deduplikasi gabungan.

Misalkan tipe struktur didefinisikan address_type ,Termasukstreet Dancity Dua bidang, tabelcontacts Ada kolom di dalamnyaaddress Yaaddress_type jenis.

SELECT DISTINCT address.street, address.city
FROM contacts;
  • 1
  • 2

Penjelasan: Lakukan operasi deduplikasi dengan mengakses langsung bidang struktur.

garis pemisah yang indah

4. Gunakan GROUP BY Lakukan deduplikasi

GROUP BY Klausa tersebut juga dapat digunakan untuk mencapai efek deduplikasi, terutama bila diperlukan untuk melakukan perhitungan agregasi pada data dan melakukan deduplikasi pada saat yang bersamaan.

SELECT column_name
FROM your_table
GROUP BY column_name;
  • 1
  • 2
  • 3

Misalnya untuk mendapatkan students Kelas yang berbeda dalam tabel:

SELECT class
FROM students
GROUP BY class;
  • 1
  • 2
  • 3

menjelaskan: GROUP BY Baris dengan nilai yang sama akan dikelompokkan bersama, sehingga mencapai efek deduplikasi.

garis pemisah yang indah

5. Pemrosesan dan deduplikasi data yang mengandung nilai null

Jika data mungkin berisi nilai nol, deduplikasi memerlukan perhatian khusus. DISTINCT akanNULL nilai diperlakukan sebagai nilai yang berbeda.Jika Anda inginNULL Nilainya dianggap sama untuk deduplikasi. Anda dapat menggunakan metode berikut:

SELECT COALESCE(column_name, 'default_value')
FROM your_table
GROUP BY COALESCE(column_name, 'default_value');
  • 1
  • 2
  • 3

Misalnya untuk product_prices di mejaprice kolom (mungkin berisiNULL nilai), keNULL Nilai diperlakukan sama untuk deduplikasi:

SELECT COALESCE(price, 0)
FROM product_prices
GROUP BY COALESCE(price, 0);
  • 1
  • 2
  • 3

menjelaskan: COALESCE fungsi digunakan untuk memprosesNULL nilai, ganti dengan nilai default yang ditentukan, lalu lakukan pengelompokan dan deduplikasi berdasarkan hasil yang diganti.

garis pemisah yang indah

6. Pertimbangan kinerja

Saat melakukan operasi deduplikasi data, volume dan kinerja data perlu dipertimbangkan. Untuk kumpulan data besar, penggunaan indeks dapat meningkatkan kinerja operasi deduplikasi.

Jika Anda sering melakukan operasi deduplikasi pada kolom tertentu, Anda bisa membuat indeks untuk kolom tersebut.

CREATE INDEX index_name ON your_table (column_name);
  • 1

Selain itu, memilih metode deduplikasi yang tepat juga dapat berdampak pada kinerja.Misalnya, jika jumlah datanya besar dan Anda hanya perlu mendapatkan jumlah nilai unik, bukan nilai unik sebenarnya, gunakanCOUNT(DISTINCT) Mungkin lebih baik daripada menggunakannya secara langsungDISTINCT Lebih hemat.

garis pemisah yang indah

7. Penerapan kode contoh secara komprehensif

Misalkan ada a sales meja, berisicustomer_id (tipe bilangan bulat),product_name (tipe string) dansale_amount kolom (tipe floating point).

Untuk mendapatkan daftar produk berbeda yang dibeli oleh pelanggan berbeda, Anda bisa menggunakan kueri berikut:

SELECT DISTINCT customer_id, product_name
FROM sales;
  • 1
  • 2

Jika Anda ingin mendapatkan total penjualan setiap pelanggan sekaligus mencapai duplikasi pelanggan, Anda dapat menulis seperti ini:

SELECT customer_id, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY customer_id;
  • 1
  • 2
  • 3

hipotesa sales di mejaproduct_name Kolom mungkin berisi nilai null. Untuk memperlakukan nilai null sama untuk deduplikasi, Anda dapat menggunakan:

SELECT COALESCE(product_name, 'Unknown Product')
FROM sales
GROUP BY COALESCE(product_name, 'Unknown Product');
  • 1
  • 2
  • 3

jika sales Jumlah data dalam tabel sangat besar, dan sering kali didasarkan padacustomer_id Untuk melakukan deduplikasi pada kolom, Anda dapat membuat indeks untuk kolom tersebut:

CREATE INDEX sales_customer_id_index ON sales (customer_id);
  • 1

garis pemisah yang indah

8. Ringkasan

Menerapkan deduplikasi data di PostgreSQL memerlukan pemilihan metode yang sesuai berdasarkan jenis data dan kebutuhan bisnis tertentu.Tipe data dasar dapat digunakanDISTINCT kata kunci, untuk struktur data kompleks seperti array,JSON dan struktur khusus, yang mungkin perlu digabungkan dengan fungsi dan operasi tertentu untuk mencapai deduplikasi. Pada saat yang sama, penting untuk mempertimbangkan faktor kinerja, membuat indeks secara wajar, dan memilih strategi deduplikasi yang optimal. Melalui contoh dan penjelasan di atas, kami berharap dapat membantu Anda melakukan operasi deduplikasi data di PostgreSQL secara efektif untuk memenuhi berbagai kebutuhan bisnis.


garis pemisah yang indah

🎉相关推荐

Bahasa pemrograman Bahasa pemrograman PostgreSQL