Teknologian jakaminen

Kuinka toteuttaa tietojen duplikointi PostgreSQL:ssä, erityisesti monimutkaisissa tietorakenteissa?

2024-07-12

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

kaunis jakoviiva

PostgreSQL


PostgreSQL:ssä tietojen duplikointi on yleinen ja tärkeä tehtävä. Deduplikaatiota voidaan soveltaa yksinkertaisiin tietotyyppeihin tai monimutkaisiin tietorakenteisiin. Tässä oppaassa tutkitaan yksityiskohtaisesti, kuinka tietojen duplikointi voidaan toteuttaa PostgreSQL:ssä, ja tarjotaan ratkaisuja ja erityisiä esimerkkikoodeja eri tilanteisiin.

kaunis jakoviiva

1. Perustietotyyppien päällekkäisyyden poistaminen

Perustietotyypeille, kuten kokonaisluvuille, merkkijonoille jne., voit käyttää DISTINCT Avainsanat päällekkäisyyden poistamiseksi.

SELECT DISTINCT column_name
FROM your_table;
  • 1
  • 2

Oletetaan esimerkiksi, että on tiedosto nimeltä students taulukko, joka sisältääname Sarake (merkkijonotyyppi), saadaksesi yksilölliset oppilaiden nimet, voit kirjoittaa näin:

SELECT DISTINCT name
FROM students;
  • 1
  • 2

selittää: DISTINCT Avainsana varmistaa, että palautettu tulosjoukko ei sisällä päällekkäisiä rivejä.

kaunis jakoviiva

2. Monen sarakkeen tietojen kopioinnin poistaminen

Jos sinun on poistettava kopiointi useiden sarakkeiden perusteella, voit tehdä sen DISTINCT Määritä avainsanan jälkeen useita sarakkeita.

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

Esimerkiksi varten orders taulukko, joka sisältääcustomer_id japroduct_id Kaksi saraketta ainutlaatuisten asiakas- ja tuoteyhdistelmien saamiseksi:

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

Selitys: Yllä oleva kysely palauttaa eri customer_id japroduct_id yhdistelmä.

kaunis jakoviiva

3. Monimutkaisten tietorakenteiden duplikointi

Käsiteltäessä tietoja, jotka sisältävät monimutkaisia ​​tietorakenteita, kuten taulukoita ja rakenteita, duplikointimenetelmät ovat erilaisia.

(1) Taulukkotyyppien päällekkäisyyden poistaminen

PostgreSQL tarjoaa toimintoja taulukoiden duplikoinnin poistamiseen.

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

Oletetaan, että siellä on pöytä users , jossa on sarakehobbies Se on kokonaislukutaulukko Jokaisen käyttäjän eri harrastustaulukoiden saamiseksi:

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

Selitys: Ensimmäinen käyttökerta unnest Funktio laajentaa taulukon riveiksi ja ottaa sitten käyttöönDISTINCT Suorita duplikointi ja lopuksi käytäARRAY Funktio kokoaa duplikoidut tulokset uudelleen taulukkoon.

(2) JSON-tyypin duplikoinnin poistaminen

Jos tiedot on tallennettu JSON Tyyppisarake voidaan poimiaJSON Arvot on poistettu.

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

Esimerkiksi tiedostolle nimeltä employee_details taulukko, jossa on ajson Listainfo ,Sisältääsalary Avainarvoparit erilaisten palkkaarvojen saamiseksi:

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

selittää: json_extract_path_text -toimintoa käytetään hakemiseenJSON Pura määritetyn avaimen arvo tiedoista ja poista puretun arvon kopiot.

(3) Rakennetyyppien päällekkäisyyden poistaminen (yhdistelmätyypit)

Mukautetuissa rakennetyypeissä voit purkaa rakenteen kentät yhteisen duplikoinnin poistamista varten.

Oletetaan, että rakenteen tyyppi on määritelty address_type ,Sisältäästreet jacity Kaksi kenttää, pöytäcontacts Siinä on sarakeaddress Jooaddress_type tyyppi.

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

Selitys: Suorita päällekkäisyyden poistotoiminnot suoraan rakenteen kenttiin.

kaunis jakoviiva

4. Käytä GROUP BY Suorita päällekkäisyyden poistaminen

GROUP BY Lauseella voidaan myös saavuttaa deduplikoinnin vaikutus, varsinkin kun datalle on tarpeen suorittaa aggregointilaskelmia ja deduplikointi samanaikaisesti.

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

Esimerkiksi saada students Eri luokat taulukossa:

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

selittää: GROUP BY Rivit, joilla on sama arvo, ryhmitellään yhteen, jolloin saadaan aikaan päällekkäisyyden poistamisen vaikutus.

kaunis jakoviiva

5. Nolla-arvoja sisältävien tietojen duplikointi

Kun data voi sisältää nolla-arvoja, duplikoinnin poistaminen vaatii erityistä huomiota. DISTINCT tahtoaNULL arvoja käsitellään erillisinä arvoina.Jos haluatNULL Arvojen katsotaan olevan samoja duplikoinnin poistamiseksi.

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

Esimerkiksi varten product_prices pöydässäprice sarakkeita (voi sisältääNULL arvo), toNULL Arvoja käsitellään identtisinä duplikoinnin poistamiseksi:

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

selittää: COALESCE toimintoa käytetään käsittelemäänNULL arvo, korvaa se määritetyllä oletusarvolla ja suorita sitten ryhmittely ja kopiointi korvatun tuloksen perusteella.

kaunis jakoviiva

6. Suorituskykyä koskevat näkökohdat

Kun suoritat tietojen duplikointitoimintoja, datamäärä ja suorituskyky on otettava huomioon. Suurille tietojoukoille indeksien käyttö voi parantaa päällekkäisyyden poistotoimintojen suorituskykyä.

Jos suoritat usein tietyn sarakkeen päällekkäisyyden poistotoimintoja, voit luoda indeksin kyseiselle sarakkeelle.

CREATE INDEX index_name ON your_table (column_name);
  • 1

Lisäksi sopivan duplikointimenetelmän valitseminen voi myös vaikuttaa suorituskykyyn.Jos esimerkiksi datamäärä on suuri ja sinun on hankittava vain yksilöllisten arvojen määrä todellisten yksilöllisten arvojen sijaan, käytäCOUNT(DISTINCT) Todennäköisesti parempi kuin käyttää sitä suoraanDISTINCT Tehokkaampi.

kaunis jakoviiva

7. Kattava mallikoodin soveltaminen

Oletetaan, että on a sales taulukko, joka sisältääcustomer_id (kokonaislukutyyppi),product_name (merkkijonotyyppi) jasale_amount (liukulukutyyppi) -sarake.

Saat luettelon eri asiakkaiden ostamista tuotteista käyttämällä seuraavaa kyselyä:

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

Jos haluat saada kunkin asiakkaan kokonaismyynnin ja saavuttaa asiakkaiden päällekkäisyyden samanaikaisesti, voit kirjoittaa näin:

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

hypoteesi sales pöydässäproduct_name Sarakkeet voivat sisältää nolla-arvoja. Voit käsitellä nolla-arvoja samoina duplikoinnin yhteydessä:

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

jos sales Taulukon datamäärä on erittäin suuri, ja se usein perustuucustomer_id Jos haluat poistaa sarakkeen päällekkäisyyden, voit luoda sarakkeelle indeksin:

CREATE INDEX sales_customer_id_index ON sales (customer_id);
  • 1

kaunis jakoviiva

8. Yhteenveto

Tietojen duplikoinnin toteuttaminen PostgreSQL:ssä edellyttää sopivan menetelmän valitsemista tietotyypin ja erityisten liiketoimintavaatimusten perusteella.Perustietotyyppejä voidaan käyttääDISTINCT avainsana monimutkaisille tietorakenteille, kuten taulukoille,JSON ja mukautettuja rakenteita, jotka on ehkä yhdistettävä tiettyihin toimintoihin ja toimintoihin päällekkäisyyden poistamiseksi. Samalla on tärkeää ottaa huomioon suorituskykytekijät, luoda järkevästi indeksejä ja valita optimaalinen duplikointistrategia. Yllä olevien esimerkkien ja selitysten avulla toivomme voivamme auttaa sinua suorittamaan tehokkaasti tietojen duplikointitoimintoja PostgreSQL:ssä vastaamaan erilaisiin liiketoimintatarpeisiin.


kaunis jakoviiva

🎉相关推荐

PostgreSQL