Apache Iceberg BigLake-Tabellen erstellen
Mit BigLake können Sie über eine detailliertere Zugriffssteuerung auf Iceberg-Tabellen zugreifen. Dazu müssen Sie zuerst eine BigLake-Iceberg-Tabelle erstellen.
Apache Iceberg ist ein Open-Source-Tabellenformat, das Datentabellen im Petabytebereich unterstützt. Mit der offenen Spezifikation von Iceberg können Sie mehrere Abfrage-Engines auf einer einzigen Kopie von Daten ausführen, die in einem Objektspeicher gespeichert sind.
Als BigQuery-Administrator können Sie die Zugriffssteuerung auf Zeilen- und Spaltenebene erzwingen, einschließlich der Datenmaskierung für Tabellen. Informationen zum Einrichten der Zugriffssteuerung auf Tabellenebene finden Sie unter Zugriffssteuerungsrichtlinien einrichten. Tabellenzugriffsrichtlinien werden auch erzwungen, wenn Sie die BigQuery Storage API als Datenquelle für die Tabelle in Dataproc und serverlosem Spark verwenden. BigLake-Tabellen bieten zusätzliche Integrationen in andere BigQuery-Dienste. Eine vollständige Liste der verfügbaren Integrationen finden Sie unter Einführung in BigLake-Tabellen.
Sie können Iceberg-BigLake-Tabellen auf folgende Arten erstellen:
Mit BigLake Metastore (für Google Cloud empfohlen). BigLake Metastore ist ein benutzerdefinierter Iceberg-Katalog. Die Verwendung von BigLake Metastore wird für Google Cloud empfohlen, da es die Synchronisierung von Tabellen zwischen Spark- und BigQuery-Arbeitslasten ermöglicht. Dazu können Sie ein in BigQuery gespeichertes Verfahren für Apache Spark verwenden, um BigLake Metastore zu initialisieren und die BigLake Iceberg-Tabelle zu erstellen. Für Schemaaktualisierungen muss jedoch weiterhin eine Aktualisierungsabfrage in BigQuery ausgeführt werden.
Mit AWS Glue Data Catalog (für AWS empfohlen). AWS Glue ist die empfohlene Methode für AWS, da es sich um ein zentrales Metadaten-Repository handelt, in dem Sie die Struktur und den Speicherort Ihrer in verschiedenen AWS-Diensten gespeicherten Daten definieren. Außerdem bietet es Funktionen wie die automatische Schemaerkennung und Integration in AWS-Analysetools.
Mit Iceberg-JSON-Metadatendateien (für Azure empfohlen). Wenn Sie eine Eisberg-JSON-Metadatendatei verwenden, müssen Sie die neueste Metadatendatei manuell aktualisieren, wenn Tabellenaktualisierungen vorhanden sind. Sie können eine gespeicherte BigQuery-Prozedur für Apache Spark verwenden, um BigLake Iceberg-Tabellen zu erstellen, die auf eine Iceberg-Metadatendatei verweisen. Wenn Sie dies vermeiden möchten, können Sie BigLake Metastore für Google Cloud oder AWS Glue Data Catalog für AWS verwenden.
Eine vollständige Liste der Beschränkungen finden Sie unter Einschränkungen.
Vorbereitung
Enable the BigQuery Connection, BigQuery Reservation, and BigLake APIs.
Wenn Sie eine gespeicherte Prozedur für Apache Spark in BigQuery verwenden, um BigLake-Iceberg-Tabellen zu erstellen, müssen Sie die folgenden Schritte ausführen:
Erstellen Sie einen Cloud Storage-Bucket, um die Metadaten und Datendateien von Iceberg BigLake in Cloud Storage zu speichern. Sie müssen eine Verbindung zu Ihrem Cloud Storage-Bucket herstellen, um auf Metadatendateien zuzugreifen. Führen Sie dazu die folgenden Schritte aus:
Wenn Sie BigLake Metastore verwenden, installieren Sie den entsprechenden benutzerdefinierten Iceberg-Katalog für Apache Spark. Wählen Sie die Version des benutzerdefinierten Katalogs aus, die der von Ihnen verwendeten Iceberg-Version am besten entspricht.
Iceberg 1.5.0
: gs://spark-lib/biglake/biglake-catalog-iceberg1.5.0-0.1.1-with-dependencies.jarIceberg 1.2.0
: gs://spark-lib/biglake/biglake-catalog-iceberg1.2.0-0.1.1-with-dependencies.jarIceberg 0.14.0
: gs://spark-lib/biglake/biglake-catalog-iceberg0.14.0-0.1.1-with-dependencies.jar
Erforderliche Rollen
Bitten Sie Ihren Administrator, dem Aufrufer der BigLake API die folgenden IAM-Rollen für das Projekt zuzuweisen, um sicherzustellen, dass der Aufrufer der BigLake API die erforderlichen Berechtigungen zum Erstellen einer BigLake-Tabelle hat.
-
BigQuery-Administrator (
roles/bigquery.admin
) -
BigLake-Administrator (
roles/biglake.admin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Erstellen einer BigLake-Tabelle erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Erstellen einer BigLake-Tabelle erforderlich:
-
bigquery.tables.create
-
bigquery.connections.delegate
-
bigquery.jobs.create
Ihr Administrator kann dem Aufrufer der BigLake API möglicherweise auch diese Berechtigungen mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erteilen.
Darüber hinaus muss das mit der Verbindung verknüpfte Dienstkonto die Rolle „BigLake-Betrachter“ (roles/biglake.viewer
) und Zugriff auf den Cloud Storage-Bucket haben, der diese Daten enthält, damit BigQuery-Nutzer die Tabelle abfragen können.
Zum Erstellen von BigLake-Iceberg-Tabellen mit BigLake Metastore ändert sich der Aufrufer der BigLake API. Sie müssen dem Dataproc- oder Spark-Dienstkonto Zugriff auf den Cloud Storage-Bucket gewähren, der diese Daten enthält:
Wenn Sie Spark in Dataproc ausführen, lautet der Aufrufer in Dataproc das Dataproc-Dienstkonto.
Wenn Sie Spark-Prozeduren in BigQuery ausführen, ist der Aufrufer ein Spark-Verbindungsdienstkonto.
Tabellen mit BigLake Metastore erstellen
Wir empfehlen, Iceberg-BigLake-Tabellen mit BigLake Metastore zu erstellen. Sie können diese Tabellen mit Apache Spark erstellen. Eine bequeme Methode ist die Verwendung von gespeicherten Prozeduren für Spark in BigQuery, indem Sie die folgenden Schritte ausführen:
Rufen Sie die Seite BigQuery auf.
Klicken Sie im Bereich Explorer auf die Verbindung in dem Projekt, in dem Sie die Verbindungsressource erstellt haben.
Zum Erstellen einer gespeicherten Prozedur für Apache Spark klicken Sie auf
Gespeicherte Prozedur erstellen.Ändern Sie im Abfrageeditor den Beispielcode zum Initialisieren von BigLake Metastore und zum Erstellen einer Iceberg BigLake-Tabelle mithilfe der angezeigten Anweisung
CREATE PROCEDURE
:# Creates a stored procedure that initializes BLMS and database. # Creates a table in the database and populates a few rows of data. CREATE OR REPLACE PROCEDURE iceberg_demo.iceberg_setup_3_3 () WITH CONNECTION `PROCEDURE_CONNECTION_PROJECT_ID.PROCEDURE_CONNECTION_REGION.PROCEDURE_CONNECTION_ID` OPTIONS(engine="SPARK", jar_uris=["gs://spark-lib/biglake/biglake-catalog-iceberg1.2.0-0.1.0-with-dependencies.jar"], properties=[ ("spark.jars.packages","org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.2.0"), ("spark.sql.catalog.CATALOG", "org.apache.iceberg.spark.SparkCatalog"), ("spark.sql.catalog.CATALOG.catalog-impl", "org.apache.iceberg.gcp.biglake.BigLakeCatalog"), ("spark.sql.catalog.CATALOG.hms_uri", "HMS_URI"), ("spark.sql.catalog.CATALOG.gcp_project", "PROJECT_ID"), ("spark.sql.catalog.CATALOG.gcp_location", "LOCATION"), ("spark.sql.catalog.CATALOG.blms_catalog", "CATALOG"), ("spark.sql.catalog.CATALOG.warehouse", "DATA_WAREHOUSE_URI") ] ) LANGUAGE PYTHON AS R''' from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("BigLake Iceberg Example") \ .enableHiveSupport() \ .getOrCreate() spark.sql("CREATE NAMESPACE IF NOT EXISTS CATALOG;") spark.sql("CREATE DATABASE IF NOT EXISTS CATALOG.CATALOG_DB;") spark.sql("DROP TABLE IF EXISTS CATALOG.CATALOG_DB.CATALOG_TABLE;") # Create a BigLake Metastore table and a BigQuery Iceberg table. spark.sql("CREATE TABLE IF NOT EXISTS CATALOG.CATALOG_DB.CATALOG_TABLE (id bigint, demo_name string) USING iceberg TBLPROPERTIES(bq_table='BQ_DATASET.BQ_TABLE', bq_connection='TABLE_CONNECTION_PROJECT_ID.TABLE_CONNECTION_REGION.TABLE_CONNECTION_ID'); ") # Copy a Hive Metastore table to BigLake Metastore. Can be used together with # TBLPROPERTIES `bq_table` to create a BigQuery Iceberg table. spark.sql("CREATE TABLE CATALOG.CATALOG_DB.CATALOG_TABLE (id bigint, demo_name string) USING iceberg TBLPROPERTIES(hms_table='HMS_DB.HMS_TABLE');") ''';
Ersetzen Sie dabei Folgendes:
PROCEDURE_CONNECTION_PROJECT_ID
: Das Projekt, das die Verbindung zum Ausführen von Spark-Verfahren enthält, z. B.myproject
.PROCEDURE_CONNECTION_REGION
: Region, die die Verbindung zum Ausführen von Spark-Prozeduren enthält, z. B.us
.PROCEDURE_CONNECTION_ID
: die Verbindungs-ID, z. B.myconnection
.Wenn Sie sich Verbindungsdetails in der Google 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
.CATALOG
: Der Name des Iceberg-Katalogs, der für BigLake Metastore erstellt werden soll.Der Standardwert ist
iceberg
.HMS_URI
: Wenn Sie vorhandene Hive-Metastore-Tabellen in BigLake Metastore kopieren möchten, geben Sie einen Hive-Metastore-URI an.Beispiel:
thrift://localhost:9083
.PROJECT_ID
: Die Projekt-ID, in der Sie den BigLake Metastore-Katalog erstellen möchten.Iceberg BigLake-Tabellen werden ebenfalls im selben Projekt erstellt.
LOCATION
: Der Standort, an dem Sie die BigLake Metastore-Instanz erstellen möchten.BigQuery kann nur auf BigLake-Metastore-Kataloge zugreifen, die am selben Standort gespeichert sind.
DATA_WAREHOUSE_URI
: Der Cloud Storage-Bucket-URI, den Sie zum Speichern der Metadaten- und Datendateien aus Iceberg erstellt haben.Beispiel:
gs://mybucket/iceberg-warehouse
.CATALOG_DB
: Der Name der Datenbank, die Sie in BigLake Metastore erstellen möchten.Diese Datenbank entspricht dem BigQuery-Dataset, das die Iceberg BigLake-Tabelle enthält.
CATALOG_TABLE
: Der Name der Tabelle, die Sie in BigLake Metastore erstellen möchten.Diese Tabelle entspricht der Iceberg BigLake-Tabelle, die Sie erstellen möchten.
BQ_DATASET
ist das BigQuery-Dataset, das die Iceberg BigLake-Tabelle enthält.BQ_TABLE
: Die Iceberg BigLake-Tabelle, die Sie erstellen möchten.TABLE_CONNECTION_PROJECT_ID
: Das Projekt, das die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.myproject
TABLE_CONNECTION_REGION
: Die Region, die die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.us
.TABLE_CONNECTION_ID
: die Verbindungs-ID, z. B.myconnection
.Wenn Sie sich Verbindungsdetails in der Google 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
.Das mit der Verbindung verknüpfte Dienstkonto muss
roles/biglake.viewer
haben, damit BigQuery-Nutzer die Tabelle abfragen können.HMS_DB
: Wenn Sie vorhandene Hive-Metastore-Tabellen in BigLake Metastore kopieren möchten, geben Sie eine Hive Metastore-Datenbank an.HMS_TABLE
: Wenn Sie vorhandene Hive-Metastore-Tabellen in BigLake Metastore kopieren möchten, geben Sie eine Hive-Metastore-Tabelle an.
Weitere Informationen zu Iceberg-Katalogkonfigurationen finden Sie unter Spark-Kataloge.
Klicken Sie auf Ausführen, um die gespeicherte Prozedur auszuführen. Weitere Informationen zu Gespeichertes Spark-Verfahren aufrufen. In BigQuery wird eine Iceberg BigLake-Tabelle erstellt.
Tabellen mit einer Metadatendatei erstellen
Sie können Iceberg-BigLake-Tabellen mit einer JSON-Metadatendatei erstellen. Dies ist jedoch nicht die empfohlene Methode, da Sie den URI der JSON-Metadatendatei manuell aktualisieren müssen, um die BigLake-Tabelle auf dem neuesten Stand zu halten. Wenn der URI nicht aktuell ist, können Abfragen in BigQuery fehlschlagen oder zu anderen Ergebnissen von anderen Abfrage-Engines führen, die direkt einen Iceberg-Katalog verwenden. Wenn Sie dies vermeiden möchten, verweisen Sie beim Erstellen einer Iceberg BigLake-Tabelle auf eine BigLake-Metastore-Instanz.
Iceberg-Tabellenmetadatendateien werden in dem Cloud Storage-Bucket erstellt, den Sie beim Erstellen einer Iceberg-Tabelle mit Spark angeben.
Wählen Sie eine der folgenden Optionen aus:
SQL
Verwenden Sie die Anweisung CREATE EXTERNAL TABLE
. Im folgenden Beispiel wird eine BigLake-Tabelle mit dem Namen myexternal-table
erstellt:
CREATE EXTERNAL TABLE myexternal-table WITH CONNECTION `myproject.us.myconnection` OPTIONS ( format = 'ICEBERG', uris = ["gs://mybucket/mydata/mytable/metadata/iceberg.metadata.json"] )
Ersetzen Sie den Wert uris
durch die neueste JSON-Metadatendatei für einen bestimmten Tabellen-Snapshot.
Sie können die Option Partitionsfilter anfordern aktivieren, indem Sie das Flag require_partition_filter
festlegen.
bq
In einer Befehlszeilenumgebung verwenden Sie den Befehl bq mk --table
mit dem Decorator @connection
, um die Verbindung anzugeben, die am Ende des Parameters --external_table_definition
verwendet werden soll. :
Verwenden Sie --require_partition_filter
, um den Filter "Partitionsfilter anfordern" zu aktivieren.
bq mk
--table
--external_table_definition=TABLE_FORMAT=URI@projects/CONNECTION_PROJECT_ID/locations/CONNECTION_REGION/connections/CONNECTION_ID
PROJECT_ID:DATASET.EXTERNAL_TABLE
Ersetzen Sie dabei Folgendes:
TABLE_FORMAT
: Das Format der Tabelle, die Sie erstellen möchten.In diesem Fall ist das
ICEBERG
.URI
: die neueste JSON-Metadatendatei für einen bestimmten Tabellen-SnapshotBeispiel:
gs://mybucket/mydata/mytable/metadata/iceberg.metadata.json
.Der URI kann auch auf einen externen Cloud-Speicherort verweisen. wie Amazon S3 oder Azure Blob Storage.
- Beispiel für AWS:
s3://mybucket/iceberg/metadata/1234.metadata.json
. - Beispiel für Azure:
azure://mystorageaccount.blob.core.windows.net/mycontainer/iceberg/metadata/1234.metadata.json
.
- Beispiel für AWS:
CONNECTION_PROJECT_ID
: Das Projekt, das die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.myproject
CONNECTION_REGION
: Die Region, die die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.us
.CONNECTION_ID
: Die ID der Tabellenverbindung, z. B.myconnection
Wenn Sie sich Verbindungsdetails in der Google 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
.DATASET
: Der Name des BigQuery-Datasets, in dem Sie eine Tabelle erstellen möchtenBeispiel:
mydataset
.EXTERNAL_TABLE
: Der Name der Tabelle, die Sie erstellen möchtenBeispiel:
mytable
.
Tabellenmetadaten aktualisieren
Wenn Sie eine JSON-Metadatendatei zum Erstellen von BigLake-Iceberg-Tabellen verwenden, aktualisieren Sie die Tabellendefinition auf die neuesten Tabellenmetadaten. Wählen Sie eine der folgenden Optionen, um das Schema oder die Metadatendatei zu aktualisieren:
bq
Erstellen Sie eine Tabellendefinitionsdatei.
bq mkdef --source_format=ICEBERG \ "URI" > TABLE_DEFINITION_FILE
Führen Sie den Befehl
bq update
mit dem Flag--autodetect_schema
aus:bq update --autodetect_schema --external_table_definition=TABLE_DEFINITION_FILE PROJECT_ID:DATASET.TABLE
Ersetzen Sie dabei Folgendes:
URI
: Ihr Cloud Storage-URI mit der neuesten JSON-MetadatendateiBeispiel:
gs://mybucket/us/iceberg/mytable/metadata/1234.metadata.json
.TABLE_DEFINITION_FILE
: Der Name der Datei, die das Tabellenschema enthältPROJECT_ID
: Die Projekt-ID mit der Tabelle, die Sie aktualisieren möchtenDATASET
ist das Dataset mit der Tabelle, die Sie aktualisieren möchten.TABLE
: Die Tabelle, von der Sie einen Snapshot erstellen möchten
API
Verwenden Sie die Methode tables.patch
und setzen Sie das Attribut autodetect_schema
auf true
:
PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables/TABLE?autodetect_schema=true
Ersetzen Sie dabei Folgendes:
PROJECT_ID
: die Projekt-ID, die die Tabelle enthält, die Sie aktualisieren möchtenDATASET
ist das Dataset mit der Tabelle, die Sie aktualisieren möchten.TABLE
: Die Tabelle, von der Sie einen Snapshot erstellen möchten
Geben Sie im Anfragetext die aktualisierten Werte für die folgenden Felder an:
{ "externalDataConfiguration": { "sourceFormat": "ICEBERG", "sourceUris": [ "URI" ] }, "schema": null }'
Ersetzen Sie URI
durch die neueste Iceberg-Metadatendatei. Beispiel: gs://mybucket/us/iceberg/mytable/metadata/1234.metadata.json
Zugriffssteuerungsrichtlinien einrichten
Sie können den Zugriff auf BigLake-Tabellen auf verschiedene Arten steuern:
Eine Anleitung zum Einrichten der Sicherheit auf Spaltenebene finden Sie im Sicherheitsleitfaden auf Spaltenebene.
Eine Anleitung zum Einrichten der Datenmaskierung finden Sie im Anleitung zur Datenmaskierung.
Eine Anleitung zum Einrichten der Sicherheit auf Zeilenebene finden Sie im Sicherheitsleitfaden auf Zeilenebene.
Angenommen, Sie möchten den Zeilenzugriff für die Tabelle mytable
im Dataset mydataset
beschränken:
+---------+---------+-------+ | country | product | price | +---------+---------+-------+ | US | phone | 100 | | JP | tablet | 300 | | UK | laptop | 200 | +---------+---------+-------+
Sie können einen Filter auf Zeilenebene für Kim (kim@example.com
) erstellen, der den Zugriff auf Zeilen beschränkt, in denen country
gleich US
ist.
CREATE ROW ACCESS POLICY only_us_filter ON mydataset.mytable GRANT TO ('user:kim@example.com') FILTER USING (country = 'US');
Dann führt vCenter die folgende Abfrage aus:
SELECT * FROM projectid.mydataset.mytable;
Die Ausgabe zeigt nur die Zeilen, in denen country
gleich US
ist:
+---------+---------+-------+ | country | product | price | +---------+---------+-------+ | US | phone | 100 | +---------+---------+-------+
BigLake-Tabellen abfragen
Weitere Informationen finden Sie unter Iceberg-Daten abfragen.
Datenabgleich
BigQuery konvertiert Iceberg-Datentypen in BigQuery-Datentypen, wie in der folgenden Tabelle dargestellt:
Datentyp „Iceberg“ | BigQuery-Datentyp |
---|---|
boolean |
BOOL |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC or BIG_NUMERIC depending on precision |
date |
DATE |
time |
TIME |
timestamp |
DATETIME |
timestamptz |
TIMESTAMP |
string |
STRING |
uuid |
BYTES |
fixed(L) |
BYTES |
binary |
BYTES |
list<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
Beschränkungen
Für BigLake-Iceberg-Tabellen gelten BigLake-Tabelleneinschränkungen sowie die folgenden Einschränkungen:
Die Konfiguration
copy-on-write
wird unterstützt, die Konfigurationmerge-on-read
jedoch nicht. Weitere Informationen finden Sie unter Iceberg-Konfiguration.BigQuery unterstützt die Manifestbereinigung mit allen Iceberg-Partitionstransformationsfunktionen mit Ausnahme von
Bucket
. Weitere Informationen zum Bereinigen von Partitionen finden Sie unter Partitionierte Tabellen abfragen. Abfragen, die sich auf BigLake-Iceberg-Tabellen beziehen, müssen Literale in Prädikaten enthalten, die in Spalten partitioniert sind.Nur Apache Parquet-Datendateien werden unterstützt.
Wenn Sie BigLake Metastore verwenden, gelten die folgenden Einschränkungen:
- BigLake Metastore wird in BigQuery Omni-Regionen nicht unterstützt.
- Beim Umbenennen einer Tabelle muss sich die Zieltabelle in derselben Datenbank wie die Quelltabelle befinden. Die Datenbank der Zieltabelle muss explizit angegeben werden.
- Bei der Prüfung einer Iceberg-Metadatentabelle müssen Sie einen voll qualifizierten Tabellennamen verwenden. Beispiel:
prod.db.table.history
.
Kosten
Ihnen werden 1 TB zum On-Demand-Abfragepreis (pro TB) für alle 6.250.000 Anfragen an BigLake Metastore und für alle 625.000 in BigLake Metastore gespeicherten Objekte in Rechnung gestellt. Die Preise für On-Demand-Abfragen variieren je nach Region. Bei einer geringeren Anzahl von Anfragen oder Objekten wird Ihnen der entsprechende Anteil von 1 TB berechnet.
Wenn Sie beispielsweise 6.250.000 Anfragen an BigLake Metastore senden und darin 312.500 Objekte speichern, werden Ihnen 1,5 TB zum On-Demand-Abfragepreis für die Region berechnet, in der Sie die BigLake Metastore-Instanz erstellt haben.
Partitionsfilter anfordern
Sie können die Verwendung von Prädikatfiltern anfordern, wenn Sie die Option Partitionsfilter anfordern für Ihre Iceberg-Tabelle aktivieren.
Wenn Sie diese Option aktivieren, führen Versuche, die Tabelle ohne Angabe einer WHERE
-Klausel abzufragen, die mit jeder Manifestdatei übereinstimmt, zu folgendem Fehler:
Cannot query over table project_id.dataset.table without a filter that can be used for partition elimination.
Jede Manifestdatei erfordert mindestens ein Prädikat, das für die Eliminierung der Partition geeignet ist.
Sie können require_partition_filter
beim Erstellen einer Iceberg-Tabelle so aktivieren :
SQL
Verwenden Sie die Anweisung CREATE EXTERNAL TABLE
.Im folgenden Beispiel wird eine BigLake-Tabelle mit dem Namen TABLE
mit aktiviertem Filter "Partitionsfilter anfordern" erstellt:
CREATE EXTERNAL TABLE TABLE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( format = 'ICEBERG', uris = [URI], require_partition_filter = true )
Ersetzen Sie dabei Folgendes:
TABLE
ist der Tabellenname, den Sie erstellen möchten.PROJECT_ID
: Die Projekt-ID mit der Tabelle, die Sie aktualisieren möchtenREGION
ist der Standort, an dem Sie die Iceberg-Tabelle erstellen möchten.CONNECTION_ID
: die Verbindungs-ID Beispiel:myconnection
.URI
: Ihr Cloud Storage-URI mit der neuesten JSON-MetadatendateiBeispiel:
gs://mybucket/us/iceberg/mytable/metadata/1234.metadata.json
.Der URI kann auch auf einen externen Cloud-Speicherort verweisen. wie Amazon S3 oder Azure Blob Storage.
- Beispiel für AWS:
s3://mybucket/iceberg/metadata/1234.metadata.json
. - Beispiel für Azure:
azure://mystorageaccount.blob.core.windows.net/mycontainer/iceberg/metadata/1234.metadata.json
.
- Beispiel für AWS:
bq
Verwenden Sie den Befehl bq mk --table
mit dem Decorator @connection
, um die Verbindung anzugeben, die am Ende des Parameters --external_table_definition
verwendet werden soll.
Verwenden Sie --require_partition_filter
, um den Filter "Partitionsfilter anfordern" zu aktivieren.
Im folgenden Beispiel wird eine BigLake-Tabelle mit dem Namen TABLE
erstellt, wobei ein Filter "Partitionsfilter anfordern" aktiviert ist:
bq mk \ --table \ --external_table_definition=ICEBERG=URI@projects/CONNECTION_PROJECT_ID/locations/CONNECTION_REGION/connections/CONNECTION_ID \ PROJECT_ID:DATASET.EXTERNAL_TABLE \ --require_partition_filter
Ersetzen Sie dabei Folgendes:
URI
: die neueste JSON-Metadatendatei für einen bestimmten Tabellen-SnapshotBeispiel:
gs://mybucket/mydata/mytable/metadata/iceberg.metadata.json
.Der URI kann auch auf einen externen Cloud-Speicherort verweisen. wie Amazon S3 oder Azure Blob Storage.
- Beispiel für AWS:
s3://mybucket/iceberg/metadata/1234.metadata.json
. - Beispiel für Azure:
azure://mystorageaccount.blob.core.windows.net/mycontainer/iceberg/metadata/1234.metadata.json
.
- Beispiel für AWS:
CONNECTION_PROJECT_ID
: Das Projekt, das die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.myproject
CONNECTION_REGION
: Die Region, die die Verbindung zum Erstellen der BigLake-Tabelle enthält, z. B.us
CONNECTION_ID
: die Verbindungs-ID Beispiel:myconnection
.Wenn Sie sich Verbindungsdetails in der Google 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
.DATASET
ist der Name des BigQuery-Datasets, das die zu aktualisierende Tabelle enthält. Beispiel:
mydataset
.EXTERNAL_TABLE
: Der Name der Tabelle, die Sie erstellen möchtenBeispiel:
mytable
.
Sie können auch Ihre Iceberg-Tabelle aktualisieren, um den Filter "Partitionsfilter anfordern" zu aktivieren.
Wenn Sie die Option Partitionsfilter anfordern beim Erstellen der partitionierten Tabelle nicht aktiviert haben, können Sie die Tabelle aktualisieren, um die Option hinzuzufügen.
bq
Verwenden Sie den bq update
Befehl --require_partition_filter
und geben Sie das Flag an.
Beispiel:
Zum Aktualisieren von mypartitionedtable
in mydataset
in Ihrem Standardprojekt geben Sie Folgendes ein:
bq update --require_partition_filter PROJECT_ID:DATASET.TABLE
Nächste Schritte
- Gespeichertes Verfahren für Spark
- Informationen zu BigLake-Tabellen.
- Richtlinien für die Zugriffssteuerung einrichten
- Abfragen in BigQuery ausführen
- Unterstützte Anweisungen und SQL-Dialekte in BigQuery