BigLake-Tabellen in Blob Storage erstellen

In diesem Dokument wird beschrieben, wie Sie eine Azure Blob Storage-BigLake-Tabelle erstellen. Mit einer BigLake-Tabelle können Sie die Zugriffsdelegation nutzen, um Daten in Blob Storage abzufragen. Durch die Zugriffsdelegation wird der Zugriff auf die BigLake-Tabelle vom Zugriff auf den zugrunde liegenden Datenspeicher entkoppelt.

Informationen zum Datenfluss zwischen BigQuery und Blob Storage finden Sie unter Datenfluss beim Abfragen von Daten.

Hinweis

Sorgen Sie dafür, dass Sie eine Verbindung zum Zugriff auf Daten in Ihrem Blob Storage haben.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery Admin (roles/bigquery.admin) für Ihr Dataset zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen einer externen Tabelle benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen externer Tabellen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Zum Erstellen einer externen Tabelle sind die folgenden Berechtigungen erforderlich:

  • bigquery.tables.create
  • bigquery.connections.delegate

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Dataset erstellen

Bevor Sie eine externe Tabelle erstellen, müssen Sie ein Dataset in der unterstützten Region erstellen. Wählen Sie eine der folgenden Optionen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Wählen Sie im Bereich Explorer das Projekt aus, in dem Sie das Dataset erstellen möchten.
  3. Maximieren Sie die Option Aktionen ansehen und klicken Sie auf Dataset erstellen.
  4. Geben Sie auf der Seite Dataset erstellen die folgenden Details an:
    1. Geben Sie für die Dataset-ID einen eindeutigen Dataset-Namen ein.
    2. Wählen Sie für Speicherort der Daten eine unterstützte Region aus.
    3. Wenn Tabellen automatisch gelöscht werden sollen, klicken Sie das Kästchen Tabellenablauf aktivieren an und legen Sie das Standardmäßige Höchstalter für Tabellen in Tagen fest. Daten in Azure werden nach Ablauf der Tabelle nicht gelöscht.
    4. Wenn Sie die Standardsortierung verwenden möchten, maximieren Sie den Abschnitt Erweiterte Optionen und wählen dann die Option Standardsortierung aktivieren.
    5. Klicken Sie auf Dataset erstellen.

SQL

Verwenden Sie die DDL-Anweisung CREATE SCHEMA. Im folgenden Beispiel wird ein Dataset in der Region azure-eastus2 erstellt:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE SCHEMA mydataset
    OPTIONS (
      location = 'azure-eastus2');
    

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Erstellen Sie in einer Befehlszeilenumgebung mit dem Befehl bq mk ein Dataset:

bq --location=LOCATION mk \
    --dataset \
PROJECT_ID:DATASET_NAME

Der Parameter --project_id überschreibt das Standardprojekt.

Ersetzen Sie Folgendes:

  • LOCATION: der Standort Ihres Datasets

    Informationen zu unterstützten Regionen finden Sie unter Standorte. Nachdem Sie ein Dataset erstellt haben, können Sie seinen Standort nicht mehr ändern. Mit der Datei .bigqueryrc können Sie für den Standort einen Standardwert festlegen.

  • PROJECT_ID: Ihre Projekt-ID.

  • DATASET_NAME: Der Name des Datasets, das Sie erstellen möchten.

    Wenn Sie ein Dataset in einem anderen Projekt als dem Standardprojekt erstellen möchten, fügen Sie die Projekt-ID im Format PROJECT_ID:DATASET_NAME dem Dataset-Namen hinzu.

BigLake-Tabellen für nicht partitionierte Daten erstellen

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie dann ein Dataset aus.

  3. Klicken Sie im Abschnitt Dataset-Informationen auf Tabelle erstellen.

  4. Gehen Sie auf der Seite Tabelle erstellen im Abschnitt Quelle so vor:

    1. Wählen Sie unter Tabelle erstellen aus die Option Azure Blob Storage aus.
    2. Geben Sie unter Azure Blob Storage-Pfad auswählen einen Blob Storage-Pfad im folgenden Format ein: azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH

      Ersetzen Sie Folgendes:

      • AZURE_STORAGE_ACCOUNT_NAME ist der Name des Blob Storage-Kontos. Die Region des Kontos sollte mit der Region des Datasets übereinstimmen.
      • CONTAINER_NAME ist der Name des Blob Storage-Containers
      • FILE_PATH ist der Datenpfad, der auf die Blob Storage-Daten verweist Bei einer einzelnen CSV-Datei kann FILE_PATH beispielsweise myfile.csv sein.
    3. Wählen Sie für Dateiformat das Datenformat in Azure aus. Unterstützte Formate sind: AVRO, AVRO, AVRO, AVRO, AVRO AVRO und AVRO.

  5. Führen Sie im Abschnitt Ziel folgende Schritte aus:

    1. Wählen Sie für Dataset das entsprechende Dataset aus.
    2. Geben Sie im Feld Tabelle den Namen der Tabelle ein.
    3. Prüfen Sie, ob Tabellentyp auf Externe Tabelle festgelegt ist.
    4. Wählen Sie unter Verbindungs-ID im Drop-down die entsprechende Verbindungs-ID aus. Informationen zu Verbindungen finden Sie unter Verbindung zu Blob Storage herstellen.
  6. Im Abschnitt Schema können Sie entweder die automatische Schemaerkennung aktivieren oder ein Schema manuell angeben, wenn Sie eine Quelldatei haben. Wenn Sie keine Quelldatei haben, müssen Sie ein Schema manuell angeben.

    • Klicken Sie auf die Option Automatisch erkennen, um die automatische Schemaerkennung zu aktivieren.

    • Wenn Sie ein Schema manuell angeben möchten, klicken Sie das Kästchen Automatisch erkennen nicht an. Klicken Sie auf Als Text bearbeiten und geben Sie das Tabellenschema als JSON-Array ein.

  7. Klicken Sie auf Tabelle erstellen.

SQL

Verwenden Sie zum Erstellen einer BigLake-Tabelle die Anweisung CREATE EXTERNAL TABLE mit der WITH CONNECTION-Klausel:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME
    WITH CONNECTION `AZURE_LOCATION.CONNECTION_NAME`
      OPTIONS (
        format = 'DATA_FORMAT',
        uris = ['azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH']);
    

    Ersetzen Sie Folgendes:

    • DATASET_NAME: Name des von Ihnen erstellten Datasets
    • TABLE_NAME: Name, den Sie dieser Tabelle geben möchten
    • AZURE_LOCATION: ein Azure-Standort in Google Cloud, z. B. azure-eastus2
    • CONNECTION_NAME: der Name der von Ihnen erstellten Verbindung
    • DATA_FORMAT: Alle unterstützten föderierten BigQuery-Formate, z. B. AVRO, CSV, oder DELTA_LAKE oder ICEBERG (Vorschau)
    • AZURE_STORAGE_ACCOUNT_NAME: der Name des Blob Storage-Kontos
    • CONTAINER_NAME: der Name des Azure Blob Storage-Containers
    • FILE_PATH: der Datenpfad, der auf die Blob Storage-Daten verweist

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

Beispiel:

CREATE EXTERNAL TABLE absdataset.abstable
WITH CONNECTION `azure-eastus2.abs-read-conn`
  OPTIONS (
    format = 'CSV', uris = ['azure://account_name.blob.core.windows.net/container/path/file.csv']);

bq

Erstellen Sie eine Tabellendefinitionsdatei:

bq mkdef  \
    --source_format=DATA_FORMAT \
    --connection_id=AZURE_LOCATION.CONNECTION_NAME \
    "azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH" > table_def

Ersetzen Sie Folgendes:

  • DATA_FORMAT: alle unterstützten föderierten BigQuery-Formate, z. B. AVRO, CSV, ICEBERG oder PARQUET
  • AZURE_LOCATION: ein Azure-Standort in Google Cloud, z. B. azure-eastus2
  • CONNECTION_NAME ist der Name der von Ihnen erstellten Verbindung
  • AZURE_STORAGE_ACCOUNT_NAME: der Name des Blob Storage-Kontos
  • CONTAINER_NAME: der Name des Azure Blob Storage-Containers
  • FILE_PATH: der Datenpfad, der auf die Blob Storage-Daten verweist

Erstellen Sie als Nächstes die BigLake-Tabelle:

bq mk --external_table_definition=table_def DATASET_NAME.TABLE_NAME

Ersetzen Sie Folgendes:

  • DATASET_NAME: Name des von Ihnen erstellten Datasets
  • TABLE_NAME: Name, den Sie dieser Tabelle geben möchten

Beispiel: Mit den folgenden Befehlen wird beispielsweise die neue BigLake-Tabelle my_dataset.my_table erstellt, die Ihre Blob Storage-Daten abfragen kann, die im Pfad azure://account_name.blob.core.windows.net/container/path gespeichert sind und am Speicherort azure-eastus2 eine Leseverbindung haben:

bq mkdef \
    --source_format=AVRO \
    --connection_id=azure-eastus2.read-conn \
    "azure://account_name.blob.core.windows.net/container/path" > table_def

bq mk \
    --external_table_definition=table_def my_dataset.my_table

API

Rufen Sie die API-Methode tables.insert auf und erstellen Sie eine ExternalDataConfiguration in der Ressource Table, die Sie übergeben.

Geben Sie das Attribut schema an oder setzen Sie das Attribut autodetect auf true, um die automatische Schemaerkennung für unterstützte Datenquellen zu aktivieren.

Geben Sie das Attribut connectionId an, um die Verbindung zu identifizieren, die für die Verbindung mit Blob Storage verwendet werden soll.

BigLake-Tabellen für partitionierte Daten erstellen

Sie können eine BigLake-Tabelle für partitionierte Hive-Daten in Blob Storage erstellen. Nachdem Sie eine extern partitionierte Tabelle erstellt haben, können Sie den Partitionsschlüssel nicht mehr ändern. Sie müssen die Tabelle neu erstellen, um den Partitionierungsschlüssel zu ändern.

Wählen Sie eine der folgenden Optionen, um eine BigLake-Tabelle anhand partitionierter Hive-Daten zu erstellen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  3. Klicken Sie auf Aktionen ansehen und dann auf Tabelle erstellen. Der Bereich Tabelle erstellen wird geöffnet.

  4. Geben Sie im Bereich Quelle die folgenden Details an:

    1. Wählen Sie für Tabelle erstellen aus eine der folgenden Optionen aus:

      • Amazon S3
      • Azure Blob Storage
    2. Geben Sie den Pfad zum Ordner mit Platzhaltern an. Beispiel:

      • Für Amazon S3: s3://mybucket/*
      • Für Blob-Speicher: azure://mystorageaccount.blob.core.windows.net/mycontainer/*

      Der Ordner muss sich am selben Standort wie das Dataset befinden, das die Tabelle enthält, die Sie erstellen, anhängen oder überschreiben möchten.

    3. Wählen Sie in der Liste Dateiformat den Dateityp aus.

    4. Klicken Sie auf das Kästchen Quelldatenpartitionierung und geben Sie die folgenden Details an:

      1. Geben Sie unter Quell-URI-Präfix auswählen das URI-Präfix ein. Beispiel: s3://mybucket/my_files.
      2. Optional: Wenn Sie einen Partitionsfilter für alle Abfragen für diese Tabelle benötigen, klicken Sie das Kästchen Partitionsfilter anfordern an. Der Partitionsfilter, den Sie dadurch obligatorisch machen, kann die Kosten senken und die Leistung verbessern. Weitere Informationen finden Sie unter Prädikatfilter für Partitionsschlüssel in Abfragen erforderlich.
      3. Wählen Sie im Bereich Partitionsinferenzmodus eine der folgenden Optionen aus:

        • Typen automatisch ableiten: Legen Sie den Erkennungsmodus des Partitionsschemas auf AUTO fest.
        • Alle Spalten sind Strings: Legen Sie den Modus für die Erkennung des Partitionsschemas auf STRINGS fest.
        • Eigene bereitstellen: Legen Sie den Erkennungsmodus für das Partitionsschema auf CUSTOM fest und geben Sie die Schemainformationen für die Partitionierungsschlüssel manuell ein. Weitere Informationen finden Sie unter Benutzerdefiniertes Partitionierungsschlüsselschema bereitstellen.
  5. Geben Sie im Bereich Ziel die folgenden Details an:

    1. Wählen Sie unter Projekt das Projekt aus, in dem Sie die Tabelle erstellen möchten.
    2. Wählen Sie bei Dataset das Dataset aus, in dem Sie die Tabelle erstellen möchten.
    3. Geben Sie unter Tabelle den Namen der Tabelle ein, die Sie erstellen möchten.
    4. Prüfen Sie, ob für Tabellentyp die Option Externe Tabelle ausgewählt ist.
    5. Wählen Sie unter Verbindungs-ID die Verbindung aus, die Sie zuvor erstellt haben.
  6. Im Abschnitt Schema können Sie entweder die automatische Schemaerkennung aktivieren oder ein Schema manuell angeben, wenn Sie eine Quelldatei haben. Wenn Sie keine Quelldatei haben, müssen Sie ein Schema manuell angeben.

    • Klicken Sie auf die Option Automatisch erkennen, um die automatische Schemaerkennung zu aktivieren.

    • Wenn Sie ein Schema manuell angeben möchten, klicken Sie das Kästchen Automatisch erkennen nicht an. Klicken Sie auf Als Text bearbeiten und geben Sie das Tabellenschema als JSON-Array ein.

  7. Wenn Sie Zeilen mit zusätzlichen Spaltenwerten ignorieren möchten, die nicht mit dem Schema übereinstimmen, maximieren Sie den Abschnitt Erweiterte Optionen und wählen Sie Unbekannte Werte aus.

  8. Klicken Sie auf Tabelle erstellen.

SQL

Verwenden Sie die DDL-Anweisung CREATE EXTERNAL TABLE:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
    WITH PARTITION COLUMNS
    (
      PARTITION_COLUMN PARTITION_COLUMN_TYPE,
    )
    WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS (
      hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX",
      uris=['FILE_PATH'],
      format ="TABLE_FORMAT"
    );
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: der Name Ihres Projekts, in dem Sie die Tabelle erstellen möchten, z. B. myproject
    • DATASET: der Name des BigQuery-Datasets, in dem Sie die Tabelle erstellen möchten, z. B. mydataset
    • EXTERNAL_TABLE_NAME: der Name der Tabelle, die Sie erstellen möchten, z. B. mytable
    • PARTITION_COLUMN: der Name der Partitionierungsspalte.
    • PARTITION_COLUMN_TYPE: der Typ der Partitionierungsspalte
    • REGION: die Region, die die Verbindung enthält, z. B. us
    • CONNECTION_ID: der Name der Verbindung, z. B. myconnection
    • HIVE_PARTITION_URI_PREFIX: Hive-Partitionierungs-URI-Präfix, z. B.:

      • s3://mybucket/
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/
    • FILE_PATH: Pfad zur Datenquelle für die externe Tabelle, die Sie erstellen möchten, z. B.:

      • s3://mybucket/*.parquet
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/*.parquet
    • TABLE_FORMAT: das Format der Tabelle, die Sie erstellen möchten, z. B. PARQUET

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

Beispiele

Im folgenden Beispiel wird eine BigLake-Tabelle über partitionierte Daten in Amazon S3 erstellt. Das Schema wird automatisch erkannt.

CREATE EXTERNAL TABLE `my_dataset.my_table`
WITH PARTITION COLUMNS
(
  sku STRING,
)
WITH CONNECTION `us.my-connection`
OPTIONS(
  hive_partition_uri_prefix = "s3://mybucket/products",
  uris = ['s3://mybucket/products/*']
);

Im folgenden Beispiel wird eine BigLake-Tabelle über partitionierte Daten in Blob Storage erstellt. Das Schema ist angegeben.

CREATE EXTERNAL TABLE `my_dataset.my_table`
(
  ProductId INTEGER,
  ProductName, STRING,
  ProductType, STRING
)
WITH PARTITION COLUMNS
(
  sku STRING,
)
WITH CONNECTION `us.my-connection`
OPTIONS(
  hive_partition_uri_prefix = "azure://mystorageaccount.blob.core.windows.net/mycontainer/products",
  uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/*']
);

bq

Verwenden Sie zuerst den Befehl bq mkdef, um eine Tabellendefinitionsdatei zu erstellen:

bq mkdef \
--source_format=SOURCE_FORMAT \
--connection_id=REGION.CONNECTION_ID \
--hive_partitioning_mode=PARTITIONING_MODE \
--hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \
--require_hive_partition_filter=BOOLEAN \
 URIS > DEFINITION_FILE

Ersetzen Sie Folgendes:

  • SOURCE_FORMAT: das Format der externen Datenquelle Beispiel: CSV.
  • REGION: Die Region, die die Verbindung enthält, z. B. us.
  • CONNECTION_ID: der Name der Verbindung, z. B. myconnection
  • PARTITIONING_MODE: der Hive-Partitionierungsmodus. Verwenden Sie einen der folgenden Werte:
    • AUTO: Schlüsselnamen und -typen automatisch erkennen.
    • STRINGS: Schlüsselnamen automatisch in Strings konvertieren.
    • CUSTOM: Schlüsselschema im Präfix des Quell-URI codieren.
  • URI_SHARED_PREFIX: das Präfix des Quell-URI.
  • BOOLEAN gibt an, ob ein Prädikatfilter zum Zeitpunkt der Abfrage erforderlich ist. Dieses Flag ist optional. Der Standardwert ist false.
  • URIS: der Pfad zum Amazon S3- oder Blob Storage-Ordner im Platzhalterformat.
  • DEFINITION_FILE: der Pfad zur Tabellendefinitionsdatei auf Ihrem lokalen Rechner.

Wenn PARTITIONING_MODE den Wert CUSTOM hat, fügen Sie das Partitionsschlüsselschema im Präfix des Quell-URI im folgenden Format ein:

--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...

Verwenden Sie nach dem Erstellen der Tabellendefinitionsdatei den Befehl bq mk, um die BigLake-Tabelle zu erstellen:

bq mk --external_table_definition=DEFINITION_FILE \
DATASET_NAME.TABLE_NAME \
SCHEMA

Ersetzen Sie Folgendes:

  • DEFINITION_FILE: der Pfad zur Tabellendefinitionsdatei.
  • DATASET_NAME: der Name des Datasets, das die Tabelle enthält
  • TABLE_NAME: Der Name der Tabelle, die Sie erstellen.
  • SCHEMA: gibt einen Pfad zu einer JSON-Schemadatei oder das Schema im Format field:data_type,field:data_type,... an. Wenn Sie die automatische Schemaerkennung verwenden möchten, lassen Sie dieses Argument weg.

Beispiele

Im folgenden Beispiel wird der Hive-Partitionierungsmodus AUTO für Amazon S3-Daten verwendet:

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=AUTO \
  --hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
  --metadata_cache_mode=AUTOMATIC \
  s3://mybucket/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

Im folgenden Beispiel wird der Hive-Partitionierungsmodus STRING für Amazon S3-Daten verwendet:

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=STRING \
  --hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
  s3://mybucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

Im folgenden Beispiel wird der Hive-Partitionierungsmodus CUSTOM für Blob Storage-Daten verwendet:

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=CUSTOM \
  --hive_partitioning_source_uri_prefix=azure://mystorageaccount.blob.core.windows.net/mycontainer/{dt:DATE}/{val:STRING} \
  azure://mystorageaccount.blob.core.windows.net/mycontainer/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

API

Wenn Sie die Hive-Partitionierung mithilfe der BigQuery API festlegen möchten, fügen Sie das hivePartitioningOptions-Objekt in das ExternalDataConfiguration-Objekt ein, wenn Sie die Tabellendefinitionsdatei erstellen. Zum Erstellen einer BigLake-Tabelle müssen Sie auch einen Wert für das Feld connectionId angeben.

Wenn Sie das Feld hivePartitioningOptions.mode auf CUSTOM festlegen, müssen Sie das Schema für den Partitionierungsschlüssel im Feld hivePartitioningOptions.sourceUriPrefix folgendermaßen codieren: s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...

Wenn Sie die Verwendung eines Prädikatfilters zum Zeitpunkt der Abfrage erzwingen möchten, legen Sie das Feld hivePartitioningOptions.requirePartitionFilter auf true fest.

Delta Lake-Tabellen

Wenn Sie Feedback oder Unterstützung für dieses Feature benötigen, senden Sie eine E-Mail an bq-federated-formats@google.com.

Delta Lake ist ein Open-Source-Tabellenformat, das Datentabellen im Petabytebereich unterstützt. Delta Lake-Tabellen können sowohl als temporäre als auch als permanente Tabellen abgefragt werden und werden als BigLake-Tabellen unterstützt.

Schemasynchronisierung

Delta Lake verwaltet ein kanonisches Schema als Teil seiner Metadaten. Sie können ein Schema nicht mit einer JSON-Metadatendatei aktualisieren. So aktualisieren Sie das Schema:

  1. Führen Sie den Befehl bq update mit dem Flag --autodetect_schema aus:

    bq update --autodetect_schema
    PROJECT_ID:DATASET.TABLE
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Die Projekt-ID mit der Tabelle, die Sie aktualisieren möchten

    • DATASET ist das Dataset mit der Tabelle, die Sie aktualisieren möchten.

    • TABLE: Die Tabelle, von der Sie einen Snapshot erstellen möchten

Typkonvertierung

BigQuery konvertiert Delta Lake-Datentypen in folgende BigQuery-Datentypen:

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

Die folgenden Einschränkungen gelten für Delta Lake-Tabellen:

  • Für Delta Lake-Tabellen gelten die Einschränkungen für externe Tabellen.

  • Delta Lake-Tabellen werden nur in BigQuery Omni unterstützt und haben die entsprechenden Einschränkungen.

  • Sie können eine Tabelle nicht mit einer neuen JSON-Metadatendatei aktualisieren. Sie müssen einen Vorgang zur automatischen Erkennung der Schematabelle verwenden. Weitere Informationen finden Sie unter Schemasynchronisierung.

  • BigLake-Sicherheitsfeatures schützen nur Delta Lake-Tabellen, wenn über BigQuery-Dienste zugegriffen wird.

Delta Lake-Tabelle erstellen

Im folgenden Beispiel wird eine externe Tabelle mithilfe der Anweisung CREATE EXTERNAL TABLE mit dem Delta Lake-Format erstellt:

CREATE [OR REPLACE] EXTERNAL TABLE table_name
WITH CONNECTION connection_name
OPTIONS (
         format = 'DELTA_LAKE',
         uris = ["parent_directory"]
       );

Ersetzen Sie Folgendes:

  • table_name: der Name der Tabelle

  • connection_name: Der Name der Verbindung. Die Verbindung muss entweder eine Amazon S3- oder eine Blob Storage-Quelle identifizieren.

  • parent_directory: der URI des übergeordneten Verzeichnisses.

Cloudübergreifende Übertragung mit Delta Lake

Im folgenden Beispiel wird die Anweisung LOAD DATA verwendet, um Daten in die entsprechende Tabelle zu laden:

LOAD DATA [INTO | OVERWRITE] table_name
FROM FILES (
        format = 'DELTA_LAKE',
        uris = ["parent_directory"]
)
WITH CONNECTION connection_name;

Weitere Beispiele für cloudübergreifende Datenübertragungen finden Sie unter Daten mit cloudübergreifenden Vorgängen laden.

BigLake-Tabellen abfragen

Weitere Informationen finden Sie unter Blob Storage-Daten abfragen.

Ressourcenmetadaten mit INFORMATION_SCHEMA ansehen

Die Ressourcenmetadaten können Sie über INFORMATION_SCHEMA-Ansichten aufrufen. Wenn Sie Die Ansichten JOBS_BY_*, JOBS_TIMELINE_BY_* und RESERVATION* abfragen, müssen Sie den Verarbeitungsstandort der Abfrage angeben, der zusammen mit der Region der Tabelle liegt. Informationen zu BigQuery Omni-Standorten finden Sie unter Standorte. Bei allen anderen Systemtabellen ist die Angabe des Speicherorts des Abfragejobs optional.

Informationen zu den von BigQuery Omni unterstützten Systemtabellen finden Sie unter Einschränkungen.

Zum Abfragen der Systemtabellen JOBS_* und RESERVATION* wählen Sie eine der folgenden Methoden aus, um den Verarbeitungsstandort anzugeben:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Wenn der Tab Editor nicht angezeigt wird, klicken Sie auf  Neue Abfrage erstellen.

  3. Klicken Sie auf Mehr > Abfrageeinstellungen. Das Dialogfeld Abfrageeinstellungen wird geöffnet.

  4. Wählen Sie im Dialogfeld Abfrageeinstellungen unter Zusätzliche Einstellungen > Speicherort der Daten BigQuery“ aus. Region, die sich mit der BigQuery Omni-Region befindet. Wenn Ihre BigQuery Omni-Region beispielsweise aws-us-east-1 ist, geben Sie us-east4 an.

  5. Wählen Sie die übrigen Felder aus und klicken Sie auf Speichern.

bq

Verwenden Sie das Flag --location, um den Verarbeitungsstandort des Jobs auf die BigQuery-Region festzulegen, die sich mit der BigQuery Omni-Region befindet. Wenn Ihre BigQuery Omni-Region beispielsweise aws-us-east-1 ist, geben Sie us-east4 an.

Beispiel

bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-azure-eastus2.INFORMATION_SCHEMA.JOBS limit 10;"

API

Wenn Sie Jobs programmatisch ausführen, legen Sie das Standortargument auf die BigQuery-Region fest, die sich mit der BigQuery Omni-Region befindet. Wenn Ihre BigQuery Omni-Region beispielsweise aws-us-east-1 ist, geben Sie us-east4 an.

VPC Service Controls

Sie können VPC Service Controls-Perimeter verwenden, um den Zugriff von BigQuery Omni auf einen externen Clouddienst als zusätzliche Sicherheitsebene einzuschränken. Beispielsweise können VPC Service Controls-Perimeter die Exporte aus Ihren BigQuery Omni-Tabellen auf einen bestimmten Amazon S3-Bucket oder Blob Storage-Container beschränken.

Weitere Informationen zu VPC Service Controls finden Sie im Überblick über VPC Service Controls.

Erforderliche Berechtigung

Prüfen Sie, ob Sie die erforderlichen Berechtigungen zum Konfigurieren von Dienstperimetern haben. Eine Liste der IAM-Rollen, die zum Konfigurieren von VPC Service Controls erforderlich sind, finden Sie unter Zugriffssteuerung mit IAM in der Dokumentation zu VPC Service Controls.

VPC Service Controls mithilfe der Google Cloud Console einrichten

  1. Klicken Sie im Navigationsmenü der Google Cloud Console auf Sicherheit und dann auf VPC Service Controls.

    Zu „VPC Service Controls“

  2. Zum Einrichten von VPC Service Controls für BigQuery Omni folgen Sie den Schritten in der Anleitung Dienstperimeter erstellen und führen Sie im Bereich Regeln für ausgehenden Traffic die folgenden Schritte aus:

    1. Klicken Sie im Bereich Regeln für ausgehenden Traffic auf Regel hinzufügen.

    2. Wählen Sie im Abschnitt FROM-Attribute des API-Clients eine Option aus der Liste Identität aus.

    3. Wählen Sie TO-Attribute von externen Ressourcen aus.

    4. Klicken Sie auf Externe Ressourcen hinzufügen, um eine externe Ressource hinzuzufügen.

    5. Geben Sie im Dialogfeld Externe Ressource hinzufügen unter Externer Ressourcenname einen gültigen Ressourcennamen ein. Beispiel:

      • Für Amazon Simple Storage Service (Amazon S3): s3://BUCKET_NAME

        Ersetzen Sie BUCKET_NAME durch den Namen Ihres Amazon S3-Buckets.

      • Für Azure Blob Storage: azure://myaccount.blob.core.windows.net/CONTAINER_NAME

        Ersetzen Sie CONTAINER NAME durch den Namen Ihres Blob Storage-Containers.

      Eine Liste der Regelattribute für ausgehenden Traffic finden Sie unter Referenz zu Regeln für ausgehenden Traffic.

    6. Wählen Sie die Methoden aus, die Sie für Ihre externen Ressourcen zulassen möchten:

      1. Wenn Sie alle Methoden zulassen möchten, wählen Sie in der Liste Methoden die Option Alle Methoden.
      2. Wenn Sie bestimmte Methoden zulassen möchten, wählen Sie Ausgewählte Methode aus, klicken Sie auf Methoden auswählen und wählen Sie dann die Methoden aus, die Sie für Ihre externen Ressourcen zulassen möchten.
    7. Klicken Sie auf Perimeter erstellen.

VPC Service Controls mithilfe der gcloud CLI einrichten

So richten Sie VPC Service Controls mit der gcloud CLI ein:

  1. Legen Sie die Standardzugriffsrichtlinie fest.
  2. Erstellen Sie die Eingabedatei für die Richtlinie für ausgehenden Traffic.
  3. Fügen Sie die Richtlinie für ausgehenden Traffic hinzu.

Standardzugriffsrichtlinie festlegen

Eine Zugriffsrichtlinie ist ein organisationsweiter Container für Zugriffsebenen und Dienstperimeter. Informationen zum Festlegen einer Standardzugriffsrichtlinie oder zum Abrufen eines Zugriffsrichtliniennamens finden Sie unter Zugriffsrichtlinie verwalten.

Eingabedatei für die Richtlinie für ausgehenden Traffic erstellen

Ein Regelblock für ausgehenden Traffic definiert den zulässigen Zugriff innerhalb eines Perimeters auf Ressourcen außerhalb dieses Perimeters. Bei externen Ressourcen definiert das Attribut externalResources die externen Ressourcenpfade, die den Zugriff innerhalb Ihres VPC Service Controls-Perimeters zulassen.

Ausgangsregeln können mithilfe einer JSON-Datei oder einer YAML-Datei konfiguriert werden. Im folgenden Beispiel wird das .yaml-Format verwendet:

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
      *OR*
      - permission: "externalResource.read"
    externalResources:
      - EXTERNAL_RESOURCE_PATH
  egressFrom:
    identityType: IDENTITY_TYPE
    *OR*
    identities:
    - serviceAccount:SERVICE_ACCOUNT
  • egressTo: Listet zulässige Dienstvorgänge in Google Cloud-Ressourcen in angegebenen Projekten außerhalb des Perimeters auf.

  • operations: Listet die zugänglichen Dienste und Aktionen/Methoden auf, auf die ein Client zugreifen darf, der die from-Block-Bedingungen erfüllt.

  • serviceName: Legen Sie bigquery.googleapis.com für BigQuery Omni fest.

  • methodSelectors: Methoden auflisten, auf die ein Client zugreifen kann, der die from-Bedingungen erfüllt. Die eingeschränkten Methoden und Berechtigungen für Dienste finden Sie unter Unterstützte Einschränkungen für Dienstmethoden.

  • method ist eine gültige Dienstmethode oder \"*\", um alle serviceName-Methoden zuzulassen.

  • permission: eine gültige Dienstberechtigung, z. B. \"*\", externalResource.read oder externalResource.write. Der Zugriff auf Ressourcen außerhalb des Perimeters wird für Vorgänge zugelassen, für die diese Berechtigung erforderlich ist.

  • externalResources: Listet externe Ressourcen auf, auf die Clients innerhalb eines Perimeters zugreifen können. Ersetzen Sie EXTERNAL_RESOURCE_PATH entweder durch einen gültigen Amazon S3-Bucket wie s3://bucket_name oder durch einen Blob Storage-Containerpfad wie azure://myaccount.blob.core.windows.net/container_name.

  • egressFrom: Listet zulässige Dienstvorgänge für Google Cloud-Ressourcen in angegebenen Projekten innerhalb des Perimeters auf.

  • identityType oder identities: Definiert die Identitätstypen, die auf die angegebenen Ressourcen außerhalb des Perimeters zugreifen können. Ersetzen Sie IDENTITY_TYPE durch einen der folgenden gültigen Werte:

    • ANY_IDENTITY zum Zulassen aller Identitäten.
    • ANY_USER_ACCOUNT zum Zulassen aller Nutzer.
    • ANY_SERVICE_ACCOUNT zum Zulassen aller Dienstkonten.
  • identities: Listet Dienstkonten auf, die auf die angegebenen Ressourcen außerhalb des Perimeters zugreifen können.

  • serviceAccount (optional): Ersetzen Sie SERVICE_ACCOUNT durch das Dienstkonto, das auf die angegebenen Ressourcen außerhalb des Perimeters zugreifen kann.

Beispiele

Das folgende Beispiel zeigt eine Richtlinie, die ausgehende Vorgänge innerhalb des Perimeters zum S3-Standort s3://mybucket in AWS zulässt.

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
    externalResources:
      - s3://mybucket
      - s3://mybucket2
  egressFrom:
    identityType: ANY_IDENTITY

Im folgenden Beispiel werden ausgehende Vorgänge an einen Blob-Storage-Container zugelassen:

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: "*"
    externalResources:
      - azure://myaccount.blob.core.windows.net/mycontainer
  egressFrom:
    identityType: ANY_IDENTITY

Weitere Informationen zu Richtlinien für ausgehenden Traffic finden Sie in der Referenz zu Regeln für ausgehenden Traffic.

Richtlinie für ausgehenden Traffic hinzufügen

Verwenden Sie den Befehl gcloud access-context-manager perimeters create, um die Richtlinie für ausgehenden Traffic beim Erstellen eines neuen Dienstperimeters hinzuzufügen. Mit dem folgenden Befehl wird beispielsweise ein neuer Perimeter namens omniPerimeter erstellt, der das Projekt mit der Projektnummer 12345 enthält, die BigQuery API beschränkt und eine Richtlinie für ausgehenden Traffic hinzugefügt, die in der Datei egress.yaml definiert ist:

gcloud access-context-manager perimeters create omniPerimeter \
    --title="Omni Perimeter" \
    --resources=projects/12345 \
    --restricted-services=bigquery.googleapis.com \
    --egress-policies=egress.yaml

Verwenden Sie den Befehl gcloud access-context-manager perimeters update, um die Richtlinie für ausgehenden Traffic zu einem vorhandenen Dienstperimeter hinzuzufügen. Mit dem folgenden Befehl wird beispielsweise eine in der Datei egress.yaml definierte Richtlinie für ausgehenden Traffic zu einem vorhandenen Dienstperimeter mit dem Namen omniPerimeter hinzugefügt:

gcloud access-context-manager perimeters update omniPerimeter
    --set-egress-policies=egress.yaml

Perimeter prüfen

Verwenden Sie den Befehl gcloud access-context-manager perimeters describe, um den Perimeter zu prüfen:

gcloud access-context-manager perimeters describe PERIMETER_NAME

Ersetzen Sie PERIMETER_NAME durch den Namen des Perimeters.

Der folgende Befehl beschreibt beispielsweise den Perimeter omniPerimeter:

gcloud access-context-manager perimeters describe omniPerimeter

Weitere Informationen finden Sie unter Dienstperimeter verwalten.

BigQuery Omni-VPC-Zugriff auf Blob Storage erlauben

Wenn Sie Feedback oder Unterstützung für dieses Feature benötigen, senden Sie eine E-Mail an bq-omni-customer-support@google.com.

Als BigQuery-Administrator können Sie eine Netzwerkregel erstellen, um BigQuery Omni Zugriff auf Ihre Blob Storage-Ressourcen zu gewähren. Dadurch wird gewährleistet, dass nur autorisierte BigQuery Omni-VPCs mit Ihrem Blob Storage interagieren können, wodurch die Sicherheit Ihrer Daten erhöht wird.

Netzwerkregel für BigQuery Omni-VPC anwenden

Verwenden Sie Azure PowerShell oder Terraform, um eine Netzwerkregel anzuwenden:

Azure PowerShell

Führen Sie den folgenden Befehl aus, um Ihrem Speicherkonto eine Netzwerkregel hinzuzufügen, die die abgerufenen BigQuery Omni-Subnetz-IDs als VirtualNetworkResourceId angibt.

  Add-AzStorageAccountNetworkRule`
   -ResourceGroupName "RESOURCE_GROUP_NAME"`
   -Name "STORAGE_ACCOUNT_NAME"`
   -VirtualNetworkResourceId "SUBNET_ID1","SUBNET_ID2"

Ersetzen Sie Folgendes:

  • RESOURCE_GROUP_NAME: der Name der Ressourcengruppe.
  • STORAGE_ACCOUNT_NAME: der Name des Speicherkontos
  • SUBNET_ID1,SUBNET_ID1: die Subnetz-IDs. Sie finden diese Informationen in der Tabelle auf dieser Seite.

Terraform

Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:

  resource "azurerm_storage_account_network_rules" "example" {
    storage_account_name       = "STORAGE_ACCOUNT_NAME"
    resource_group_name        = "RESOURCE_GROUP_NAME"
    default_action             = "Allow"
    bypass                     = ["Logging", "Metrics", "AzureServices"]
    virtual_network_subnet_ids = ["SUBNET_ID1","SUBNET_ID2"]
  }

Ersetzen Sie Folgendes:

  • STORAGE_ACCOUNT_NAME: der Name des Speicherkontos
  • RESOURCE_GROUP_NAME: der Name der Ressourcengruppe.
  • SUBNET_ID1,SUBNET_ID1: die Subnetz-IDs. Sie finden diese Informationen in der Tabelle auf dieser Seite.

BigQuery Omni-VPC-Ressourcen-IDs

Region Subnetz-IDs
azure-eastus2 /subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus21-yurduaaaaa-private
/subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus22-yurduaaaab-private

Beschränkungen

Eine vollständige Liste der Beschränkungen, die für BigLake-Tabellen basierend auf Amazon S3 und Blob Storage gelten, finden Sie unter Beschränkungen.

Nächste Schritte