Externe BigLake-Tabellen für Delta Lake erstellen
Mit BigLake können Sie über eine detaillierte Zugriffssteuerung auf Delta Lake-Tabellen zugreifen. Delta Lake ist ein von Databricks entwickeltes Open-Source-Tabellenformat zur Speicherung tabellarischer Daten, das Datentabellen im Petabytebereich unterstützt.
BigQuery unterstützt die folgenden Funktionen für Delta Lake-Tabellen:
- Zugriffsdelegation: Strukturierte Daten in externen Datenspeichern mit Zugriffsdelegation abfragen. Durch die Zugriffsdelegation wird der Zugriff auf die Delta Lake-Tabelle vom Zugriff auf den zugrunde liegenden Datenspeicher entkoppelt.
- Detaillierte Zugriffssteuerung: Detaillierte Sicherheit auf Tabellenebene erzwingen, einschließlich Sicherheit auf Zeilenebene und Spaltenebene. Für Delta Lake-Tabellen, die auf Cloud Storage basieren, können Sie auch die dynamische Datenmaskierung verwenden.
- Schema-Evolution: Schemaänderungen in den Delta Lake-Tabellen werden automatisch erkannt. Änderungen am Schema werden in die BigQuery-Tabelle übernommen.
Delta Lake-Tabellen unterstützen alle BigLake-Features, wenn Sie sie als BigLake-Tabellen konfigurieren.
Hinweise
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
-
In the Trusted Cloud console, activate Cloud Shell.
Sorgen Sie dafür, dass Sie ein BigQuery-Dataset haben.
Prüfen Sie, ob Ihre Version des Google Cloud SDK 366.0.0 oder höher ist:
gcloud version
Erstellen Sie eine Cloud-Ressourcenverbindung anhand der externen Datenquelle und gewähren Sie dieser Verbindung Zugriff auf Cloud Storage. Wenn Sie nicht die erforderlichen Berechtigungen zum Erstellen einer Verbindung haben, bitten Sie Ihren BigQuery-Administrator, eine Verbindung zu erstellen und die Verbindung mit Ihnen zu teilen.
bigquery.tables.create
bigquery.connections.delegate
- Rolle „BigQuery-Betrachter“ (
roles/bigquery.viewer
) - Rolle „BigQuery-Verbindungsnutzer“ (
roles/bigquery.connectionUser
) - Zugriff auf den Cloud Storage-Bucket, der diese Daten enthält
- PROJECT_ID: ID des Projekts, in dem Sie die Delta Lake-Tabelle erstellen möchten
- DATASET: BigQuery-Dataset, das die Delta Lake-Tabelle enthalten soll
- DELTALAKE_TABLE_NAME: Name Ihrer Delta Lake-Tabelle
- REGION: Region, die die Verbindung zum Erstellen der Delta Lake-Tabelle enthält, z. B.
us
CONNECTION_ID: die Verbindungs-ID, z. B.
myconnection
.Wenn Sie sich Verbindungsdetails in der Trusted Cloud Console ansehen, ist die Verbindungs-ID der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter „Verbindungs-ID“ angezeigt wird, z. B.
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH: Delta Lake-Tabellenpräfix
- DEFINITION_FILE: der Pfad zur Tabellendefinitionsdatei.
- PROJECT_ID: ID des Projekts, in dem Sie die Delta Lake-Tabelle erstellen möchten
- DATASET: BigQuery-Dataset, das die Delta Lake-Tabelle enthalten soll
- DELTALAKE_TABLE_NAME: Name Ihrer Delta Lake-Tabelle
- PROJECT_ID: ID des Projekts, in dem Sie die Delta Lake-Tabelle erstellen möchten
- REGION: Region, die die Verbindung zum Erstellen der Delta Lake-Tabelle enthält, z. B.
us
CONNECTION_ID: die Verbindungs-ID, z. B.
myconnection
.Wenn Sie sich Verbindungsdetails in der Trusted Cloud Console ansehen, ist die Verbindungs-ID der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter „Verbindungs-ID“ angezeigt wird, z. B.
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH: Delta Lake-Tabellenpräfix
DELTALAKE_TABLE_NAME: Name Ihrer Delta Lake-Tabelle
DATASET: BigQuery-Dataset, das die Delta Lake-Tabelle enthalten soll
- Nutzer erhalten möglicherweise
ACCESS_DENIED
-Fehler, wenn sie versuchen, auf Dateien in Cloud Storage zuzugreifen. - Features wie die detaillierte Zugriffssteuerung sind nur in Delta Lake-BigLake-Tabellen verfügbar.
- PROJECT_ID: ID des Projekts, in dem Sie die Delta Lake-Tabelle erstellen möchten
- DATASET: BigQuery-Dataset, das die Delta Lake-Tabelle enthalten soll
- DELTALAKE_TABLE_NAME: Name Ihrer Delta Lake-Tabelle
- DELTA_TABLE_GCS_BASE_PATH: Delta Lake-Tabellenpräfix
- PROJECT_ID: ID des Projekts, in dem Sie die Delta Lake-Tabelle erstellen möchten
- REGION: Region, die die Verbindung zum Erstellen der Delta Lake-Tabelle enthält, z. B.
us
CONNECTION_ID: die Verbindungs-ID, z. B.
myconnection
.Wenn Sie sich Verbindungsdetails in der Trusted Cloud Console ansehen, ist die Verbindungs-ID der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter „Verbindungs-ID“ angezeigt wird, z. B.
projects/myproject/locations/connection_location/connections/myconnection
.DELTALAKE_TABLE_NAME: Name Ihrer Delta Lake-Tabelle
DATASET: BigQuery-Dataset, das die Delta Lake-Tabelle enthalten soll
- Unterstützt die Delta Lake-Leserversion 3 mit Löschvektoren für relative Pfade und Spaltenzuordnung.
- Delta Lake V2-Checkpoints werden nicht unterstützt.
- Sie müssen die Reader-Version in der letzten Logeintragdatei angeben. Neue Tabellen müssen beispielsweise
00000..0.json
enthalten. - Change Data Capture-Vorgänge (CDC) werden nicht unterstützt. Alle vorhandenen CDC-Vorgänge werden ignoriert.
- Das Schema wird automatisch erkannt. Das Ändern des Schemas mit BigQuery wird nicht unterstützt.
- Die Namen von Tabellenspalten müssen den Einschränkungen für BigQuery-Spaltennamen entsprechen.
- Materialisierte Ansichten werden nicht unterstützt.
- Die Read API wird für Delta Lake nicht unterstützt.
Prüfen Sie, ob Sie Delta Lake BigLake-Tabellen mit einer Verbindung verwenden.
Nutzer haben die erforderliche Berechtigung.
Verwenden Sie Delta Lake-Dienstprogramme, um die zugrunde liegenden Datendateien zu komprimieren und redundante Dateien wie Daten und Metadaten zu entfernen.
Achten Sie darauf, dass
delta.checkpoint.writeStatsAsStruct
auftrue
eingestellt ist.Achten Sie darauf, dass Variablen, die häufig in Prädikatklauseln verwendet werden, in Partitionierungsspalten enthalten sind.
Erforderliche Rollen
Die folgenden Berechtigungen sind zum Erstellen einer Delta Lake-Tabelle erforderlich:
Die vordefinierte IAM-Rolle „Identity and Access Management“ (BigQuery) (roles/bigquery.admin
) enthält diese Berechtigungen.
Wenn Sie in dieser Rolle kein Hauptkonto darstellen, bitten Sie Ihren Administrator, Ihnen diese Berechtigungen zu gewähren oder die Delta Lake-Tabelle für Sie zu erstellen.
Damit BigQuery-Nutzer die Tabelle abfragen können, muss das mit der Verbindung verknüpfte Dienstkonto außerdem die folgenden Berechtigungen und den folgenden Zugriff haben:
Weitere Informationen zu Rollen und Berechtigungen für das Identity and Access Management in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.
Tabellen mit Delta Lake erstellen
So erstellen Sie Delta Lake-Tabellen:
SQL
Verwenden Sie die Anweisung CREATE EXTERNAL TABLE
, um die Delta Lake-Tabelle zu erstellen:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
format ="DELTA_LAKE",
uris=['DELTA_TABLE_GCS_BASE_PATH']);
Ersetzen Sie die folgenden Werte:
bq
Verwenden Sie in einer Befehlszeilenumgebung den Befehl bq mk
, um die Delta Lake-Tabelle zu erstellen:
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Ersetzen Sie die folgenden Werte:
REST
Verwenden Sie die BigQuery API, um eine Delta Lake-Tabelle durch den Aufruf der API-Methode tables.insert
zu erstellen:
REQUEST='{
"autodetect": true,
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
},
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'
echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true
Ersetzen Sie die folgenden Werte:
Wenn Sie Delta Lake-Tabellen erstellen, wird das Delta Lake-Präfix als URI für die Tabelle verwendet. Wenn eine Tabelle beispielsweise Protokolle im Bucket gs://bucket/warehouse/basictable/_delta_log
enthält, lautet der Tabellen-URI gs://bucket/warehouse/basictable
. Wenn Sie Abfragen für die Delta Lake-Tabelle ausführen, liest BigQuery Daten unter dem Präfix, um die aktuelle Version der Tabelle zu ermitteln, und berechnet dann die Metadaten und die Dateien für die Tabelle.
Sie können zwar externe Delta Lake-Tabellen ohne Verbindung erstellen, dies wird jedoch aus den folgenden Gründen nicht empfohlen:
Delta Lake-Tabellen aktualisieren
So aktualisieren (erfrischen) Sie das Schema von Delta Lake-Tabellen:
bq
Verwenden Sie in einer Befehlszeilenumgebung den Befehl bq update
, um das Schema der Delta Lake-Tabelle zu aktualisieren (aufzufrischen):
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Ersetzen Sie die folgenden Werte:
REST
Verwenden Sie die BigQuery API, um eine Delta Lake-Tabelle durch den Aufruf der API-Methode tables.patch
zu aktualisieren:
REQUEST='{
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"autodetect": true
}
}'
echo $REQUEST |curl -X PATCH -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables/DELTALAKE_TABLE_NAME?autodetect_schema=true
Ersetzen Sie die folgenden Werte:
Delta Lake-Tabellen abfragen
Nachdem Sie eine Delta Lake-BigLake-Tabelle erstellt haben, können Sie sie mit der GoogleSQL-Syntax abfragen, so als wäre sie eine Standard-BigQuery-Tabelle. Beispiel:
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
Weitere Informationen finden Sie unter Cloud Storage-Daten in BigLake-Tabellen abfragen.
Für den Verbindungsaufbau zum Datenspeicher wird eine externe Verbindung verwendet, die mit einem Dienstkonto verknüpft ist. Da das Dienstkonto Daten aus dem Datenspeicher abruft, benötigen Nutzer nur Zugriff auf die Delta Lake-Tabelle.
Datenabgleich
BigQuery konvertiert Delta Lake-Datentypen in BigQuery-Datentypen, wie in der folgenden Tabelle dargestellt:
Delta Lake-Typ | BigQuery-Typ |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC oder BIG_NUMERIC , je nach Precision |
date |
DATE |
time |
TIME |
timestamp (not partition column) |
TIMESTAMP |
timestamp (partition column) |
DATETIME |
string |
STRING |
binary |
BYTES |
array<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
Beschränkungen
Für Delta Lake-Tabellen gelten BigLake-Tabelleneinschränkungen sowie die folgenden Einschränkungen:
Fehlerbehebung
In diesem Abschnitt finden Sie Hilfe zu Delta Lake BigLake-Tabellen. Allgemeine Hilfe zur Fehlerbehebung bei BigQuery-Abfragen finden Sie unter Probleme mit Abfragen beheben.
Zeitüberschreitung bei Abfragen und Ressourcenfehler
Sehen Sie im Protokollverzeichnis (gs://bucket/warehouse/basictable/_delta_log
) der Delta Lake-Tabelle nach JSON-Dateien mit einer Versionsnummer, die größer als der vorherige Checkpoint ist. Sie können die Versionsnummer abrufen, indem Sie das Verzeichnis auflisten oder die Datei _delta_log/_last_checkpoint untersuchen.
JSON-Dateien, die größer als 10 MiB sind, können die Tabellenerweiterung verlangsamen, was zu Zeitüberschreitungen und Ressourcenproblemen führen kann. Verwenden Sie den folgenden Befehl, um dieses Problem zu beheben und einen neuen Prüfpunkt zu erstellen, damit beim Ausführen von Abfragen das Lesen der JSON-Dateien übersprungen wird:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");
Nutzer können dann mit demselben Befehl das Checkpoint-Intervall entweder auf den Standardwert 10 oder auf einen Wert zurücksetzen, der dafür sorgt, dass zwischen den Checkpoints nicht mehr als 50 MB an JSON-Dateien vorhanden sind.
Ungültiger Spaltenname
Achten Sie darauf, dass die Spaltenzuordnung für die Delta Lake-Tabelle aktiviert ist. Die Spaltenzuordnung wird mit Reader-Version 2 oder höher unterstützt. Legen Sie für Reader Version 1 „delta.columnMapping.mode“ mit dem folgenden Befehl auf „name“ fest:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");
Wenn der ungültige Spaltenname den Einschränkungen für flexible Spaltennamen entspricht, wenden Sie sich an Cloud Customer Care oder biglake-help@google.com.
Fehler „Zugriff verweigert“
So diagnostizieren Sie Probleme mit Delta Lake BigLake-Tabellen:
Leistung
So verbessern Sie die Abfrageleistung:
Bei großen Datasets (über 100 TB) sind möglicherweise zusätzliche Konfigurationen und Funktionen erforderlich. Wenn das Problem durch die oben genannten Schritte nicht behoben wird, wenden Sie sich an den Kundensupport oder an biglake-help@google.com, insbesondere bei Datasets mit einer Größe von mehr als 100 TB.