PostgreSQL configureren voor opname in Azure Databricks

Belangrijk

De PostgreSQL-connector voor Lakeflow Connect bevindt zich in openbare preview. Neem contact op met uw Databricks-accountteam om u in te schrijven voor de openbare preview.

Op deze pagina worden de broninstallatietaken beschreven voor opname vanuit PostgreSQL in Azure Databricks met behulp van Lakeflow Connect.

Aanmeldgegevens die worden gebruikt tijdens de installatie en gegevensinname

PostgreSQL-opname maakt gebruik van twee verschillende sets referenties in twee verschillende fasen. Weten welke aanmeldgegevens waar moeten worden gebruikt, voorkomt authenticatie- en autorisatiefouten tijdens de installatie.

Stage Referenties om te gebruiken Waarom
Broninstallatie (deze pagina) Een PostgreSQL-beheerder, supergebruiker of tabeleigenaar, die rechtstreeks is verbonden met de brondatabase (bijvoorbeeld via psql of de beheerconsole van uw cloudprovider). Voor het maken van de replicatiegebruiker, het verlenen van bevoegdheden en het maken van publicaties zijn supergebruiker- of tabeleigenaarbevoegdheden vereist die de replicatiegebruiker niet heeft. Het replicatieslot wordt door de replicatiegebruiker zelf aangemaakt, dus een beheerder die met de database is verbonden schakelt over naar die rol om het aan te maken. Zie de gebruikersvereisten voor de PostgreSQL-database voor de volledige lijst met bevoegdheden.
Verbindings- en opnamepijplijn De toegewezen replicatiegebruiker (bijvoorbeeld databricks_replication) die u tijdens de installatie van de bron maakt. De opnamegateway verifieert postgreSQL als de replicatiegebruiker om wijzigingen te lezen. U voert deze referenties in wanneer u de Unity Catalog-verbinding maakt. Zie Een PostgreSQL-verbinding maken.

Opmerking

U voert de broninstallatietaken uit als beheerder, maar de opnamepijplijn gebruikt geen beheerdersreferenties. Alleen de inloggegevens van de replicatiegebruiker worden opgeslagen in de Unity Catalog-verbinding.

Logische replicatie voor het vastleggen van wijzigingengegevens

De PostgreSQL-connector maakt gebruik van logische replicatie om wijzigingen in de brontabellen bij te houden. Met logische replicatie kan de connector gegevenswijzigingen vastleggen (invoegingen, updates en verwijderingen) zonder triggers of aanzienlijke overhead voor de brondatabase.

Logische replicatie van Lakeflow PostgreSQL vereist het volgende:

  1. Lakeflow Connect ondersteunt gegevensreplicatie vanuit PostgreSQL versie 13 en hoger.

  2. Configureer de database voor logische replicatie:

    De PostgreSQL-parameter wal_level moet worden ingesteld op logical.

  3. Maak publicaties met alle tabellen die u wilt repliceren.

  4. Maak replicatieslots voor elke catalogus die zal worden gerepliceerd.

Opmerking

Publicaties moeten worden gemaakt voordat u replicatieslots maakt.

Zie de documentatie over logische replicatie op de PostgreSQL-website voor meer informatie over logische replicatie .

Overzicht van broninstallatietaken

Voltooi de volgende taken in PostgreSQL voordat u gegevens opneemt in Azure Databricks:

  1. PostgreSQL 13 of hoger verifiëren

  2. Netwerktoegang configureren (beveiligingsgroepen, firewallregels of VPN)

  3. Logische replicatie configureren:

    • Logische replicatie inschakelen (wal_level = logical)
  4. Optioneel: Inline DDL-tracering configureren voor automatische detectie van schemawijziging. Als u wilt kiezen voor de inline DDL-tracering, neemt u contact op met databricks-ondersteuning.

Belangrijk

Als u van plan bent om te repliceren vanuit meerdere PostgreSQL-databases, moet u voor elke database een afzonderlijke publicatie en replicatiesite maken. Het inline DDL-traceringsscript (indien gebruikt) moet ook in elke database worden uitgevoerd.

Logische replicatie configureren

Als u logische replicatie in PostgreSQL wilt inschakelen, configureert u de database-instellingen en stelt u de benodigde objecten in.

Het WAL-niveau instellen op logisch

Het Write-Ahead Logboek (WAL) moet worden geconfigureerd voor logische replicatie. Voor deze instelling moet de database doorgaans opnieuw worden opgestart.

  1. Controleer de huidige wal_level instelling:

    SHOW wal_level;
    
  2. Als de waarde niet logicalis, stelt u wal_level = logical deze in de serverconfiguratie in en start u de PostgreSQL-service opnieuw.

Een replicatiegebruiker maken

Maak een toegewezen PostgreSQL-gebruiker voor Databricks-opname met replicatiebevoegdheden:

CREATE USER databricks_replication WITH PASSWORD 'your_secure_password';
GRANT CONNECT ON DATABASE your_database TO databricks_replication;
GRANT USAGE ON SCHEMA schema_name TO databricks_replication;
GRANT SELECT ON TABLE schema_name.table_name TO databricks_replication;
ALTER USER databricks_replication WITH REPLICATION;

Zie de gebruikersvereisten van de PostgreSQL-database voor gedetailleerde vereisten voor bevoegdheden.

Replica-identiteit instellen voor tabellen

Configureer de replica-identiteit voor elke tabel die u wilt repliceren. De juiste instelling is afhankelijk van de tabelstructuur:

Tabelstructuur Vereiste REPLICA-IDENTITEIT Command
Tabel heeft een primaire sleutel en bevat geen TOASTable-kolommen (bijvoorbeeld TEXTBYTEA, VARCHAR(n) met grote waarden) DEFAULT ALTER TABLE schema_name.table_name REPLICA IDENTITY DEFAULT;
Tabel heeft een primaire sleutel, maar bevat grote kolommen met een variabele lengte (TOASTable) FULL ALTER TABLE schema_name.table_name REPLICA IDENTITY FULL;
Tabel heeft geen primaire sleutel FULL ALTER TABLE schema_name.table_name REPLICA IDENTITY FULL;

Zie Replica-identiteit in de PostgreSQL-documentatie voor meer informatie over instellingen voor replica-identiteiten.

Een publicatie maken

Maak een publicatie in elke database die de tabellen bevat die u wilt repliceren. Voer deze opdracht uit als de eigenaar van de tabel of een superuser:

-- Create a publication for specific tables
CREATE PUBLICATION databricks_publication FOR TABLE schema_name.table1, schema_name.table2;

-- Or create a publication for all tables in a database
CREATE PUBLICATION databricks_publication FOR ALL TABLES;

Opmerking

  • U moet een afzonderlijke publicatie maken in elke PostgreSQL-database die u wilt repliceren.
  • CREATE PUBLICATION ... FOR TABLE vereist het eigendom van de vermelde tabellen. FOR ALL TABLES vereist superuser-bevoegdheden. Voer deze opdracht uit als de eigenaar van de tabel of een databasesuperuser, niet als de replicatiegebruiker.
  • Vermijd het toevoegen van tabellen aan de publicatie die niet nodig zijn voor replicatie om onnodig netwerkverkeer te verminderen.

Parameters voor replicatieslot configureren

Voordat u replicatiesites maakt, configureert u de volgende serverparameters:

WAL-retentie voor replicatieslots beperken

Parameter: max_slot_wal_keep_size

Het wordt aanbevolen om niet in te stellenmax_slot_wal_keep_size op -1 (de standaardwaarde), omdat dit ongelimiteerde WAL-bloat toestaat vanwege retentie door vertraagde of inactieve replicatieslots. Afhankelijk van uw workload stelt u deze parameter in op een eindige waarde.

Meer informatie over max_slot_wal_keep_size parameter vindt u in de officiële PostgreSQL-documentatie.

Opmerking

Sommige beheerde cloudproviders staan geen wijziging van deze parameter toe en vertrouwen in plaats daarvan op ingebouwde slotbewaking en automatisch opschonen. Controleer het platformgedrag voordat u operationele waarschuwingen instelt.

Voor meer informatie, zie:

Capaciteit van replicatieslot configureren

Parameter: max_replication_slots

Voor elke PostgreSQL-database die wordt gerepliceerd, is één logische replicatiesite vereist. Stel deze parameter in op ten minste het aantal databases dat wordt gerepliceerd, plus eventuele bestaande replicatiebehoeften.

WAL-afzenders configureren

Parameter: max_wal_senders

Met deze parameter definieert u het maximum aantal gelijktijdige WAL-afzenderprocessen waarmee WAL-gegevens worden gestreamd naar abonnees. In de meeste gevallen moet u één WAL-afzenderproces hebben voor elke replicatiesite om efficiënte en consistente gegevensreplicatie te garanderen.

Configureer max_wal_senders dat deze ten minste gelijk is aan het aantal replicatieslots dat wordt gebruikt, door rekening te houden met elk ander bestaand gebruik. Het wordt aanbevolen om het iets hoger in te stellen om operationele flexibiliteit te bieden.

Een replicatieslot maken

Maak een replicatiesite in elke database die door de Databricks-opnamegateway wordt gebruikt om wijzigingen bij te houden. De replicatieslot moet worden aangemaakt door een gebruiker met de REPLICATION bevoegdheid. Als u bent verbonden als superuser of beheerder, moet u eerst overschakelen naar de replicatiegebruiker:

SET ROLE databricks_replication;

-- Databricks supports only the pgoutput plugin for replication slots
SELECT pg_create_logical_replication_slot('databricks_slot', 'pgoutput');

-- Switch back to the admin or table owner role for subsequent steps
RESET ROLE;

Belangrijk

  • Replicatiesleuven houden WAL-loggegevens vast totdat deze door de connector worden verbruikt. Configureer de max_slot_wal_keep_size parameter om WAL-retentie te beperken en niet-gebonden WAL-groei te voorkomen. Zie Parameters voor replicatieslot configureren voor meer informatie.
  • Wanneer u een opnamepijplijn verwijdert, moet u het bijbehorende replicatieslot handmatig verwijderen. Zie ook Replicatieslots opschonen.

Optioneel: Inline DDL-tracering configureren

Inline DDL-tracering is een optionele functie waarmee de connector automatisch schemawijzigingen van de brondatabase kan detecteren en toepassen. Deze functie is standaard uitgeschakeld.

Waarschuwing

Inline DDL-tracking is momenteel stilgelegd voor stabilisatie. Wacht op de documentatie-update voordat je contact opneemt met Databricks Support om deze functie voor je werkruimte in te schakelen.

Zie Hoe kunnen beheerde connectors de evolutie van schema's verwerken? en Schemaontwikkeling voor informatie over welke schemawijzigingen automatisch worden verwerkt en waarvoor een volledige vernieuwing is vereist.

Inline DDL-tracering instellen

Je kunt de bron-side setup hieronder van tevoren voltooien, zodat inline DDL-tracking direct beschikbaar is zodra de functie voor je werkruimte is ingeschakeld. Het aanmaken van de auditobjecten heeft geen effect op de connector totdat de functie is ingeschakeld, dus het is veilig om deze stappen van tevoren uit te voeren.

Voltooi deze stappen in elke PostgreSQL-database:

  1. Download de nieuwste versie van het script:

    Lakeflow_pg_ddl_change_tracking.sql downloaden

  2. Voer het script uit:

    \i lakeflow_pg_ddl_change_tracking.sql
    

    Het script maakt de volgende objecten in het public schema. Objectnamen bevatten een versieachtervoegsel (momenteel _1_0) waarmee de scriptversie wordt bijgehouden:

    • Audittabel: public.lakeflow_ddl_audit_table_1_0 - slaat vastgelegde DDL-gebeurtenissen op.
    • Gebeurtenistriggerfuncties: public.lakeflow_ddl_audit_function_1_0 (voor ALTER TABLE gebeurtenissen) en public.lakeflow_drop_ddl_audit_function_1_0 (voor DROP TABLE gebeurtenissen).
    • Gebeurtenistriggers: lakeflow_ddl_audit_trigger_1_0 (wordt geactiveerd bij ddl_command_end) en lakeflow_drop_ddl_audit_trigger_1_0 (wordt geactiveerd bij sql_drop).
  3. Controleer of de triggers en de audittabel succesvol zijn gemaakt.

    -- Check for the DDL audit table
    SELECT * FROM pg_tables WHERE tablename LIKE 'lakeflow_ddl_audit_table%';
    
    -- Check for the event triggers
    SELECT * FROM pg_event_trigger WHERE evtname LIKE 'lakeflow%';
    

    U ziet de audittabel lakeflow_ddl_audit_table_1_0 en twee gebeurtenistriggers (lakeflow_ddl_audit_trigger_1_0 en lakeflow_drop_ddl_audit_trigger_1_0).

  4. Voeg de DDL-audittabel toe aan uw publicatie. Deze opdracht moet worden uitgevoerd als de eigenaar van de publicatie, niet als de replicatiegebruiker:

    ALTER PUBLICATION databricks_publication ADD TABLE public.lakeflow_ddl_audit_table_1_0;
    

Belangrijk

Maak de DDL-ondersteuningsobjecten aan voordat je feature enablement aanvraagt. De connector pikt de auditobjecten pas op wanneer de gateway start. Nadat de functie voor je werkruimte is ingeschakeld, moet je de invoergateway opnieuw starten zodat inline DDL-tracking van kracht wordt. Zie De innamegateway opnieuw starten.

Cloudspecifieke configuratieopmerkingen

AWS RDS en Aurora

  • Zorg ervoor dat de rds.logical_replication-parameter is ingesteld op 1 in de parametergroep.

  • Configureer beveiligingsgroepen om verbindingen vanuit de Databricks-werkruimte toe te staan.

  • De replicatiegebruiker vereist de rds_replication rol:

    GRANT rds_replication TO databricks_replication;
    

Azure-database voor PostgreSQL

  • Schakel logische replicatie in de serverparameters in via Azure Portal of CLI.
  • Configureer firewallregels om verbindingen vanuit de Databricks-werkruimte toe te staan.
  • Voor Flexibele server wordt logische replicatie ondersteund. Voor één server moet u ervoor zorgen dat u een ondersteunde laag gebruikt.

GCP Cloud SQL voor PostgreSQL (database-service van Google)

  • Schakel de cloudsql.logical_decoding vlag in de instantie-instellingen in.
  • Configureer geautoriseerde netwerken om verbindingen vanuit de Databricks-werkruimte toe te staan.
  • Zorg ervoor dat de cloudsql.enable_pglogical-vlag is ingesteld op on als u pglogical-extensies gebruikt.

De configuratie controleren

Nadat u de installatietaken hebt voltooid, controleert u of logische replicatie juist is geconfigureerd:

  1. Controleer of het wal_level is ingesteld op logical:

    SHOW wal_level;
    
  2. Controleer of de replicatiegebruiker de replication bevoegdheid heeft:

    SELECT rolname, rolreplication FROM pg_roles WHERE rolname = 'databricks_replication';
    
  3. Controleer of de replicatiegebruiker de rechten SELECT heeft op uw tabellen. Vervang schema_name.table_name door het schema en de tabel die u repliceert (bijvoorbeeld public.my_table):

    SELECT has_table_privilege('databricks_replication', 'schema_name.table_name', 'SELECT');
    
  4. Controleer of de publicatie bestaat:

    SELECT * FROM pg_publication WHERE pubname = 'databricks_publication';
    
  5. Controleer of het replicatieslot bestaat:

    SELECT slot_name, slot_type, active, restart_lsn
    FROM pg_replication_slots
    WHERE slot_name = 'databricks_slot';
    
  6. Controleer de replica-identiteit voor uw tabellen:

    SELECT schemaname, tablename, relreplident
    FROM pg_tables t
    JOIN pg_class c ON t.tablename = c.relname
    WHERE schemaname = 'your_schema';
    

    De relreplident kolom moet d weergeven voor standaardreplica-identiteit (gebruikt primaire sleutel) of f voor volledige replica-identiteit, (vereist voor tabellen zonder primaire sleutels of met TOASTable-kolommen).

Volgende stappen

Nadat u de broninstallatie hebt voltooid, kunt u een opnamegateway en pijplijn maken om gegevens op te nemen uit PostgreSQL. Zie Gegevens opnemen uit PostgreSQL.