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 Produkttabelle können Sie beispielsweise Produktbilder in derselben Zeile wie die übrigen Produktinformationen speichern, indem Sie eine Spalte mit ObjectRef-Werten hinzufügen. Sie können Werte in STRUCT Spalten speichern, die das ObjectRef Format verwenden, das STRUCT<uri STRING, version STRING, authorizer STRING, details JSON> ist.ObjectRef

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.

Vorbereitung

Wenn Sie ObjectRef-Werte in einer Standardtabelle füllen und aktualisieren möchten, 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.

ObjectRef-Werte verwalten

Alle von Ihnen erstellten Objekttabellen haben eine ref-Spalte, die einen ObjectRef-Wert für das jeweilige Objekt enthält. Wenn Sie eine vorhandene Objekttabelle haben, können Sie sie mit Ihrer Standardtabelle in der Spalte für Objekt-URIs verknüpfen, um ObjectRef-Werte zu füllen und zu aktualisieren. Das ist effizienter, da Metadaten nicht noch einmal aus Cloud Storage abgerufen werden müssen, um einen neuen ObjectRef-Wert zu erstellen.

Wenn Sie bereits ein Storage Insights-Dataset für Objektmetadaten, haben, können Sie die Spalte ref.uri oder selfLink verwenden, um die Standardtabelle mit dem Storage Insights-Dataset zu verknüpfen und so ObjectRef-Werte zu füllen und zu aktualisieren. Alle ObjectRef-Werte, die in Storage Insights-Datasets erstellt wurden, haben keinen Autorisierer. Wenn Sie diese Objekte abfragen möchten, müssen Sie entweder direkten Zugriff auf das Objekt haben oder der ObjectRef einen Autorisierer hinzufügen, um den delegierten Zugriff zu verwenden.

Wenn Sie keine vorhandene Objekttabelle oder kein Storage Insights-Dataset haben, können Sie die OBJ.MAKE_REF Funktion 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 zu füllen:

SQL-Funktionen

Erstellen und füllen Sie eine ObjectRef-Spalte basierend auf der Ausgabe der Funktion 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.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, mit der der Dienst auf die Objekte in Cloud Storage zugreifen 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 Console 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 die Rolle Storage-Objekt-Nutzer (roles/storage.objectUser) für alle Cloud Storage-Bucket zuweisen, in denen Sie damit auf Objekte zugreifen.

      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.

Objekttabelle

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

  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 Standard tabelle einfügen möchten.

  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 ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> -Spalte erstellen, um Arrays von ObjectRef -Werten zu enthalten. 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 mit der WITH OFFSET-Klausel die Objektreihenfolge beibehalten. Sie können Objektmetadaten wie den URI-Pfad und den Objektnamen verwenden, um ObjectRef-Werte, die Objektteile darstellen, einem ObjectRef-Wert zuzuordnen, der das ursprüngliche Objekt darstellt.

Ein Beispiel für die Arbeit mit Arrays von ObjectRef-Werten finden Sie im Abschnitt Geordnete multimodale Daten mit ARRAY<ObjectRef>-Werten verarbeiten der Anleitung 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

Aktualisieren Sie eine ObjectRef-Spalte mit Daten aus der ref-Spalte einer Objekttabelle:

  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 der Standardtabelle ObjectRef enthält.

  3. Klicken Sie auf Ausführen.

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

SQL-Funktionen

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.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, mit der der Dienst auf die Objekte in Cloud Storage zugreifen 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 Console 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 die Rolle Storage-Objekt-Nutzer (roles/storage.objectUser) für alle Cloud Storage-Bucket zuweisen, in denen Sie damit auf Objekte zugreifen.

      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