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 mit Produkten 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.
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.
ObjectRef-Werte beibehalten
Alle Objekttabellen, die Sie erstellen, haben eine ref-Spalte, die einen ObjectRef-Wert für das jeweilige Objekt enthält. Wenn Sie bereits eine Objekttabelle haben, können Sie sie mit Ihrer Standardtabelle über die Spalte „Objekt-URI“ verknüpfen, um ObjectRef-Werte einzufügen und zu aktualisieren. Das ist effizienter, da keine Metadaten 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 ObjectRef-Werte zu erfassen und zu aktualisieren.
Für alle ObjectRef-Werte, die in Storage Insights-Datasets erstellt werden, ist kein Autorisiert. Wenn Sie diese Objekte abfragen möchten, müssen Sie entweder direkten Zugriff auf das Objekt haben oder dem ObjectRef einen Authorizer 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
Wählen Sie eine der folgenden Optionen aus, um eine ObjectRef-Spalte in einer Standardtabelle zu erstellen und mit Daten zu füllen:
SQL-Funktionen
ObjectRef-Spalte basierend auf der Ausgabe der OBJ.MAKE_REF-Funktion erstellen und mit Daten füllen:
Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.
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: EinSTRING-Wert, der eine Cloud-Ressourcenverbindung enthält, die der Dienst für den Zugriff auf die Objekte in Cloud Storage verwenden kann, im Formatlocation.connection_id. 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.
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 mit Daten aus einer ref-Spalte einer Objekttabelle:
Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.
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.
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önnten beispielsweise ein Video in separate Bilder aufteilen 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 die Objektreihenfolge mit der WITH OFFSET-Klausel beibehalten.
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 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
ObjectRef-Spalte mit Daten aus einer ref-Spalte einer Objekttabelle aktualisieren:
Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.
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 SpalteObjectRefder Standardtabelle enthält.
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:
Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.
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: EinSTRING-Wert, der eine Cloud-Ressourcenverbindung enthält, die der Dienst für den Zugriff auf die Objekte in Cloud Storage verwenden kann, im Formatlocation.connection_id. 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.
Klicken Sie auf Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.