Einführung in PostgreSQL-Datenübertragungen
Sie können Daten aus PostgreSQL in BigQuery laden, indem Sie den BigQuery Data Transfer Service für den PostgreSQL-Connector verwenden. Der Connector unterstützt PostgreSQL-Instanzen, die in Ihrer lokalen Umgebung, in Cloud SQL und bei anderen öffentlichen Cloud-Anbietern wie Amazon Web Services (AWS) und Microsoft Azure gehostet werden. Dieses Dokument bietet einen Überblick über die Optionen für die Datenaufnahme für Ihre PostgreSQL-Übertragung sowie Informationen zur Datentypzuordnung und zu den Preisen.
Informationen zum Planen einer PostgreSQL-Übertragung finden Sie unter PostgreSQL-Daten in BigQuery laden.
Optionen für die Datenaufnahme
In den folgenden Abschnitten finden Sie Informationen zu den Optionen für die Datenaufnahme, wenn Sie eine PostgreSQL-Datenübertragung einrichten.
TLS-Konfiguration
Der PostgreSQL-Connector unterstützt die Konfiguration für die Sicherheit auf Transportebene (TLS), um Ihre Datenübertragungen in BigQuery zu verschlüsseln. Der PostgreSQL-Connector unterstützt die folgenden TLS-Konfigurationen:
Der Modus Daten verschlüsseln und Zertifizierungsstelle sowie Hostname überprüfen. In diesem Modus wird der Server mit TLS über das TCPS-Protokoll vollständig validiert. Alle Daten werden bei der Übertragung verschlüsselt und es wird geprüft, ob das Zertifikat des Datenbankservers von einer vertrauenswürdigen Zertifizierungsstelle (Certificate Authority, CA) signiert wurde. In diesem Modus wird auch geprüft, ob der Hostname, zu dem Sie eine Verbindung herstellen, genau mit dem allgemeinen Namen (Common Name, CN) oder einem alternativen Antragstellernamen (Subject Alternative Name, SAN) im Serverzertifikat übereinstimmt. In diesem Modus wird verhindert, dass Angreifer ein gültiges Zertifikat für eine andere Domain verwenden, um sich als Ihr Datenbankserver auszugeben.
Wenn Ihr Hostname nicht mit dem CN oder SAN des Zertifikats übereinstimmt, schlägt die Verbindung fehl. Sie müssen eine DNS-Auflösung konfigurieren, die dem Zertifikat entspricht, oder einen anderen Sicherheitsmodus verwenden. Verwenden Sie diesen Modus, um sich am besten vor Man-in-the-Middle-Angriffen (MITM) zu schützen.
Der Modus Daten verschlüsseln und nur Zertifizierungsstelle überprüfen. In diesem Modus werden alle Daten mit TLS über das TCPS-Protokoll verschlüsselt und es wird geprüft, ob das Zertifikat des Servers von einer CA signiert ist, der der Client vertraut. In diesem Modus wird jedoch der Hostname des Servers nicht überprüft. In diesem Modus wird eine Verbindung hergestellt, solange das Zertifikat gültig ist und von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde. Dabei spielt es keine Rolle, ob der Hostname im Zertifikat mit dem Hostnamen übereinstimmt, mit dem Sie eine Verbindung herstellen.
Verwenden Sie diesen Modus, wenn Sie sicherstellen möchten, dass Sie eine Verbindung zu einem Server herstellen, dessen Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle signiert ist, der Hostname jedoch nicht überprüft werden kann oder Sie keine Kontrolle über die Hostname-Konfiguration haben.
Der Modus Nur Verschlüsselung. In diesem Modus werden alle zwischen dem Client und dem Server übertragenen Daten verschlüsselt. Es wird keine Zertifikats- oder Hostnamenvalidierung durchgeführt.
Dieser Modus bietet ein gewisses Maß an Sicherheit, da Daten bei der Übertragung geschützt werden. Er kann jedoch anfällig für PITM-Angriffe sein.
Verwenden Sie diesen Modus, wenn alle Daten verschlüsselt werden müssen, Sie die Identität des Servers aber nicht überprüfen können oder möchten. Wir empfehlen, diesen Modus zu verwenden, wenn Sie mit privaten VPCs arbeiten.
Der Modus Keine Verschlüsselung oder Überprüfung. In diesem Modus werden keine Daten verschlüsselt und es werden keine Zertifikats- oder Hostname-Überprüfungen durchgeführt. Alle Daten werden als Nur-Text gesendet.
Wir empfehlen, diesen Modus nicht in einer Umgebung zu verwenden, in der vertrauliche Daten verarbeitet werden. Wir empfehlen, diesen Modus nur zu Testzwecken in einem isolierten Netzwerk zu verwenden, in dem die Sicherheit kein Problem darstellt.
Vertrauenswürdiges Serverzertifikat(PEM)
Wenn Sie den Modus Daten verschlüsseln und Zertifizierungsstelle sowie Hostname überprüfen oder den Modus Daten verschlüsseln und Zertifizierungsstelle überprüfen verwenden, können Sie auch ein oder mehrere PEM-codierte Zertifikate angeben. Diese Zertifikate sind in einigen Szenarien erforderlich, in denen der BigQuery Data Transfer Service die Identität Ihres Datenbankservers während der TLS-Verbindung bestätigen muss:
- Wenn Sie ein Zertifikat verwenden, das von einer privaten Zertifizierungsstelle in Ihrer Organisation signiert wurde, oder ein selbst signiertes Zertifikat, müssen Sie die vollständige Zertifikatskette oder das einzelne selbst signierte Zertifikat angeben. Dies ist für Zertifikate erforderlich, die von internen Zertifizierungsstellen verwalteter Cloud-Anbieterdienste wie dem Amazon Relational Database Service (RDS) ausgestellt wurden.
- Wenn Ihr Datenbankserverzertifikat von einer öffentlichen Zertifizierungsstelle (z. B. Let's Encrypt, DigiCert oder GlobalSign) signiert ist, müssen Sie kein Zertifikat angeben. Die Root-Zertifikate für diese öffentlichen Zertifizierungsstellen sind vorinstalliert und werden vom BigQuery Data Transfer Service als vertrauenswürdig eingestuft.
Sie können PEM-codierte Zertifikate im Feld Vertrauenswürdiges PEM-Zertifikat in der Übertragungskonfiguration angeben. Dabei gelten die folgenden Anforderungen:
- Das Zertifikat muss eine gültige PEM-codierte Zertifikatskette sein.
- Das Zertifikat muss vollständig korrekt sein. Fehlende Zertifikate in der Kette oder falsche Inhalte führen dazu, dass die TLS-Verbindung fehlschlägt.
- Für ein einzelnes Zertifikat können Sie ein einzelnes, selbst signiertes Zertifikat vom Datenbankserver bereitstellen.
- Für eine vollständige Zertifikatskette, die von einer privaten Zertifizierungsstelle ausgestellt wurde, müssen Sie die vollständige Vertrauenskette angeben. Dazu gehören das Zertifikat des Datenbankservers sowie alle Zwischen- und Root-CA-Zertifikate.
Vollständige oder inkrementelle Übertragungen
Sie können angeben, wie Daten in BigQuery geladen werden, indem Sie beim Einrichten einer PostgreSQL-Übertragung in der Übertragungskonfiguration die Schreibeinstellung Vollständig oder Inkrementell auswählen.
Sie können eine vollständige Datenübertragung konfigurieren, um bei jeder Datenübertragung alle Daten aus Ihren PostgreSQL-Datasets zu übertragen.Alternativ können Sie eine inkrementelle Datenübertragung konfigurieren, um nur Daten zu übertragen, die sich seit der letzten Datenübertragung geändert haben, anstatt bei jeder Datenübertragung das gesamte Dataset zu laden. Wenn Sie für die Datenübertragung Inkrementell auswählen, müssen Sie entweder den Schreibmodus Anhängen oder Upsert angeben, um festzulegen, wie Daten während einer inkrementellen Datenübertragung in BigQuery geschrieben werden. In den folgenden Abschnitten werden die verfügbaren Schreibmodi beschrieben.
Schreibmodus „Anhängen“
Im Schreibmodus „Anhängen“ werden nur neue Zeilen in die Zieltabelle eingefügt. Bei dieser Option werden übertragene Daten strikt angehängt, ohne dass nach vorhandenen Datensätzen gesucht wird. Daher kann es in der Zieltabelle zu Datenduplizierungen kommen.
Wenn Sie den Anfügemodus auswählen, müssen Sie eine Watermark-Spalte auswählen. Für den PostgreSQL-Connector ist eine Wasserzeichenspalte erforderlich, um Änderungen in der Quelltabelle zu verfolgen.
Bei PostgreSQL-Übertragungen empfehlen wir, eine Spalte auszuwählen, die nur beim Erstellen des Datensatzes aktualisiert wird und sich bei nachfolgenden Aktualisierungen nicht ändert, z. B. die SpalteCREATED_AT.
Upsert-Schreibmodus
Im Upsert-Schreibmodus wird entweder eine Zeile aktualisiert oder eine neue Zeile in die Zieltabelle eingefügt, indem nach einem Primärschlüssel gesucht wird. Sie können einen Primärschlüssel angeben, damit der PostgreSQL-Connector ermitteln kann, welche Änderungen erforderlich sind, um die Zieltabelle mit der Quelltabelle auf dem neuesten Stand zu halten. Wenn der angegebene Primärschlüssel während einer Datenübertragung in der BigQuery-Zieltabelle vorhanden ist, wird die entsprechende Zeile vom PostgreSQL-Connector mit neuen Daten aus der Quelltabelle aktualisiert. Wenn bei einer Datenübertragung kein Primärschlüssel vorhanden ist, fügt der PostgreSQL-Connector eine neue Zeile ein.
Wenn Sie den Upsert-Modus auswählen, müssen Sie eine Watermark-Spalte und einen Primärschlüssel auswählen:
- Für den PostgreSQL-Connector ist eine Watermark-Spalte erforderlich, um Änderungen in der Quelltabelle zu verfolgen.
- Wählen Sie eine Wasserzeichenspalte aus, die jedes Mal aktualisiert wird, wenn eine Zeile geändert wird. Wir empfehlen Spalten, die der Spalte
UPDATED_AToderLAST_MODIFIEDähneln.
- Wählen Sie eine Wasserzeichenspalte aus, die jedes Mal aktualisiert wird, wenn eine Zeile geändert wird. Wir empfehlen Spalten, die der Spalte
Der Primärschlüssel kann aus einer oder mehreren Spalten in Ihrer Tabelle bestehen, die der PostgreSQL-Connector benötigt, um zu bestimmen, ob eine Zeile eingefügt oder aktualisiert werden muss.
Wählen Sie Spalten aus, die Werte ungleich Null enthalten, die in allen Zeilen der Tabelle eindeutig sind. Wir empfehlen Spalten, die systemgenerierte Kennungen, eindeutige Referenzcodes (z. B. automatisch inkrementierende IDs) oder unveränderliche zeitbasierte Sequenz-IDs enthalten.
Um potenziellen Datenverlust oder Datenbeschädigung zu vermeiden, müssen die von Ihnen ausgewählten Primärschlüsselspalten eindeutige Werte enthalten. Wenn Sie Zweifel an der Eindeutigkeit der ausgewählten Primärschlüsselspalte haben, empfehlen wir, stattdessen den Schreibmodus „Anhängen“ zu verwenden.
Inkrementelles Aufnahmeverhalten
Wenn Sie Änderungen am Tabellenschema in Ihrer Datenquelle vornehmen, werden inkrementelle Datenübertragungen aus diesen Tabellen in BigQuery auf folgende Weise berücksichtigt:
| Änderungen an der Datenquelle | Verhalten bei der inkrementellen Aufnahme |
|---|---|
| Neue Spalte hinzufügen | Der BigQuery-Zieltabelle wird eine neue Spalte hinzugefügt. Alle vorherigen Einträge für diese Spalte haben Nullwerte. |
| Spalte löschen | Die gelöschte Spalte verbleibt in der BigQuery-Zieltabelle. Neue Einträge in dieser gelöschten Spalte werden mit Nullwerten gefüllt. |
| Datentyp einer Spalte ändern | Der Connector unterstützt nur
Datentypkonvertierungen, die von der ALTER COLUMN-DDL-Anweisung unterstützt werden.
Bei jeder anderen Datentypkonvertierung schlägt die Datenübertragung fehl.
Wenn Probleme auftreten, empfehlen wir, eine neue Übertragungskonfiguration zu erstellen. |
| Spalte umbenennen | Die ursprüngliche Spalte bleibt in der BigQuery-Zieltabelle unverändert, während der Zieltabelle eine neue Spalte mit dem aktualisierten Namen hinzugefügt wird. |
Datentypzuordnung
In der folgenden Tabelle werden PostgreSQL-Datentypen den entsprechenden BigQuery-Datentypen zugeordnet:
| PostgreSQL-Datentyp | BigQuery-Datentyp | Aktualisierter BigQuery-Datentyp |
|---|---|---|
array |
STRING |
|
bigint |
INTEGER |
|
bigserial |
INTEGER |
|
bit(n) |
STRING |
|
bit varying(n) |
STRING |
|
boolean |
BOOLEAN |
|
box |
STRING |
|
bytea |
BYTES |
|
character |
STRING |
|
character varying |
STRING |
|
cidr |
STRING |
|
circle |
STRING |
|
circularstring |
STRING |
|
compoundcurve |
STRING |
|
curvepolygon |
STRING |
|
date |
DATE |
|
double precision |
FLOAT |
|
enum |
STRING |
|
geometrycollection |
STRING |
|
inet |
STRING |
|
integer |
INTEGER |
|
interval |
STRING |
|
json |
STRING |
JSON |
jsonb |
STRING |
JSON |
line |
STRING |
|
linestring |
STRING |
|
lseg |
STRING |
|
macaddr |
STRING |
|
macaddr8 |
STRING |
|
money |
STRING |
|
multicurve |
STRING |
|
multilinestring |
STRING |
|
multipoint |
STRING |
|
multipolygon |
STRING |
|
multisurface |
STRING |
|
numeric(precision, scale)/decimal(precision, scale) |
NUMERIC |
|
path |
STRING |
|
point |
STRING |
|
polygon |
STRING |
|
polyhedralsurface |
STRING |
|
range |
STRING
|
|
real |
FLOAT |
|
serial |
INTEGER |
|
smallint |
INTEGER |
|
smallserial |
INTEGER |
|
text |
STRING |
|
time [ (p) ] [ without timezone ] |
TIMESTAMP |
|
time [ (p) ] with time zone |
TIMESTAMP |
|
tin |
STRING |
|
timestamp [ (p) ] [ without timezone ] |
TIMESTAMP |
DATETIME |
timestamp [ (p) ] with time zone |
TIMESTAMP |
|
triangle |
STRING |
|
tsquery |
STRING |
|
tsvector |
STRING |
|
uuid |
STRING |
|
xml |
STRING |
Preise
Preisinformationen zu PostgreSQL-Übertragungen finden Sie unter Preise für Data Transfer Service.