Externe Amazon S3 BigLake-Tabellen erstellen

In diesem Dokument wird die Erstellung einer BigLake-Tabelle in Amazon Simple Storage Service (Amazon S3) beschrieben. Mit einer BigLake-Tabelle können Sie mithilfe der Zugriffsdelegation Daten in Amazon S3 abfragen. Durch die Zugriffsdelegation wird der Zugriff auf die BigLake-Tabelle vom Zugriff auf den zugrunde liegenden Datenspeicher entkoppelt.

Informationen zum Datenfluss zwischen BigQuery und Amazon S3 finden Sie unter Datenfluss beim Abfragen von Daten.

Hinweis

Prüfen Sie, ob Sie eine Verbindung für den Zugriff auf Amazon S3-Daten 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 auf Projekte, Ordner und Organisationen 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 unter 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 Amazon S3 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 aws-us-east-1 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 = 'aws-us-east-1');

  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.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetInfo;

// Sample to create a aws dataset
public class CreateDatasetAws {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    // Note: As of now location only supports aws-us-east-1
    String location = "aws-us-east-1";
    createDatasetAws(projectId, datasetName, location);
  }

  public static void createDatasetAws(String projectId, String datasetName, String location) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      DatasetInfo datasetInfo =
          DatasetInfo.newBuilder(projectId, datasetName).setLocation(location).build();

      Dataset dataset = bigquery.create(datasetInfo);
      System.out.println(
          "Aws dataset created successfully :" + dataset.getDatasetId().getDataset());
    } catch (BigQueryException e) {
      System.out.println("Aws dataset was not created. \n" + e.toString());
    }
  }
}

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 Amazon S3 aus.
    2. Geben Sie unter S3-Pfad auswählen einen URI ein, der auf die Amazon S3-Daten im Format s3://BUCKET_NAME/PATH verweist. Ersetzen Sie BUCKET_NAME durch den Namen des Amazon S3-Buckets. Die Region des Buckets sollte mit der Region des Datasets übereinstimmen. Ersetzen Sie PATH durch den Pfad, in den Sie die exportierte Datei schreiben möchten. Dieser kann den Platzhalter * enthalten.
    3. Wählen Sie für Dateiformat das Datenformat in Amazon S3 aus. Unterstützte Formate sind: AVRO, CSV, DELTA_LAKE, ICEBERG, JSONL, ORC, and PARQUET.
  5. Geben Sie im Bereich Ziel die folgenden Details an:

    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 Amazon S3 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 `AWS_LOCATION.CONNECTION_NAME`
      OPTIONS (
        format = "DATA_FORMAT",
        uris = ["S3_URI"],
        max_staleness = STALENESS_INTERVAL,
        metadata_cache_mode = 'CACHE_MODE');

    Ersetzen Sie Folgendes:

    • DATASET_NAME: der Name des von Ihnen erstellten Datasets
    • TABLE_NAME: der Name, den Sie dieser Tabelle geben möchten
    • AWS_LOCATION: ein AWS-Standort in Google Cloud, z. B. "aws-us-east-1"
    • CONNECTION_NAME: der Name der von Ihnen erstellten Verbindung
    • DATA_FORMAT: Alle unterstützten föderierten BigQuery-Formate, z. B. AVRO, CSV, DELTA_LAKE, ICEBERG oder PARQUET (Vorschau)
    • S3_URI: ein URI, der auf die S3-Daten verweist, z. B. s3://bucket/path
    • STALENESS_INTERVAL: gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die BigLake-Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit sie vom Vorgang verwendet werden können. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

      Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.

      Geben Sie zum Aktivieren des Metadaten-Cachings für das Intervallliteral einen Wert zwischen 30 Minuten und 7 Tagen an. Beispiel: Geben Sie INTERVAL 4 HOUR für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Wenn die im Cache gespeicherten Metadaten älter sind, ruft der Vorgang stattdessen Metadaten aus Amazon S3 ab.

    • CACHE_MODE: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

      Legen Sie AUTOMATIC fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.

      Legen Sie MANUAL fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den Systemvorgang BQ.REFRESH_EXTERNAL_METADATA_CACHE aufrufen, um den Cache zu aktualisieren.

      Sie müssen CACHE_MODE festlegen, wenn STALENESS_INTERVAL auf einen Wert größer als 0 festgelegt ist.

  3. Klicken Sie auf Ausführen.

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

Beispiel:

CREATE EXTERNAL TABLE awsdataset.awstable
  WITH CONNECTION `aws-us-east-1.s3-read-connection`
  OPTIONS (
    format="CSV",
    uris=["s3://s3-bucket/path/file.csv"],
    max_staleness = INTERVAL 1 DAY,
    metadata_cache_mode = 'AUTOMATIC'
);

bq

Erstellen Sie eine Tabellendefinitionsdatei:

bq mkdef  \
--source_format=DATA_FORMAT \
--connection_id=AWS_LOCATION.CONNECTION_NAME \
--metadata_cache_mode=CACHE_MODE \
S3_URI > table_def

Ersetzen Sie Folgendes:

  • DATA_FORMAT: alle unterstützten föderierten BigQuery-Formate, wie z. B. AVRO, CSV, DELTA_LAKE, ICEBERG oder PARQUET
  • S3_URI: ein URI, der auf die Amazon S3-Daten verweist, z. B. s3://bucket/path
  • AWS_LOCATION: AWS-Standort in Google Cloud, z. B. aws-us-east-1
  • CONNECTION_NAME: Name der von Ihnen erstellten Verbindung

  • CACHE_MODE: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird. Sie müssen dieses Flag nur angeben, wenn Sie auch das Flag --max_staleness im nachfolgenden Befehl bq mk verwenden möchten, um das Metadaten-Caching zu aktivieren. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Metadaten-Caching für bessere Leistung.

    Legen Sie AUTOMATIC fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.

    Legen Sie MANUAL fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den SystemvorgangBQ.REFRESH_EXTERNAL_METADATA_CACHE aufrufen, um den Cache zu aktualisieren. Sie müssen CACHE_MODE festlegen, wenn STALENESS_INTERVAL auf einen Wert größer als 0 festgelegt ist.

Erstellen Sie als Nächstes die BigLake-Tabelle:

bq mk --max_staleness=STALENESS_INTERVAL --external_table_definition=table_def DATASET_NAME.TABLE_NAME

Ersetzen Sie Folgendes:

  • STALENESS_INTERVAL: gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die BigLake-Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit sie vom Vorgang verwendet werden können. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

    Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.

    Geben Sie zum Aktivieren des Metadaten-Cachings für das Intervallliteral einen Wert zwischen 30 Minuten und 7 Tagen an. Beispiel: Geben Sie INTERVAL 4 HOUR für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Wenn die im Cache gespeicherten Metadaten älter sind, ruft der Vorgang stattdessen Metadaten aus Amazon S3 ab.

  • DATASET_NAME: Name des von Ihnen erstellten Datasets

  • TABLE_NAME: Name, den Sie dieser Tabelle geben möchten

Mit dem folgenden Befehl wird beispielsweise eine neue BigLake-Tabelle namens awsdataset.awstable erstellt, die die im Pfad s3://s3-bucket/path/file.csv gespeicherten Amazon S3-Daten abfragen kann und eine Leseverbindung am Standort aws-us-east-1 hat:

bq mkdef  \
--autodetect \
--source_format=CSV \
--connection_id=aws-us-east-1.s3-read-connection \
--metadata_cache_mode=AUTOMATIC \
s3://s3-bucket/path/file.csv > table_def

bq mk --max_staleness=INTERVAL "1" HOUR \
--external_table_definition=table_def awsdataset.awstable

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 Amazon S3 verwendet werden soll.

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

// Sample to create an external aws table
public class CreateExternalTableAws {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String connectionId = "MY_CONNECTION_ID";
    String sourceUri = "s3://your-bucket-name/";
    CsvOptions options = CsvOptions.newBuilder().setSkipLeadingRows(1).build();
    Schema schema =
        Schema.of(
            Field.of("name", StandardSQLTypeName.STRING),
            Field.of("post_abbr", StandardSQLTypeName.STRING));
    ExternalTableDefinition externalTableDefinition =
        ExternalTableDefinition.newBuilder(sourceUri, options)
            .setConnectionId(connectionId)
            .setSchema(schema)
            .build();
    createExternalTableAws(projectId, datasetName, tableName, externalTableDefinition);
  }

  public static void createExternalTableAws(
      String projectId,
      String datasetName,
      String tableName,
      ExternalTableDefinition externalTableDefinition) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(projectId, datasetName, tableName);
      TableInfo tableInfo = TableInfo.newBuilder(tableId, externalTableDefinition).build();

      bigquery.create(tableInfo);
      System.out.println("Aws external table created successfully");

      // Clean up
      bigquery.delete(TableId.of(projectId, datasetName, tableName));
    } catch (BigQueryException e) {
      System.out.println("Aws external was not created." + e.toString());
    }
  }
}

BigLake-Tabellen für partitionierte Daten erstellen

Sie können eine BigLake-Tabelle für partitionierte Hive-Daten in Amazon S3 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 unter Tabelle erstellen aus die Option Amazon S3 aus.

    2. Geben Sie den Pfad zum Ordner mit Platzhaltern an. Beispiel: s3://mybucket/*.

      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 Schema für benutzerdefinierte Partitionierungsschlüssel.
  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"
      max_staleness = STALENESS_INTERVAL,
      metadata_cache_mode = 'CACHE_MODE'
    );

    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/
    • FILE_PATH: Pfad zur Datenquelle für die externe Tabelle, die Sie erstellen möchten, z. B.: s3://mybucket/*.parquet
    • TABLE_FORMAT: das Format der Tabelle, die Sie erstellen möchten, z. B. PARQUET
    • STALENESS_INTERVAL: gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die BigLake-Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit sie vom Vorgang verwendet werden können. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

      Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.

      Geben Sie zum Aktivieren des Metadaten-Cachings für das Intervallliteral einen Wert zwischen 30 Minuten und 7 Tagen an. Beispiel: Geben Sie INTERVAL 4 HOUR für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Wenn die im Cache gespeicherten Metadaten älter sind, ruft der Vorgang stattdessen Metadaten aus Amazon S3 ab.

    • CACHE_MODE: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

      Legen Sie AUTOMATIC fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.

      Legen Sie MANUAL fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den Systemvorgang BQ.REFRESH_EXTERNAL_METADATA_CACHE aufrufen, um den Cache zu aktualisieren.

      Sie müssen CACHE_MODE festlegen, wenn STALENESS_INTERVAL auf einen Wert größer als 0 festgelegt ist.

  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/*']
  max_staleness = INTERVAL 1 DAY,
  metadata_cache_mode = 'AUTOMATIC'
);

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 \
--metadata_cache_mode=CACHE_MODE \
 URIS > DEFINITION_FILE

Ersetzen Sie dabei 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.

  • CACHE_MODE: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird. Sie müssen dieses Flag nur angeben, wenn Sie auch das Flag --max_staleness im nachfolgenden Befehl bq mk verwenden möchten, um das Metadaten-Caching zu aktivieren. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Metadaten-Caching für bessere Leistung.

    Legen Sie AUTOMATIC fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.

    Legen Sie MANUAL fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den SystemvorgangBQ.REFRESH_EXTERNAL_METADATA_CACHE aufrufen, um den Cache zu aktualisieren. Sie müssen CACHE_MODE festlegen, wenn STALENESS_INTERVAL auf einen Wert größer als 0 festgelegt ist.

  • URIS: der Pfad zum Amazon S3-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=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 --max_staleness=STALENESS_INTERVAL \
--external_table_definition=DEFINITION_FILE \
DATASET_NAME.TABLE_NAME \
SCHEMA

Ersetzen Sie Folgendes:

  • STALENESS_INTERVAL: gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die BigLake-Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit sie vom Vorgang verwendet werden können. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.

    Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.

    Geben Sie zum Aktivieren des Metadaten-Cachings für das Intervallliteral einen Wert zwischen 30 Minuten und 7 Tagen an. Beispiel: Geben Sie INTERVAL 4 HOUR für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Wenn die im Cache gespeicherten Metadaten älter sind, ruft der Vorgang stattdessen Metadaten aus Amazon S3 ab.

  • 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 --max_staleness=INTERVAL "1" HOUR \
  --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 \
  --metadata_cache_mode=AUTOMATIC \
  s3://mybucket/myTable/* > mytable_def

bq mk --max_staleness=INTERVAL "1" HOUR \
  --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

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 als Teil seiner Metadaten ein kanonisches Schema. 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 die folgenden 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

Für Delta Lake-Tabellen gelten die folgenden Einschränkungen:

  • 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 zum Aktualisieren von Schematabellen mit automatischer Erkennung 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 Amazon S3-Daten abfragen.

Ressourcen-Metadaten ansehen

Die Ressourcenmetadaten können Sie mit 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-aws-us-east-1.INFORMATION_SCHEMA.JOBS limit 10;"
bq query --use_legacy_sql=false --location=asia-northeast3 \
"SELECT * FROM region-aws-ap-northeast-2.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.

Im folgenden Beispiel werden die Metadaten-Aktualisierungsjobs aufgelistet:

SELECT
 *
FROM
 `region-aws-us-east-1.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
 job_id LIKE '%metadata_cache_refresh%'
 AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
ORDER BY start_time desc
LIMIT 10;

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.

VPC-Zugriff von BigQuery Omni auf Amazon S3 zulassen

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 S3-Bucket-Richtlinie erstellen, um BigQuery Omni Zugriff auf Ihre Amazon S3-Ressourcen zu gewähren. So wird sichergestellt, dass nur autorisierte BigQuery Omni-VPCs mit Ihrem Amazon S3-Konto interagieren können, was die Sicherheit Ihrer Daten erhöht.

S3-Bucket-Richtlinie für die BigQuery Omni-VPC anwenden

Verwenden Sie die AWS-Befehlszeile oder Terraform, um eine S3-Bucket-Richtlinie anzuwenden:

AWS-CLI

Führen Sie den folgenden Befehl aus, um eine S3-Bucket-Richtlinie mit einer Bedingung anzuwenden, die das Attribut aws:SourceVpc enthält:

  aws s3api put-bucket-policy \
    --bucket=BUCKET_NAME \
    --policy "{
      \"Version\": \"2012-10-17\",
      \"Id\": \"RestrictBucketReads\",
      \"Statement\": [
          {
              \"Sid\": \"AccessOnlyToOmniVPC\",
              \"Principal\": \"*\",
              \"Action\": [\"s3:ListBucket\", \"s3:GetObject\"],
              \"Effect\": \"Allow\",
              \"Resource\": [\"arn:aws:s3:::BUCKET_NAME\",
                             \"arn:aws:s3:::BUCKET_NAME/*\"],
              \"Condition\": {
                  \"StringEquals\": {
                    \"aws:SourceVpc\": \"VPC_ID\"
                  }
              }
          }
      ]
    }"

Ersetzen Sie Folgendes:

  • BUCKET_NAME: Der Amazon S3-Bucket, auf den BigQuery zugreifen soll.
  • VPC_ID: die BigQuery Omni-VPC-ID der BigQuery Omni-Region, die mit dem Amazon S3-Bucket zusammen collocated ist. Diese Informationen finden Sie in der Tabelle auf dieser Seite.

Terraform

Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:

  resource "aws_s3_bucket" "example" {
    bucket = "BUCKET_NAME"
  }

  resource "aws_s3_bucket_policy" "example" {
    bucket = aws_s3_bucket.example.id
    policy = jsonencode({
      Version = "2012-10-17"
      Id      = "RestrictBucketReads"
      Statement = [
          {
              Sid       = "AccessOnlyToOmniVPC"
              Effect    = "Allow"
              Principal = "*"
              Action    = ["s3:GetObject", "s3:ListBucket"]
              Resource  = [
                  aws_s3_bucket.example.arn,
                  "${aws_s3_bucket.example.arn}/*"
                  ]
              Condition = {
                  StringEquals = {
                      "aws:SourceVpc": "VPC_ID"
                  }
              }
          },
      ]
    })
  }

Ersetzen Sie Folgendes:

  • BUCKET_NAME: Der Amazon S3-Bucket, auf den BigQuery zugreifen soll.
  • VPC_ID: die BigQuery Omni-VPC-ID der BigQuery Omni-Region, die mit dem Amazon S3-Bucket zusammen collocated ist.

VPC-Ressourcen-IDs von BigQuery Omni

Region VPC-ID
aws-ap-northeast-2 vpc-0b488548024288af2
aws-ap-southeast-2 vpc-0726e08afef3667ca
aws-eu-central-1 vpc-05c7bba12ad45558f
aws-eu-west-1 vpc-0e5c646979bbe73a0
aws-us-east-1 vpc-0bf63a2e71287dace
aws-us-west-2 vpc-0cc24e567b9d2c1cb

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