Amazon S3-Übertragungen

Mit BigQuery Data Transfer Service für Amazon S3 können Sie wiederkehrende Ladejobs von Amazon S3 in BigQuery automatisch planen und verwalten.

Vorbereitung

Bevor Sie eine Amazon S3-Übertragung erstellen, sind folgende Schritte erforderlich:

Beschränkungen

Amazon S3-Übertragungen unterliegen den folgenden Beschränkungen:

  • Derzeit kann der Bucket-Teil des Amazon S3-URI nicht parametrisiert werden.
  • Übertragungen aus Amazon S3 werden immer mit der Einstellung WRITE_APPEND ausgelöst. Damit werden die Daten an die Zieltabelle angefügt. Weitere Informationen finden Sie unter configuration.load.writeDisposition in der Konfiguration des Ladejobs.
  • Je nach Format Ihrer Amazon S3-Quelldaten sind weitere Beschränkungen möglich. Weitere Informationen erhalten Sie hier:

Erforderliche Berechtigungen

Vor dem Erstellen einer Amazon S3-Übertragung sind folgende Schritte erforderlich:

  • Sorgen Sie dafür, dass die Person, die die Übertragung erstellt, die folgenden Berechtigungen in BigQuery hat:

    • bigquery.transfers.update-Berechtigungen zum Erstellen der Übertragung
    • bigquery.datasets.update-Berechtigungen für das Ziel-Dataset

    Die vordefinierte IAM-Rolle bigquery.admin enthält Berechtigungen vom Typ bigquery.transfers.update und bigquery.datasets.update. Weitere Informationen zu IAM-Rollen in BigQuery Data Transfer Service finden Sie unter Referenz zur Zugriffssteuerung.

  • Prüfen Sie anhand der Dokumentation zu Amazon S3, ob Sie alle erforderlichen Berechtigungen zum Aktivieren der Übertragung konfiguriert haben. Auf die Amazon S3-Quelldaten muss mindestens die AWS-Verwaltungsrichtlinie AmazonS3ReadOnlyAccess angewendet werden.

Eine Amazon S3-Datenübertragung einrichten

Führen Sie zum Erstellen einer Amazon S3-Datenübertragung folgende Schritte aus:

Console

  1. Rufen Sie in der Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie auf Übertragungen.

  3. Klicken Sie auf Übertragung erstellen.

  4. Auf der Seite Übertragung erstellen:

    • Wählen Sie im Abschnitt Source type (Quelltyp) für Source (Quelle) die Option Amazon S3 aus.

      Übertragungsquelle

    • Geben Sie im Abschnitt Transfer config name (Konfigurationsname für Übertragung) für Display name (Anzeigename) einen Namen wie My Transfer für die Übertragung ein. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung einfach identifizieren können, wenn Sie sie später ändern müssen.

      Name der Übertragung

    • Übernehmen Sie im Abschnitt Schedule options (Zeitplanoptionen) für Schedule (Zeitplan) den Standardwert (Start now) (Jetzt starten) oder klicken Sie auf Start at a set time (Zu einer festgelegten Zeit starten).

      • Wählen Sie für Repeats (Wiederholungen) eine Option aus, um festzulegen, wie oft die Übertragung ausgeführt werden soll. Es gibt folgende Optionen:

        • Daily (Täglich (Standardeinstellung))
        • Weekly (Wöchentlich)
        • Monthly (Monatlich)
        • Custom (Benutzerdefiniert)
        • On-demand (Bei Bedarf)

        Wenn Sie eine andere Option als "Daily" ("Täglich") auswählen, sind zusätzliche Optionen verfügbar. Wenn Sie beispielsweise "Weekly" (Wöchentlich) auswählen, wird eine Option zur Auswahl des Wochentags angezeigt.

      • Geben Sie für Start date and run time (Startdatum und Laufzeit) das Datum und die Uhrzeit für den Beginn der Übertragung ein. Wenn Sie Start now (Jetzt starten) auswählen, ist diese Option deaktiviert.

        Zeitplan für die Übertragung

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

      Dataset übertragen

    • Im Abschnitt Data source details:

      • 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.
      • Für Amazon S3-URI geben Sie den URI im folgenden Format ein s3://mybucket/myfolder/.... In URIs sind auch Parameter möglich.
      • Geben Sie für die Access key ID (Zugangsschlüssel-ID) Ihre Zugangsschlüssel-ID ein.
      • Geben Sie für Secret access key (geheimer Zugriffsschlüssel) Ihren geheimen Zugriffsschlüssel ein.
      • Wählen Sie für File format (Dateiformat) Ihr Datenformat aus: newline delimited JSON (durch Zeilenumbruch getrennte JSON), Avro, Parquet oder ORC.

        Details zur S3-Quelle

    • Geben Sie im Abschnitt Transfer options (Übertragungsoptionen) unter Number of errors allowed (Anzahl zulässiger Fehler) die maximale Anzahl fehlerhafter Einträge ein, die ignoriert werden können.

      Number of errors allowed (Anzahl zulässiger Fehler)

    • 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. Unbekannte Werte werden ignoriert. Bei CSV-Dateien werden zusätzliche Werte am Ende einer Zeile ignoriert.

      Unbekannte Werte ignorieren

    • 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

    • Optional: Im Abschnitt Notification options (Benachrichtigungsoptionen):

      • Klicken Sie auf die Umschaltfläche, um E-Mail-Benachrichtigungen zu aktivieren. Wenn Sie diese Option aktivieren, erhält der Übertragungsadministrator eine E-Mail-Benachrichtigung, wenn ein Übertragungsvorgang fehlschlägt.
      • Wählen Sie für Select a Pub/Sub topic den Namen Ihres Themas aus oder klicken Sie auf Create a topic, um eines zu erstellen. Mit dieser Option werden Pub/Sub-Ausführungsbenachrichtigungen für Ihre Übertragung konfiguriert.
  5. Klicken Sie auf Speichern.

bq

Geben Sie den Befehl bq mk ein und geben Sie das Flag --transfer_config für die Übertragungserstellung an.

bq mk \
--transfer_config \
--project_id=project_id \
--data_source=data_source \
--display_name=name \
--target_dataset=dataset \
--params='parameters'

Dabei gilt:

  • project_id: Optional. Ihre Google Cloud-Projekt-ID. Wenn --project_id nicht bereitgestellt wird, um ein bestimmtes Projekt anzugeben, wird das Standardprojekt verwendet.
  • data_source: Erforderlich. Die Datenquelle: amazon_s3.
  • display_name: Erforderlich. Der Anzeigename für die Übertragungskonfiguration. Der Übertragungsname kann ein beliebiger Wert sein, mit dem Sie die Übertragung einfach identifizieren können, wenn Sie sie später ändern müssen.
  • dataset: erforderlich. Das Ziel-Dataset für die Übertragungskonfiguration.
  • parameters: Erforderlich. Die Parameter für die erstellte Übertragungskonfiguration im JSON-Format. Beispiel: --params='{"param":"param_value"}'. Im Folgenden finden Sie die Parameter für eine Amazon S3-Übertragung:

    • destination_table_name_template: Erforderlich. Der Name der Zieltabelle.
    • data_path: Erforderlich. Der Amazon S3-URI im folgenden Format:

      s3://mybucket/myfolder/...

      In URIs sind auch Parameter möglich.

    • access_key_id: Erforderlich. Ihre Zugriffsschlüssel-ID.

    • secret_access_key: Erforderlich. Ihr geheimer Zugriffsschlüssel.

    • file_format: Optional. Gibt den Typ der Dateien an, die Sie übertragen möchten: CSV, JSON, AVRO, PARQUET oder ORC. Der Standardwert ist CSV.

    • max_bad_records: Optional. Die Anzahl der zulässigen ungültigen Datensätze. Der Standardwert ist 0.

    • ignore_unknown_values: Optional und wird ignoriert, wenn file_format nicht JSON oder CSV ist. Gibt an, ob unbekannte Werte in Ihren Daten ignoriert werden sollen.

    • field_delimiter: Optional und gilt nur, wenn file_format gleich CSV ist. Das Zeichen, das Felder trennt. Der Standardwert ist ein Komma.

    • 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 gefüllt.

Mit dem folgenden Befehl wird beispielsweise eine Amazon S3-Übertragung mit dem Namen My Transfer erstellt. Dabei werden ein data_path_template mit einem Wert von s3://mybucket/myfile/*.csv, das Ziel-Dataset mydataset und bei file_format das Dateiformat CSV verwendet. Dieses Beispiel enthält nicht standardmäßige Werte für die optionalen Parameter, die dem CSV-Dateiformat zugeordnet sind.

Die Übertragung wird im Standardprojekt erstellt:

bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"data_path_template":"s3://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"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",
"delete_source_files":"true"}' \
--data_source=amazon_s3

Nachdem Sie den Befehl ausgeführt haben, erhalten Sie eine Meldung wie die Folgende:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

Folgen Sie der Anleitung und fügen Sie den Authentifizierungscode in die Befehlszeile ein.

API

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

Daten abfragen

Bei der Übertragung Ihrer Daten in BigQuery werden die Daten in Tabellen geschrieben, die nach Aufnahmezeit partitioniert sind. Weitere Informationen finden Sie unter Einführung in partitionierte Tabellen.

Wenn Sie die Tabellen direkt abfragen, anstatt die automatisch generierten Ansichten zu verwenden, müssen Sie in der Abfrage die Pseudospalte _PARTITIONTIME verwenden. Weitere Informationen finden Sie unter Partitionierte Tabellen abfragen.

Auswirkungen von Präfixabgleichen gegenüber Platzhalterabgleichen

Die Amazon S3 API unterstützt den Präfixabgleich, nicht aber den Platzhalterabgleich. Alle Amazon S3-Dateien, die mit einem Präfix übereinstimmen, werden in Google Cloud übertragen. Dabei werden jedoch nur die Dateien in BigQuery geladen, die mit der Amazon S3-URI in der Übertragungskonfiguration übereinstimmen. Das kann zu übermäßigen Kosten bei Amazon S3 für ausgehenden Traffic bei Dateien führen, die zwar übertragen, aber nicht in BigQuery geladen werden.

Sehen Sie sich als Beispiel diesen Datenpfad an:

s3://bucket/folder/*/subfolder/*.csv

Zusammen mit diesen Dateien am Quellspeicherort:

s3://bucket/folder/any/subfolder/file1.csv
s3://bucket/folder/file2.csv

Damit werden alle Amazon S3-Dateien mit dem Präfix s3://bucket/folder/ an Google Cloud übertragen. In diesem Beispiel werden file1.csv und file2.csv übertragen.

Es werden aber nur Dateien, die mit s3://bucket/folder/*/subfolder/*.csv übereinstimmen, in BigQuery geladen. In diesem Beispiel wird nur file1.csv in BigQuery geladen.

Fehlerbehebung

Im Folgenden finden Sie Informationen zu häufigen Fehlern und eine jeweils empfohlene Lösung.

Amazon S3-Fehler des Typs PERMISSION_DENIED

Fehler Empfohlene Maßnahmen
Die von Ihnen angegebene AWS-Zugriffsschlüssel-ID ist in unseren Datensätzen nicht vorhanden. Prüfen Sie, ob der Zugriffsschlüssel vorhanden ist und die ID korrekt ist.
Die von uns berechnete Anfragesignatur stimmt nicht mit der von Ihnen angegebenen Signatur überein. Prüfen Sie den Schlüssel und die Signaturmethode. Achten Sie darauf, dass die Übertragungskonfiguration den richtigen geheimen Zugriffsschlüssel hat.
Der Speicherort des S3-Quell-Buckets konnte nicht abgerufen werden. Weitere Details: Zugriff verweigert

Der Speicherort des S3-Quell-Buckets konnte nicht abgerufen werden. Weitere Details: HTTP/1.1 403 Unzulässig

S3-Fehlermeldung: Zugriff verweigert.
Der AWS IAM-Nutzer muss folgende Berechtigungen haben:
  • Auflisten des Amazon S3-Buckets
  • Abrufen des Bucket-Standorts
  • Lesen der Objekte im Bucket
Server kann Objektupload nicht initialisieren.; InvalidObjectState: Der Vorgang ist für die Speicherklasse des Objekts nicht gültig.

Der Speicherort des S3-Quell-Buckets konnte nicht abgerufen werden. Weitere Details: Der Zugriff auf dieses Objekt wurde deaktiviert.
Stellen Sie alle Objekte wieder her, die in Amazon Glacier archiviert wurden. Objekte in Amazon S3, die in Amazon Glacier archiviert werden, sind erst wieder verfügbar, wenn sie wiederhergestellt wurden.
Der Zugriff auf dieses Objekt wurde deaktiviert. Prüfen Sie, ob der Amazon S3-URI in der Übertragungskonfiguration korrekt ist.

Fehler bei Amazon S3-Übertragungen

Fehler Empfohlene Maßnahmen
Die Anzahl der zu übertragenden Dateien überschreitet das Limit von 10.000. Prüfen Sie, ob Sie die Anzahl der Platzhalter im Amazon S3-URI auf einen einzigen Wert reduzieren können. Falls ja, versuchen Sie es mit einer neuen Übertragungskonfiguration. Die maximale Anzahl von Dateien pro Übertragungsausführungen ist nun höher.

Prüfen Sie, ob Sie die Übertragungskonfiguration in mehrere Übertragungskonfigurationen aufteilen können, wobei jeweils ein Teil der Quelldaten übertragen wird.
Die Größe der Dateien in der Übertragung überschreitet das Limit von 16492674416640 Byte. Prüfen Sie, ob Sie die Übertragungskonfiguration in mehrere Übertragungskonfigurationen aufteilen können, wobei jeweils ein Teil der Quelldaten übertragen wird.

Allgemeine Probleme

Fehler Empfohlene Maßnahmen
Dateien werden von Amazon S3 übertragen, aber nicht in BigQuery geladen. Die Übertragungslogs sehen in etwa so aus:

Datenverschiebung von Amazon S3 nach Google Cloud abgeschlossen: <NNN>-Objekt(e) verschoben.
Keine neuen Dateien gefunden, die mit <Amazon S3 URI> übereinstimmen.
Prüfen Sie, ob der Amazon S3-URI in der Übertragungskonfiguration korrekt ist.

Wenn die Übertragungskonfiguration alle Dateien mit einem gemeinsamen Präfix laden sollte, muss der Amazon S3-URI mit einem Platzhalter enden.
Wenn Sie beispielsweise alle Dateien in s3://my-bucket/my-folder/ laden möchten, muss der Amazon S3-URI in der Übertragungskonfiguration s3://my-bucket/my-folder/* lauten, s3://my-bucket/my-folder/ reicht nicht aus.
Andere Probleme Siehe Fehlerbehebung bei Übertragungskonfigurationen.

Weitere Informationen