ObjectRef-Spalten in Tabellenschemas angeben

Mit ObjectRef-Spalten können Sie unstrukturierte Daten in eine BigQuery-Standardtabelle einbinden, indem Sie Metadaten und Verbindungsinformationen für Objekte in Cloud Storage speichern. In einer Produkttabelle können Sie beispielsweise jedes Produktbild in derselben Zeile wie die restlichen Produktinformationen speichern.

In diesem Dokument wird beschrieben, wie Sie ein Tabellenschema mit STRUCT-Spalten definieren, die das ObjectRef-Format verwenden. Weitere Informationen zum Arbeiten mit multimodalen Daten finden Sie unter Multimodale Daten analysieren und in der Anleitung 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 Standard-Zieltabelle angegeben sind.

ObjectRef-Werte beibehalten

Alle von Ihnen erstellten Objekttabellen enthalten eine ref-Spalte mit einem ObjectRef-Wert für das jeweilige Objekt. Wenn Sie bereits eine Objekttabelle haben, können Sie sie mit Ihrer Standardtabelle über die Spalte mit der Objekt-URI verknüpfen, um ObjectRef-Werte zu füllen und zu aktualisieren. Das ist effizienter, da die 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 zusammenzuführen und ObjectRef-Werte zu füllen und zu aktualisieren. Alle ObjectRef-Werte, die in Storage Insights-Datasets erstellt werden, 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 delegierten Zugriff zu verwenden.

Wenn Sie keine vorhandene Objekttabelle oder kein Storage Insights-Dataset haben, können Sie die Funktion 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

Sie können ObjectRef-Werte in STRUCT-Spalten speichern, die das ObjectRef-Format verwenden, also STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.

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

SQL-Funktionen

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

  1. Rufen Sie in der Cloud de Confiance 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: der Name des zu erstellenden Datasets.
    • 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 im Format location.connection_id verwenden kann. Beispiel: us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Cloud de Confiance -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 die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) für jeden Cloud Storage-Bucket zuweisen, in dem 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 Sie eine ObjectRef-Spalte und füllen Sie sie mit Daten aus einer ref-Spalte einer Objekttabelle:

  1. Rufen Sie in der Cloud de Confiance 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: der Name des zu erstellenden Datasets.
    • 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 einbinden 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, die Arrays von ObjectRef-Werten enthält. Sie können beispielsweise ein Video in separate Bilder aufteilen und diese Bilder dann als Array von ObjectRef-Werten speichern.

Mit der Funktion ARRAY_AGG können Sie Arrays von ObjectRef-Werten aggregieren, einschließlich der Verwendung der ORDER BY-Klausel, um die Objektreihenfolge bei Bedarf beizubehalten. Mit dem Operator UNNEST können Sie ein Array von ObjectRef-Werten in einzelne ObjectRef-Werte parsen. Bei Bedarf können Sie die WITH OFFSET-Klausel verwenden, um die Objektreihenfolge beizubehalten. Sie können Objektmetadaten wie den URI-Pfad und den Objektdateinamen verwenden, um ObjectRef-Werte, die Objektblöcke 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 einer ref-Spalte einer Objekttabelle:

  1. Rufen Sie in der Cloud de Confiance 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: der Name des zu erstellenden Datasets.
    • 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

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

  1. Rufen Sie in der Cloud de Confiance 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: der Name des zu erstellenden Datasets.
    • 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 im Format location.connection_id verwenden kann. Beispiel: us-west1.myconnection. Sie können die Verbindungs-ID abrufen, indem Sie sich die Verbindungsdetails in der Cloud de Confiance -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 die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) für jeden Cloud Storage-Bucket zuweisen, in dem 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