ObjectRef-Spalten in Tabellenschemas angeben

In diesem Dokument wird beschrieben, wie Sie ein BigQuery-Standardtabellenschema mit Spalten definieren, in denen ObjectRef-Werte gespeichert werden können.

ObjectRef-Werte enthalten Metadaten und Verbindungsinformationen für Objekte in Cloud Storage. Verwenden Sie ObjectRef-Werte, wenn Sie unstrukturierte Daten in eine Standardtabelle einfügen müssen. In einer Tabelle „products“ (Produkte) könnten Sie beispielsweise Produktbilder in derselben Zeile wie die restlichen Produktinformationen speichern, indem Sie eine Spalte mit ObjectRef-Werten hinzufügen. Sie können ObjectRef-Werte in STRUCT-Spalten speichern, die das ObjectRef-Format verwenden, also STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.

Weitere Informationen zum Arbeiten mit multimodalen Daten finden Sie unter Multimodale Daten analysieren. Eine Anleitung zum Arbeiten mit ObjectRef-Daten finden Sie unter Multimodale Daten mit SQL analysieren. Informationen zum Arbeiten mit multimodalen Daten in Python finden Sie unter Multimodale Daten in Python mit BigQuery DataFrames analysieren.

Vorbereitung

Damit ObjectRef-Werte in einer Standardtabelle eingefügt und aktualisiert werden können, muss die Tabelle eine STRING-Spalte mit URI-Informationen für die zugehörigen Cloud Storage-Objekte enthalten.

Sie benötigen einen Cloud Storage-Bucket, der dieselben Objekte enthält, die in den URI-Daten der Zielstandardtabelle angegeben sind. Wenn Sie ObjectRef-Werte in einer Standardtabelle beibehalten möchten, indem Sie eine Objekttabelle verwenden, benötigen Sie auch eine Objekttabelle, die die Objekte in diesem Bucket darstellt.

ObjectRef-Werte beibehalten

Sie können eine Objekttabelle verwenden, um ObjectRef-Werte in einer Standardtabelle einzufügen und zu aktualisieren. Wenn Sie auf der Zulassungsliste für die Vorschau stehen, enthalten alle von Ihnen erstellten Objekttabellen eine ref-Spalte mit einem ObjectRef-Wert für das jeweilige Objekt. Sie können den Objekt-URI verwenden, um die Standardtabelle mit der Objekttabelle zu verknüpfen und so ObjectRef-Werte zu erfassen und zu aktualisieren. Diese Methode wird aus Gründen der Skalierbarkeit empfohlen, da keine Objektmetadaten aus Cloud Storage abgerufen werden müssen.

Wenn Sie keine Objekttabelle erstellen möchten, können Sie die Funktionen OBJ.FETCH_METADATA und OBJ.MAKE_REF verwenden, um ObjectRef-Werte zu füllen und zu aktualisieren, indem Sie Objektmetadaten direkt aus Cloud Storage abrufen. Dieser Ansatz ist möglicherweise weniger skalierbar, da Objektmetadaten aus Cloud Storage abgerufen werden müssen.

ObjectRef-Spalte erstellen

Wählen Sie eine der folgenden Optionen aus, um eine ObjectRef-Spalte in einer Standardtabelle zu erstellen und mit Daten zu füllen:

Objekttabelle

Erstellen und füllen Sie eine ObjectRef-Spalte anhand von Daten aus einer Spalte der Objekttabelle ref:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME
    AS
    SELECT TABLE_NAME.*, OBJECT_TABLE.ref AS objectrefcolumn
    FROM DATASET_ID.TABLE_NAME
    INNER JOIN DATASET_ID.OBJECT_TABLE
    ON OBJECT_TABLE.uri = TABLE_NAME.uri;

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.
    • DATASET_ID: die ID des Datasets, das Sie erstellen.
    • TABLE_NAME: Der Name der Standardtabelle, die Sie neu erstellen.
    • OBJECT_TABLE: der Name der Objekttabelle, die die Objektdaten enthält, die Sie in die Standardtabelle einfügen möchten.

  3. Klicken Sie auf Ausführen.

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

SQL-Funktionen

Erstellen und füllen Sie eine ObjectRef-Spalte basierend auf der Ausgabe der Funktionen OBJ.FETCH_METADATA und OBJ.MAKE_REF:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME
    AS
    SELECT TABLE_NAME.*,
    OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')) AS objectrefcolumn
    FROM DATASET_ID.TABLE_NAME;

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.
    • DATASET_ID: die ID des Datasets, das Sie erstellen.
    • TABLE_NAME: Der Name der Standardtabelle, die Sie neu erstellen.
    • CONNECTION_ID: Ein STRING-Wert, der eine Cloud-Ressourcenverbindung enthält, die der Dienst für den Zugriff auf die Objekte in Cloud Storage verwenden kann, im Format location.connection_id. Beispiel: us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Google Cloud -Konsole ansehen und den Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID kopieren, der unter Verbindungs-ID angezeigt wird. Beispiel: projects/myproject/locations/connection_location/connections/myconnection.

      Sie müssen dem Dienstkonto der Verbindung für jeden Cloud Storage-Bucket, in dem Sie damit auf Objekte zugreifen, die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) zuweisen.

      Die Verbindung muss sich im selben Projekt und in derselben Region wie die Abfrage befinden, in der Sie die Funktion aufrufen.

  3. Klicken Sie auf Ausführen.

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

ARRAY<ObjectRef>-Spalte erstellen

Sie können eine Spalte vom Typ ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> erstellen, die Arrays mit ObjectRef-Werten enthält. Sie können beispielsweise ein Video in einzelne Bilder zerlegen und diese Bilder dann als Array von ObjectRef-Werten speichern.

Mit der ARRAY_AGG-Funktion können Sie Arrays von ObjectRef-Werten aggregieren. Bei Bedarf können Sie mit der ORDER BY-Klausel die Objektreihenfolge beibehalten. Mit dem UNNEST-Operator können Sie ein Array von ObjectRef-Werten in einzelne ObjectRef-Werte parsen. Bei Bedarf können Sie dazu auch die WITH OFFSET-Klausel verwenden, um die Objektreihenfolge beizubehalten. Sie können Objektmetadaten wie den URI-Pfad und den Objektnamen verwenden, um ObjectRef-Werte, die Objektblöcke darstellen, einem ObjectRef-Wert zuzuordnen, der das Originalobjekt darstellt.

Ein Beispiel für die Arbeit mit Arrays von ObjectRef-Werten finden Sie im Abschnitt Geordnete multimodale Daten mit ARRAY<ObjectRef>-Werten verarbeiten im Tutorial Multimodale Daten mit SQL analysieren.

ObjectRef-Spalte aktualisieren

Wählen Sie eine der folgenden Optionen aus, um eine ObjectRef-Spalte in einer Standardtabelle zu aktualisieren:

Objekttabelle

ObjectRef-Spalte mit Daten aus einer ref-Spalte einer Objekttabelle aktualisieren:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME
    SET objectrefcolumn = (SELECT ref FROM DATASET_ID.OBJECT_TABLE WHERE OBJECT_TABLE.uri = TABLE_NAME.uri)
    WHERE uri != "";

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.
    • DATASET_ID: die ID des Datasets, das Sie erstellen.
    • TABLE_NAME: Der Name der Standardtabelle, die Sie neu erstellen.
    • OBJECT_TABLE: der Name der Objekttabelle, die dieselben Objektdaten wie die Spalte ObjectRef der Standardtabelle enthält.

  3. Klicken Sie auf Ausführen.

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

SQL-Funktionen

So aktualisieren Sie eine ObjectRef-Spalte mit der Ausgabe der Funktionen OBJ.FETCH_METADATA und OBJ.MAKE_REF:

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME
    SET objectrefcolumn = (SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')))
    WHERE uri != "";

    Dabei gilt:

    • PROJECT_ID: Ihre Projekt-ID. Sie können dieses Argument überspringen, wenn Sie die Tabelle in Ihrem aktuellen Projekt erstellen.
    • DATASET_ID: die ID des Datasets, das Sie erstellen.
    • TABLE_NAME: Der Name der Standardtabelle, die Sie neu erstellen.
    • CONNECTION_ID: Ein STRING-Wert, der eine Cloud-Ressourcenverbindung enthält, die der Dienst für den Zugriff auf die Objekte in Cloud Storage verwenden kann, im Format location.connection_id. Beispiel: us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Google Cloud -Konsole ansehen und den Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID kopieren, der unter Verbindungs-ID angezeigt wird. Beispiel: projects/myproject/locations/connection_location/connections/myconnection.

      Sie müssen dem Dienstkonto der Verbindung für jeden Cloud Storage-Bucket, in dem Sie damit auf Objekte zugreifen, die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) zuweisen.

      Die Verbindung muss sich im selben Projekt und in derselben Region wie die Abfrage befinden, in der Sie die Funktion aufrufen.

  3. Klicken Sie auf Ausführen.

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

Nächste Schritte