Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Dieses Feature befindet sich in der öffentlichen Vorschau in den folgenden Regionen: westus, westus2, eastus, eastus2, centralus, southcentralus, northeurope, westeurope, australiaeast, brazilsouth, canadacentral, centralindia, southeastasia, uksouth.
Auf dieser Seite wird beschrieben, wie Sie eine synchronisierte Tabelle erstellen und verwalten. Eine synchronisierte Tabelle ist eine schreibgeschützte Postgres-Tabelle im Unity Catalog, die automatisch Daten aus einer Unity-Katalog-Tabelle mit Ihrer Lakebase-Datenbankinstanz synchronisiert. Das Synchronisieren einer Unity-Katalogtabelle in Postgres ermöglicht Leseabfragen mit geringer Latenz und unterstützt zur Abfragezeit Verknüpfungen mit anderen Postgres-Tabellen.
Die Synchronisierung wird von Lakeflow Spark Declarative Pipelines behandelt. Eine verwaltete Pipeline aktualisiert die Postgres-Tabelle kontinuierlich mit Änderungen aus der Quelltabelle. Nach der Erstellung können synchronisierte Tabellen direkt mithilfe von Postgres-Tools abgefragt werden.
Die wichtigsten Merkmale synchronisierter Tabellen sind wie folgt:
- Schreibgeschützt in Postgres, um die Datenintegrität mit der Quelle aufrechtzuerhalten
- Automatische Synchronisierung mit verwalteten Lakeflow Spark Declarative Pipelines
- Abfragbar über standardmäßige PostgreSQL-Schnittstellen
- Verwaltet über Unity Catalog für Governance und Lebenszyklusverwaltung
Bevor Sie anfangen
- Sie verfügen über eine Unity-Katalogtabelle in einem beliebigen Katalog.
- Sie verfügen über
CAN USE-Berechtigungen für die Datenbankinstanz.
Erstellen einer synchronisierten Tabelle
Benutzeroberfläche
Gehen Sie wie folgt vor, um eine Unity-Katalogtabelle mit Postgres zu synchronisieren:
Klicken Sie auf " Katalog" in der Arbeitsbereich-Randleiste.
Suchen Und wählen Sie die Unity-Katalogtabelle aus, auf der Sie eine synchronisierte Tabelle erstellen möchten.
Klicken Sie auf ">".
Wählen Sie Ihren Katalog, Ihr Schema aus, und geben Sie einen Tabellennamen für die neue synchronisierte Tabelle ein.
- Synchronisierte Tabellen können auch in Standardkatalogen mit einer zusätzlichen Konfiguration erstellt werden. Wählen Sie Ihren Standardkatalog, ein Schema aus, und geben Sie einen Tabellennamen für die neu erstellte synchronisierte Tabelle ein.
Wählen Sie eine Datenbankinstanz aus, und geben Sie den Namen der Postgres-Datenbank ein, in der die synchronisierte Tabelle erstellt werden soll. Das Postgres-Datenbankfeld ist standardmäßig im aktuell ausgewählten Zielkatalog enthalten. Wenn unter diesem Namen keine Postgres-Datenbank vorhanden ist, erstellt Azure Databricks eine neue Datenbank.
Wählen Sie einen Primärschlüssel aus. Ein Primärschlüssel ist erforderlich , da er effizienten Zugriff auf Zeilen für Lesevorgänge, Aktualisierungen und Löschvorgänge ermöglicht.
Von Bedeutung
Spalten im Primärschlüssel dürfen in der synchronisierten Tabelle nicht null sein. Daher werden Zeilen mit Nullen in Primärschlüsselspalten von der Synchronisierung ausgeschlossen.
Wenn zwei Zeilen denselben Primärschlüssel in der Quelltabelle haben, wählen Sie einen Timeseries-Schlüssel aus, um die Deduplizierung zu konfigurieren. Wenn ein Timeseries-Schlüssel angegeben wird, enthält die synchronisierten Tabellen nur die Zeilen mit dem neuesten Zeitserienschlüsselwert für jeden Primärschlüssel.
Wählen Sie den Synchronisierungsmodus aus "Snapshot", " Ausgelöst" und "Fortlaufend" aus. Weitere Informationen zu jedem Synchronisierungsmodus finden Sie unter "Synchronisierungsmodi".
Wählen Sie aus, ob Sie diese synchronisierte Tabelle aus einer neuen oder vorhandenen Pipeline erstellen möchten.
- Wenn Sie eine neue Pipeline erstellen und einen verwalteten Katalog verwenden, wählen Sie den Speicherort für die Stagingtabelle aus. Bei Verwendung eines Standardkatalogs wird die Stagingtabelle automatisch im Katalog gespeichert.
- Wenn Sie eine vorhandene Pipeline verwenden, überprüfen Sie, ob der neue Synchronisierungsmodus dem Pipelinemodus entspricht.
(Optional) Wählen Sie eine Serverless-Budgetrichtlinie aus. Informationen zum Erstellen einer serverlosen Budgetrichtlinie finden Sie unter Attributnutzung mit serverlosen Budgetrichtlinien. Auf diese Weise können Sie die Abrechnungsnutzung bestimmten Verwendungsrichtlinien zuordnen.
- Bei synchronisierten Tabellen ist die abrechnungsfähige Entität die zugrunde liegende Lakeflow Spark Declarative Pipelines-Pipeline. Um die Budgetrichtlinie zu ändern, ändern Sie das zugrunde liegende Pipelineobjekt. Siehe Konfigurieren einer serverlosen Pipeline.
Nachdem der Status der synchronisierten Tabelleonline ist, melden Sie sich bei Ihrer Datenbankinstanz an, und fragen Sie die neu erstellte Tabelle ab. Fragen Sie Ihre Tabelle mit dem SQL-Editor, externen Tools oder Notizbüchern ab.
Python SDK
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.database import SyncedDatabaseTable, SyncedTableSpec, NewPipelineSpec, SyncedTableSchedulingPolicy
# Initialize the Workspace client
w = WorkspaceClient()
# Create a synced table in a database catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="database_catalog.schema.synced_table", # Full three-part name
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"], # Primary key columns
scheduling_policy=SyncedTableSchedulingPolicy.TRIGGERED, # SNAPSHOT, TRIGGERED, or CONTINUOUS
# Optional: timeseries_key="timestamp" # For deduplication
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Create a synced table in a standard UC catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="standard_catalog.schema.synced_table", # Full three-part name
database_instance_name="my-database-instance", # Required for standard catalogs
logical_database_name="postgres_database", # Required for standard catalogs
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"],
scheduling_policy=SyncedTableSchedulingPolicy.CONTINUOUS,
create_database_objects_if_missing=True, # Create database/schema if needed
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Check the status of a synced table
synced_table_name = "database_catalog.schema.synced_table"
status = w.database.get_synced_database_table(name=synced_table_name)
print(f"Synced table status: {status.data_synchronization_status.detailed_state}")
print(f"Status message: {status.data_synchronization_status.message}")
Befehlszeilenschnittstelle (CLI)
# Create a synced table in a database catalog
databricks database create-synced-database-table \
--json '{
"spec": {
"name": "database_catalog.schema.synced_table",
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "TRIGGERED"
},
"new_pipeline_spec": {
"storage_catalog": "storage_catalog",
"storage_schema": "storage_schema"
}
}'
# Create a synced table in a standard UC catalog
# new_pipeline_spec, storage_catalog, and storage_schema are optional
databricks database create-synced-database-table \
--database-instance-name "my-database-instance" \
--logical-database-name "databricks_postgres" \
--json '{
"name": "standard_catalog.schema.synced_table",
"spec": {
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "CONTINUOUS",
"create_database_objects_if_missing": true
}
}'
# Check the status of a synced table
databricks database get-synced-database-table "database_catalog.schema.synced_table"
cURL
Erstellen Sie eine synchronisierte Tabelle in einem Datenbankkatalog.
export CATALOG_NAME=<Database catalog>
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.synced_table"
export PKS='["id"]'
export ST_CATALOG = "storage_catalog"
export ST_SCHEMA = "storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Erstellen Sie eine synchronisierte Tabelle in einem Standard-Unity-Katalog.
export CATALOG_NAME=<Standard catalog>
export DATABASE_INSTANCE=<database instance>
export POSTGRES_DATABASE=$CATALOG_NAME
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.sync_table"
export PKS='["id"]'
export ST_CATALOG = "storage_catalog"
export ST_SCHEMA = "storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"database_instance_name": "$DATABASE_INSTANCE",
"logical_database_name": "$POSTGRES_DATABASE",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Überprüfen Sie den Status einer synchronisierten Tabelle.
export SYNCEDTABLE='pg_db.silver.sbtest1_online'
curl --request GET \
"https://e2-dogfood.staging.cloud.databricks.com/api/2.0/database/synced_tables/$SYNCEDTABLE" \
--header "Authorization: Bearer dapi..."
Erläuterung der Synchronisierungsmodi
Eine synchronisierte Tabelle kann mit einem der folgenden Synchronisierungsmodi erstellt werden, die bestimmen, wie Daten aus der Quelle mit der synchronisierten Tabelle in Postgres synchronisiert werden:
| Synchronisierungsmodus | Description | Leistung |
|---|---|---|
| Schnappschuss | Die Pipeline wird einmal ausgeführt, um einen Snapshot der Quelltabelle zu erstellen und ihn in die synchronisierte Tabelle zu kopieren. Nachfolgende Ausführungen der Pipeline kopieren die gesamten Quelldaten zum Ziel und ersetzen sie an Ort und Stelle atomar. Die Pipeline kann manuell, über eine API oder einen Zeitplan ausgelöst werden. | Dieser Modus ist 10 mal effizienter als triggerte oder fortlaufende Synchronisierungsmodi, da daten neu erstellt werden. Wenn Sie mehr als 10% der Quelltabelle ändern, sollten Sie diesen Modus verwenden. |
| Ausgelöst | Die Pipeline wird einmal ausgeführt, um einen Snapshot der Quelltabelle zu erstellen und ihn in die synchronisierte Tabelle zu kopieren. Im Gegensatz zum Snapshot-Synchronisierungsmodus werden beim Aktualisieren der synchronisierten Tabelle nur Änderungen seit der letzten Pipelineausführung abgerufen und auf die synchronisierte Tabelle angewendet. Die inkrementelle Aktualisierung kann manuell, über eine API oder einen Zeitplan ausgelöst werden. | Dieser Modus ist ein guter Kompromiss zwischen Verzögerung und Kosten, da er bei Bedarf ausgeführt wird und nur Änderungen seit der letzten Ausführung anwendet. Um die Verzögerung zu minimieren, führen Sie diese Pipeline unmittelbar nach dem Aktualisieren der Quelltabelle aus. Wenn Sie dies häufiger als alle 5 Minuten ausführen, ist dies möglicherweise teurer als der fortlaufende Modus aufgrund der Kosten für das Starten und Beenden der Pipeline jedes Mal. |
| Fortlaufend | Die Pipeline wird einmal ausgeführt, um eine Momentaufnahme der Quelltabelle zu erstellen und in die synchronisierte Tabelle zu kopieren, dann wird die Pipeline kontinuierlich ausgeführt. Nachfolgende Änderungen an der Quelltabelle werden in Echtzeit auf die synchronisierte Tabelle angewendet. Es ist keine manuelle Aktualisierung erforderlich. | Dieser Modus hat die niedrigsten, aber höheren Kosten, da er kontinuierlich ausgeführt wird. |
Hinweis
Um den Synchronisierungsmodus Ausgelöst oder Fortlaufend zu unterstützen, muss für die Quelltabelle Datenfeed ändern aktiviert sein. Bestimmte Quellen (z. B. Ansichten) unterstützen keinen Änderungsdatenfeed, sodass sie nur im Momentaufnahme-Modus synchronisiert werden können.
Unterstützte Vorgänge
Databricks empfiehlt, nur die folgenden Vorgänge in Postgres für synchronisierte Tabellen auszuführen, um versehentliche Überschreibungen oder Dateninkonsistenzen zu verhindern:
- Schreibgeschützte Abfragen
- Erstellen von Indizes
- Ablegen der Tabelle (zum Freigeben von Speicherplatz nach dem Entfernen der synchronisierten Tabelle aus dem Unity-Katalog)
Obwohl Sie diese Tabelle auf andere Weise ändern können, stört sie die Synchronisierungspipeline.
Löschen einer synchronisierten Tabelle
Um eine synchronisierte Tabelle zu löschen, müssen Sie sie aus dem Unity-Katalog löschen und dann die Tabelle in der Datenbankinstanz ablegen. Durch das Löschen der synchronisierten Tabelle aus dem Unity-Katalog wird die Tabelle ausgetragen und die Datenaktualisierungen gestoppt. Die Tabelle verbleibt jedoch in der zugrunde liegenden Postgres-Datenbank. Um Speicherplatz in Ihrer Datenbankinstanz freizugeben, stellen Sie eine Verbindung mit der Instanz her, und verwenden Sie den DROP TABLE Befehl.
Benutzeroberfläche
- Klicken Sie auf " Katalog" in der Arbeitsbereich-Randleiste.
- Suchen Und wählen Sie die synchronisierte Tabelle aus, die Sie löschen möchten.
- Klicken Sie auf
>Löschen.
- Stellen Sie mithilfe von
psql, dem SQL-Editor, oder über ein Notebook eine Verbindung mit der Instanz her. - Legen Sie die Tabelle mit PostgreSQL ab.
DROP TABLE synced_table_database.synced_table_schema.synced_table
Python SDK
from databricks.sdk import WorkspaceClient
# Initialize the Workspace client
w = WorkspaceClient()
# Delete a synced table from UC
synced_table_name = "catalog.schema.synced_table"
w.database.delete_synced_database_table(name=synced_table_name)
print(f"Deleted synced table from UC: {synced_table_name}")
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
Befehlszeilenschnittstelle (CLI)
# Delete a synced table from UC
databricks database delete-synced-database-table "catalog.schema.synced_table"
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
cURL
# Delete a synced table from UC
curl -X DELETE --header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
https://$WORKSPACE/api/2.0/database/synced_tables/$SYNCED_TABLE_NAME
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
Besitz und Berechtigungen
Wenn Sie eine neue Postgres-Datenbank, ein neues Schema oder eine neue Tabelle erstellen, wird der Besitz von Postgres wie folgt festgelegt:
- Der Besitz wird dem Benutzer zugewiesen, der die Datenbank, das Schema oder die Tabelle erstellt, wenn seine Azure Databricks-Anmeldung als Rolle in Postgres vorhanden ist. Informationen zum Hinzufügen einer Azure Databricks-Identitätsrolle in Postgres finden Sie unter Verwalten von Postgres-Rollen.
- Andernfalls wird das Eigentum dem Besitzer des übergeordneten Objekts in Postgres zugewiesen (typischerweise der/dem/den
databricks_superuser).
Verwalten des synchronisierten Tabellenzugriffs
Nachdem eine synchronisierte Tabelle erstellt wurde, kann databricks_superuser einen READ-Vorgang für eine synchronisierte Tabelle aus Postgres ausführen. Der databricks_superuser besitzt pg_read_all_data, wodurch diese Rolle von allen Tabellen lesen kann. Außerdem verfügt sie über die pg_write_all_data Berechtigung, die es dieser Rolle erlaubt, in alle Tabellen zu schreiben. Dies bedeutet, dass ein databricks_superuser auch in eine synchronisierte Tabelle in Postgres schreiben kann. Lakebase unterstützt dieses Schreibverhalten, falls Sie dringende Änderungen an Ihrer Zieltabelle vornehmen müssen. Databricks empfiehlt jedoch, stattdessen Korrekturen in Der Quelltabelle vorzunehmen.
Dies
databricks_superuserkann auch anderen Benutzern berechtigungen gewähren:GRANT USAGE ON SCHEMA synced_table_schema TO user;GRANT SELECT ON synced_table_name TO user;databricks_superuserkann diese Berechtigungen widerrufen:REVOKE USAGE ON SCHEMA synced_table_schema FROM user;REVOKE {SELECT | INSERT | UPDATE | DELETE} ON synced_table_name FROM user;
Verwalten von synchronisierten Tabellenvorgängen
Die databricks_superuser Kann verwalten, welche Benutzer berechtigt sind, bestimmte Vorgänge für eine synchronisierte Tabelle auszuführen. Die unterstützten Vorgänge für synchronisierte Tabellen sind:
CREATE INDEXALTER INDEXDROP INDEXDROP TABLE
Alle anderen DDL-Vorgänge werden für synchronisierte Tabellen verweigert.
Um diese Berechtigungen zusätzlichen Benutzern zu gewähren, muss databricks_superuser zuerst eine Erweiterung für databricks_auth erstellen.
CREATE EXTENSION IF NOT EXISTS databricks_auth;
Anschließend kann ein databricks_superuser Benutzer zum Verwalten einer synchronisierten Tabelle hinzugefügt werden:
SELECT databricks_synced_table_add_manager('"synced_table_schema"."synced_table"'::regclass, '[user]');
Der databricks_superuser kann einen Benutzer von der Verwaltung einer synchronisierten Tabelle entfernen.
SELECT databricks_synced_table_remove_manager('[table]', '[user]');
databricks_superuser kann alle Vorgesetzten anzeigen:
SELECT * FROM databricks_synced_table_managers;
Datentypzuordnung
Diese Typzuordnungstabelle definiert, wie jeder Datentyp in der Unity-Quellkatalogtabelle der Zielsynchronisierungstabelle in Postgres zugeordnet wird:
| Quellspaltentyp | Postgres-Spaltentyp |
|---|---|
| BIGINT | BIGINT |
| BINÄR | BYTEA |
| BOOLESCH | BOOLEAN |
| DATUM | DATE |
| DEZIMAL(p;s) | NUMERISCH |
| DOPPELT | DOPPELTE GENAUIGKEIT |
| SCHWEBEN | WIRKLICH |
| INT | INTEGER |
| INTERVAL intervalQualifier | INTERVALL |
| SMALLINT | SMALLINT |
| SCHNUR | TEXT |
| ZEITSTEMPEL | ZEITSTEMPEL MIT ZEITZONE |
| TIMESTAMP_NTZ | ZEITSTEMPEL OHNE ZEITZONE |
| TINYINT | SMALLINT |
| GEOGRAFIE(srid) | NICHT UNTERSTÜTZT |
| GEOMETRY(srid) | NICHT UNTERSTÜTZT |
| ARRAY-ElementTyp <> | JSONB |
| MAP < keyType,valueType > | JSONB |
| STRUCT < [FieldName : fieldType [NOT NULL][COMMENT str][, ...]] > | JSONB |
| VARIANTE | JSONB |
| OBJEKT | NICHT UNTERSTÜTZT |
Hinweis
- Die Zuordnung für ARRAY-, MAP- und STRUKTUR-Typen wurde im Mai 2025 geändert. Synchronisierungstabellen, die zuvor erstellt wurden, ordnen diese Typen weiterhin JSON zu.
- Die Zuordnung für TIMESTAMP wurde im August 2025 geändert. Synchronisierungstabellen, die zuvor erstellt wurden, ordnen sie weiterhin TIMESTAMP OHNE ZEITZONE zu.
Behandeln ungültiger Zeichen
Bestimmte Zeichen, z. B. das NULL-Byte (0x00), sind in STRINGARRAYMAPDelta-Tabellen oder STRUCT Spalten zulässig, werden jedoch in Postgres TEXT oder JSONB Spalten nicht unterstützt. Infolgedessen kann die Synchronisierung solcher Daten von Delta mit Postgres zu Einfügungsfehlern führen.
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
org.postgresql.util.PSQLException: ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text.
- Der erste Fehler tritt auf, wenn ein NULL-Byte in einer Top-Level-Zeichenfolgenspalte angezeigt wird, die direkt Postgres
TEXTzugeordnet ist. - Der zweite Fehler tritt auf, wenn ein Null-Byte in einer Zeichenfolge erscheint, die in einem komplexen Typ (
STRUCT,ARRAYoderMAP) eingebettet ist, der Azure Databricks alsJSONBserialisiert. Während der Serialisierung werden alle Zeichenfolgen in PostgresTEXTumgewandelt, wo\u0000nicht zulässig ist.
Lösung:
Sie können dieses Problem auf eine der folgenden Arten beheben:
Bereinigen von Zeichenfolgenfeldern
Entfernen oder ersetzen Sie nicht unterstützte Zeichen aus allen Zeichenfolgenfeldern, einschließlich derjenigen innerhalb komplexer Typen, bevor sie mit Postgres synchronisiert werden.
Verwenden Sie die
STRINGFunktion, um Nullbytes aus einer Spalte auf oberster EbeneREPLACEzu entfernen:SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table;In binär konvertieren (nur für
STRINGSpalten)Wenn der unformatierte Byteinhalt beibehalten werden muss, konvertieren Sie die betroffenen
STRINGSpalten inBINARY.
Einschränkungen und Überlegungen
Unterstützte Quelltabellen
Abhängig vom Synchronisierungsmodus einer synchronisierten Tabelle werden verschiedene Arten von Quelltabellen unterstützt:
Für den Momentaufnahmemodus muss die Quelltabelle unterstützt werden
SELECT *. Beispiele sind Delta-Tabellen, Iceberg-Tabellen, Ansichten, materialisierte Ansichten und andere ähnliche Typen.Für den Modus "Ausgelöste" oder "Fortlaufende Synchronisierung " muss auch die Quelltabelle den Datenfeed aktiviert haben.
Benennungs- und Bezeichnerbeschränkungen
-
Zulässige Zeichen: Die Datenbank, das Schema und die Tabellennamen für synchronisierte Tabellen dürfen nur alphanumerische Zeichen und Unterstriche (
[A-Za-z0-9_]+) enthalten. Bindestriche (-) und andere Sonderzeichen werden nicht unterstützt. - Spalten- und Tabellenbezeichner: Vermeiden Sie die Verwendung von Großbuchstaben oder Sonderzeichen in Spalten- oder Tabellennamen in der Unity-Katalog-Quelltabelle. Wenn sie beibehalten werden, müssen Sie diese Bezeichner zitieren, wenn Sie sie in Postgres referenzieren.
Leistung und Synchronisierung
- Synchronisierungsgeschwindigkeit: Die Synchronisierung von Daten in synchronisierte Tabellen kann aufgrund zusätzlicher Verarbeitung langsamer sein als das direkte Schreiben von Daten in die Datenbankinstanz mit einem nativen PostgreSQL-Client. Der fortlaufende Synchronisierungsmodus aktualisiert Daten aus der verwalteten Tabelle des Unity-Katalogs in einem mindesten Intervall von 15 Sekunden auf die synchronisierte Tabelle.
- Verbindungsverwendung: Jede Tabellensynchronisierung kann bis zu 16 Verbindungen mit der Datenbankinstanz verwenden, die zum Verbindungsgrenzwert der Instanz zählen.
- API-Idempotenz: Synchronisierte Tabellen-APIs sind idempotent und müssen möglicherweise erneut versucht werden, wenn Fehler auftreten, um rechtzeitige Vorgänge sicherzustellen.
-
Schemaänderungen: Bei synchronisierten Tabellen im
TriggeredoderContinuousModus werden nur additive Schemaänderungen (z. B. das Hinzufügen einer neuen Spalte) aus den Unity-Katalogtabellen in der synchronisierten Tabelle widergespiegelt. - Doppelte Schlüssel: Wenn zwei Zeilen denselben Primärschlüssel in der Quelltabelle aufweisen, schlägt die Synchronisierungspipeline fehl, es sei denn, Sie konfigurieren die Deduplizierung mithilfe eines Timeseries-Schlüssels. Die Verwendung eines Zeitreihenschlüssels kann jedoch zu Leistungseinbußen führen.
- Aktualisierungsrate: Die Synchronisierungspipeline unterstützt fortlaufende Schreibvorgänge mit ca. 1.200 Zeilen pro Sekunde pro Sekunde pro Kapazitätseinheit (CU) und Massenschreibvorgänge mit bis zu 15.000 Zeilen pro Sekunde pro CU.
Kapazität und Grenzwerte
-
Tabellengrenzwerte:
- Grenzwert von 20 synchronisierten Tabellen pro Quelltabelle.
- Jede Tabellensynchronisierung kann bis zu 16 Datenbankverbindungen verwenden.
-
Größenbeschränkungen und vollständige Aktualisierung:
- Wenn Sie eine synchronisierte Tabelle vollständig aktualisieren, wird die alte Version in Postgres erst gelöscht, wenn die neue Tabelle synchronisiert wird. Beide Versionen zählen vorübergehend zum Grenzwert für die Größe der logischen Datenbank während der Aktualisierung.
- Einzelne synchronisierte Tabellen haben keinen Grenzwert, aber die Gesamtgröße der logischen Datengröße für alle Tabellen in der Instanz beträgt 2 TB. Wenn Sie jedoch Aktualisierungen anstelle einer vollständigen Tabellenerholung benötigen, empfiehlt Databricks nicht mehr als 1 TB.
- Wenn die nicht komprimierte Zeilenformatgröße der Unity Catalog-Tabelle den Grenzwert für die Datenbankinstanzgröße (2 TB) überschreitet, schlägt die Synchronisierung fehl. Sie müssen die synchronisierte Tabelle in Postgres ablegen, bevor Sie weiter in die Instanz schreiben.
Katalogintegration
- Katalogduplizierung: Das Erstellen einer synchronisierten Tabelle in einem Standardkatalog für eine Postgres-Datenbank, die auch als separater Datenbankkatalog registriert ist, bewirkt, dass die synchronisierte Tabelle im Unity-Katalog sowohl im Standard- als auch im Datenbankkatalog angezeigt wird.