Blob-Speicherübertragungen

Mit dem BigQuery Data Transfer Service für Azure Blob Storage-Connector können Sie wiederkehrende Ladejobs aus Blob Storage automatisch in BigQuery planen und verwalten.

Hinweise

Führen Sie vor dem Erstellen einer Blob Storage-Datenübertragung die folgenden Schritte aus:

Erforderliche Berechtigungen

Zum Erstellen einer Blob Storage-Datenübertragung benötigen Sie die IAM-Berechtigung bigquery.transfers.update (Identity and Access Management). Außerdem benötigen Sie die Berechtigungen bigquery.datasets.get und bigquery.datasets.update für das Ziel-Dataset.

Die vordefinierte IAM-Rolle bigquery.admin enthält die Berechtigungen, die Sie zum Erstellen einer Blob Storage-Datenübertragung benötigen.

Weitere Informationen zu BigQuery IAM finden Sie unter Zugriffssteuerung mit IAM.

Informationen zum Prüfen der richtigen Berechtigungen in Blob Storage zum Aktivieren der Datenübertragung finden Sie unter Shared Access Signature (SAS).

Wenn Sie Benachrichtigungen über die Übertragungsausführung für Pub/Sub einrichten möchten, benötigen Sie die Berechtigung pubsub.topics.setIamPolicy. Pub/Sub-Berechtigungen sind nicht nur für E-Mail-Benachrichtigungen erforderlich. Weitere Informationen finden Sie unter BigQuery Data Transfer Service-Ausführungsbenachrichtigungen.

Beschränkungen

Blob Storage-Datenübertragungen unterliegen den folgenden Einschränkungen:

Blob Storage-Datenübertragung einrichten

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenübertragungen auf.

    Zu „Datenübertragungen”

  2. Klicken Sie auf Übertragung erstellen.

  3. Führen Sie auf der Seite Übertragung erstellen die folgenden Schritte aus:

    • Wählen Sie im Abschnitt Quelltyp für Quelle die Option Azure Blob Storage aus.

      Quelltyp übertragen

    • Geben Sie im Abschnitt Konfigurationsname für Übertragung für Anzeigename einen Namen für die Datenübertragung ein.

    • Im Abschnitt Zeitplanoptionen:

      • Wählen Sie eine Wiederholungshäufigkeit aus. Wenn Sie Stunden, Tage, Wochen oder Monate auswählen, müssen Sie auch eine Häufigkeit angeben. Sie können auch Benutzerdefiniert auswählen, um eine benutzerdefinierte Wiederholungshäufigkeit anzugeben. Wenn Sie On-Demand auswählen, wird diese Datenübertragung ausgeführt, wenn Sie die Datenübertragung manuell auslösen.

      • Wählen Sie gegebenenfalls Jetzt starten oder Zu festgelegter Zeit starten aus und geben Sie ein Startdatum und eine Laufzeit an.

    • Wählen Sie im Abschnitt Destination settings (Zieleinstellungen) für Dataset das Dataset aus, das Sie zum Speichern Ihrer Daten erstellt haben.

    • Führen Sie im Abschnitt Details zur Datenquelle folgende Schritte aus:

      • Geben Sie für Destination table (Zieltabelle) den Namen der Tabelle ein, die Sie zum Speichern Ihrer Daten in BigQuery erstellt haben. In Namen von Zieltabellen sind auch Parameter möglich.
      • Geben Sie unter Azure storage account name (Name des Azure-Speicherkontos) den Namen des Blob-Speicherkontos ein.
      • Geben Sie unter Containername den Namen des Blob-Speicher-Containers ein.
      • Geben Sie unter Datenpfad den Pfad zum Filtern der Dateien ein, die übertragen werden sollen. Beispiele ansehen
      • Geben Sie unter SAS-Token das Azure SAS-Token ein.
      • Wählen Sie als File format (Dateiformat) Ihr Quelldatenformat aus.
      • Wählen Sie unter Schreibanordnung die Option WRITE_APPEND, um neue Daten schrittweise an die Zieltabelle anzuhängen, oder WRITE_TRUNCATE, um Daten in der Zieltabelle bei jeder Übertragungsausführung zu überschreiben. WRITE_APPEND ist der Standardwert für Schreibdisposition.

      Weitere Informationen dazu, wie der BigQuery Data Transfer Service Daten mit WRITE_APPEND oder WRITE_TRUNCATE aufnimmt, finden Sie unter Datenaufnahme für Azure Blob-Übertragungen. Weitere Informationen zum Feld writeDisposition finden Sie unter JobConfigurationLoad.

      Details zur Datenquelle

    • Führen Sie im Abschnitt Übertragungsoptionen folgende Schritte aus:

      • Geben Sie unter Anzahl zulässiger Fehler einen ganzzahligen Wert für die maximale Anzahl der fehlerhaften Datensätze ein, die ignoriert werden können. Der Standardwert ist 0.
      • (Optional) Geben Sie unter Dezimalzieltypen eine durch Kommas getrennte Liste möglicher SQL-Datentypen ein, in die Dezimalwerte in den Quelldaten konvertiert werden. Welcher SQL-Datentyp für die Konvertierung ausgewählt wird, hängt von folgenden Bedingungen ab:
        • In der Reihenfolge NUMERIC, BIGNUMERIC und STRING wird ein Typ ausgewählt, wenn er in der angegebenen Liste enthalten ist und die Genauigkeit und die Skalierung unterstützt.
        • Wenn keiner der aufgelisteten Datentypen die Genauigkeit und die Skalierung unterstützt, wird der Datentyp ausgewählt, der den in der angegebenen Liste breitesten Bereich unterstützt. Geht ein Wert beim Lesen der Quelldaten über den unterstützten Wert hinaus, wird ein Fehler ausgegeben.
        • Der Datentyp STRING unterstützt alle Genauigkeits- und Skalierungswerte.
        • Wenn dieses Feld leer bleibt, wird der Datentyp standardmäßig auf NUMERIC,STRING für ORC und NUMERIC für andere Dateiformate gesetzt.
        • Dieses Feld darf keine doppelten Datentypen enthalten.
        • Die Reihenfolge der aufgelisteten Datentypen wird ignoriert.
    • Wenn Sie als Dateiformat CSV oder JSON ausgewählt haben, aktivieren Sie im Abschnitt JSON, CSV die Option Ignore unknown values (Unbekannte Werte ignorieren), um Zeilen zu akzeptieren, die Werte enthalten, die nicht mit dem Schema übereinstimmen.

    • Wenn Sie als Dateiformat CSV oder JSON ausgewählt haben, geben Sie im Abschnitt CSV weitere CSV-Optionen zum Laden von Daten ein.

      CSV-Optionen

    • Im Bereich Benachrichtigungsoptionen können Sie E-Mail-Benachrichtigungen und Pub/Sub-Benachrichtigungen aktivieren.

      • Wenn Sie E-Mail-Benachrichtigungen aktivieren, erhält der Übertragungsadministrator eine E-Mail-Benachrichtigung, wenn ein Übertragungsvorgang fehlschlägt.
      • Wenn Sie Pub/Sub-Benachrichtigungen aktivieren, wählen Sie einen Themennamen aus, in dem Sie veröffentlichen möchten, oder klicken Sie auf Thema erstellen, um eins zu erstellen.
    • Wenn Sie CMEKs verwenden, wählen Sie im Abschnitt Erweiterte Optionen die Option Vom Kunden verwalteter Schlüssel aus. Es wird eine Liste Ihrer verfügbaren CMEKs angezeigt, aus denen Sie wählen können. Informationen zur Funktionsweise von CMEKs mit dem BigQuery Data Transfer Service finden Sie unter Verschlüsselungsschlüssel mit Übertragungen angeben.

  4. Klicken Sie auf Speichern.

bq

Verwenden Sie den Befehl bq mk --transfer_config, um eine Blob Storage-Übertragung zu erstellen:

bq mk \
  --transfer_config \
  --project_id=PROJECT_ID \
  --data_source=DATA_SOURCE \
  --display_name=DISPLAY_NAME \
  --target_dataset=DATASET \
  --destination_kms_key=DESTINATION_KEY \
  --params=PARAMETERS

Dabei gilt:

  • PROJECT_ID: (Optional) Die Projekt-ID, die Ihr Ziel-Dataset enthält. Wenn keine Angabe erfolgt, wird das Standardprojekt verwendet.
  • DATA_SOURCE: azure_blob_storage.
  • DISPLAY_NAME: Der Anzeigename für die Datenübertragungskonfiguration. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung identifizieren können, wenn Sie sie später ändern müssen.
  • DATASET: Das Ziel-Dataset für die Datenübertragungskonfiguration.
  • DESTINATION_KEY: Optional: die Cloud KMS-Schlüsselressourcen-ID, z. B. projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name.
  • PARAMETERS: die Parameter für die Datenübertragungskonfiguration im JSON-Format. Beispiel: --params={"param1":"value1", "param2":"value2"} Im Folgenden finden Sie die Parameter für eine Blob Storage-Datenübertragung:
    • destination_table_name_template: erforderlich. Der Name der Zieltabelle.
    • storage_account: erforderlich. Der Name des Blob-Speicherkontos.
    • container: erforderlich. Der Blob-Speichername des Blobs.
    • data_path: Optional. Der Pfad zum Filtern von Dateien, die übertragen werden sollen. Beispiele ansehen
    • sas_token: erforderlich. Das Azure SAS-Token
    • file_format: Optional. Der Typ der Dateien, die Sie übertragen möchten: CSV, JSON, AVRO, PARQUET oder ORC. Der Standardwert ist CSV.
    • write_disposition: Optional. Wählen Sie WRITE_APPEND aus, um Daten an die Zieltabelle anzuhängen, oder WRITE_TRUNCATE, um Daten in der Zieltabelle zu überschreiben. Der Standardwert ist WRITE_APPEND.
    • max_bad_records: Optional. Die Anzahl der zulässigen ungültigen Datensätze. Der Standardwert ist 0.
    • decimal_target_types: Optional. Eine durch Kommas getrennte Liste möglicher SQL-Datentypen, in die Dezimalwerte in den Quelldaten konvertiert werden. Wenn dieses Feld nicht angegeben ist, wird der Datentyp für ORC standardmäßig auf NUMERIC,STRING und für die anderen Dateiformate auf NUMERIC gesetzt.
    • ignore_unknown_values: Optional und wird ignoriert, wenn file_format nicht JSON oder CSV ist. Legen Sie true fest, um Zeilen zu akzeptieren, die Werte enthalten, die nicht mit dem Schema übereinstimmen.
    • field_delimiter: Optional und gilt nur, wenn file_format gleich CSV ist. Das Zeichen, das Felder trennt. Der Standardwert ist ,.
    • skip_leading_rows: Optional und gilt nur, wenn file_format gleich CSV ist. Gibt die Anzahl der Kopfzeilen an, die nicht importiert werden sollen. Der Standardwert ist 0.
    • allow_quoted_newlines: Optional und gilt nur, wenn file_format gleich CSV ist. Gibt an, ob Zeilenumbrüche in Feldern in Anführungszeichen zulässig sind.
    • allow_jagged_rows: Optional und gilt nur, wenn file_format gleich CSV ist. Gibt an, ob Zeilen ohne nachgestellte optionale Spalten zulässig sind. Die fehlenden Werte werden mit NULL ausgefüllt.

Im Folgenden wird beispielsweise eine Blob Storage-Datenübertragung mit dem Namen mytransfer erstellt:

bq mk \
  --transfer_config \
  --data_source=azure_blob_storage \
  --display_name=mytransfer \
  --target_dataset=mydataset \
  --destination_kms_key=projects/myproject/locations/us/keyRings/mykeyring/cryptoKeys/key1
  --params={"destination_table_name_template":"mytable",
      "storage_account":"myaccount",
      "container":"mycontainer",
      "data_path":"myfolder/*.csv",
      "sas_token":"my_sas_token_value",
      "file_format":"CSV",
      "max_bad_records":"1",
      "ignore_unknown_values":"true",
      "field_delimiter":"|",
      "skip_leading_rows":"1",
      "allow_quoted_newlines":"true",
      "allow_jagged_rows":"false"}

API

Verwenden Sie die Methode projects.locations.transferConfigs.create und geben Sie eine Instanz der Ressource TransferConfig an.

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.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create azure blob storage transfer config.
public class CreateAzureBlobStorageTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String displayName = "MY_TRANSFER_DISPLAY_NAME";
    final String datasetId = "MY_DATASET_ID";
    String tableId = "MY_TABLE_ID";
    String storageAccount = "MY_AZURE_STORAGE_ACCOUNT_NAME";
    String containerName = "MY_AZURE_CONTAINER_NAME";
    String dataPath = "MY_AZURE_FILE_NAME_OR_PREFIX";
    String sasToken = "MY_AZURE_SAS_TOKEN";
    String fileFormat = "CSV";
    String fieldDelimiter = ",";
    String skipLeadingRows = "1";
    Map<String, Value> params = new HashMap<>();
    params.put(
        "destination_table_name_template", Value.newBuilder().setStringValue(tableId).build());
    params.put("storage_account", Value.newBuilder().setStringValue(storageAccount).build());
    params.put("container", Value.newBuilder().setStringValue(containerName).build());
    params.put("data_path", Value.newBuilder().setStringValue(dataPath).build());
    params.put("sas_token", Value.newBuilder().setStringValue(sasToken).build());
    params.put("file_format", Value.newBuilder().setStringValue(fileFormat).build());
    params.put("field_delimiter", Value.newBuilder().setStringValue(fieldDelimiter).build());
    params.put("skip_leading_rows", Value.newBuilder().setStringValue(skipLeadingRows).build());
    createAzureBlobStorageTransfer(projectId, displayName, datasetId, params);
  }

  public static void createAzureBlobStorageTransfer(
      String projectId, String displayName, String datasetId, Map<String, Value> params)
      throws IOException {
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName(displayName)
            .setDataSourceId("azure_blob_storage")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Azure Blob Storage transfer created successfully: " + config.getName());
    } catch (ApiException ex) {
      System.out.print("Azure Blob Storage transfer was not created." + ex.toString());
    }
  }
}

Verschlüsselungsschlüssel mit Übertragungen angeben

Sie können vom Kunden verwaltete Verschlüsselungsschlüssel (CMEKs) angeben, um Daten für eine Übertragungsausführung zu verschlüsseln. Sie können einen CMEK verwenden, um Übertragungen von Azure Blob Storage zu unterstützen.

Wenn Sie einen CMEK mit einer Übertragung angeben, wendet der BigQuery Data Transfer Service den CMEK auf einen zwischengeschalteten Festplatten-Cache von aufgenommenen Daten an, sodass der gesamte Datenübertragungsworkflow CMEK-konform ist.

Sie können eine vorhandene Übertragung nicht aktualisieren, um einen CMEK hinzuzufügen, wenn die Übertragung nicht ursprünglich mit einem CMEK erstellt wurde. Sie können beispielsweise keine Zieltabelle ändern, die ursprünglich standardmäßig verschlüsselt wurde, um jetzt mit CMEK zu verschlüsseln. Umgekehrt können Sie eine CMEK-verschlüsselte Zieltabelle auch nicht auf einen anderen Verschlüsselungstyp ändern.

Sie können einen CMEK für eine Übertragung aktualisieren, wenn die Übertragungskonfiguration ursprünglich mit einer CMEK-Verschlüsselung erstellt wurde. Wenn Sie einen CMEK für eine Übertragungskonfiguration aktualisieren, leitet der BigQuery Data Transfer Service den CMEK bei der nächsten Ausführung der Übertragung an die Zieltabellen weiter, wobei der BigQuery Data Transfer Service während der Übertragungsausführung alle veralteten CMEKs durch den neuen CMEK ersetzt. Weitere Informationen finden Sie unter Übertragung aktualisieren.

Sie können auch Standardschlüssel für Projekte verwenden. Wenn Sie einen Projektstandardschlüssel für eine Übertragung angeben, verwendet der BigQuery Data Transfer Service den Standardschlüssel des Projekts als Standardschlüssel für neue Übertragungskonfigurationen.

Fehler bei der Übertragungseinrichtung beheben

Unterstützung bei Problemen mit der Einrichtung von Datenübertragungen finden Sie unter Übertragungsprobleme mit Blob Storage.

Nächste Schritte