Especifica columnas ObjectRef en esquemas de tablas
Las columnas ObjectRef te permiten integrar datos no estructurados en una
tabla estándar de BigQuery almacenando metadatos y la información de conexión
para los objetos en Cloud Storage. Por ejemplo, en una tabla de productos, puedes
almacenar cada imagen de producto en la misma fila que el resto de la información
del producto.
En este documento, se describe cómo definir un esquema de tabla con columnas STRUCT que
usan el formato ObjectRef. Para obtener más
información sobre cómo trabajar con datos multimodales, consulta
Analiza datos multimodales y el
instructivo
Analiza datos multimodales con SQL.
Requisitos previos
Para propagar y actualizar los valores de ObjectRef en una tabla estándar, la tabla debe
tener una columna STRING que contenga información del URI para los objetos de Cloud Storage
relacionados.
Debes tener un bucket de Cloud Storage que contenga los mismos objetos que se identifican en los datos del URI de la tabla estándar de destino.
Mantén los valores de ObjectRef
Todas las tablas de objetos que crees tendrán una columna ref que contendrá un
valor ObjectRef para el objeto determinado. Si tienes una tabla de objetos existente,
puedes unirla con tu tabla estándar en la columna de URI del objeto
para propagar y actualizar los valores de ObjectRef. Esto es más eficiente porque
evita volver a recuperar los metadatos de Cloud Storage para crear un
valor ObjectRef nuevo.
Del mismo modo, si ya tienes un
conjunto de datos de Storage Insights para los metadatos de objetos,
puedes usar la columna ref.uri o selfLink para unir la tabla estándar
con el conjunto de datos de Storage Insights para propagar y actualizar los valores de ObjectRef.
Los valores ObjectRef creados en los conjuntos de datos de Storage Insights no tienen un
autorizador. Para consultar estos objetos, debes tener
acceso directo al objeto
o agregar un autorizador al ObjectRef para usar
el acceso delegado.
Si no tienes una tabla de objetos o un conjunto de datos de Storage Insights existentes,
puedes usar la función
OBJ.MAKE_REF
para propagar y actualizar los valores de ObjectRef recuperando los metadatos de los objetos
directamente de Cloud Storage. Este enfoque puede ser menos escalable,
ya que requiere la recuperación de metadatos de objetos de Cloud Storage.
Crea una columna ObjectRef
Puedes almacenar valores ObjectRef en columnas STRUCT que usen el
formato ObjectRef,
que es
STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.
Para crear y propagar una columna ObjectRef en una tabla estándar, elige una de
las siguientes opciones:
funciones SQL
Crea y propaga una columna ObjectRef según el resultado de la función
OBJ.MAKE_REF:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, escribe la siguiente oración:
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;
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto. Puedes omitir este argumento si creas la tabla en tu proyecto actual.DATASET_ID: Es el ID del conjunto de datos que crearás.TABLE_NAME: Es el nombre de la tabla estándar que volverás a crear.CONNECTION_ID: Es un valorSTRINGque contiene una conexión a recursos de Cloud que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formatolocation.connection_id. Por ejemplo,us-west1.myconnection. Para obtener el ID de conexión, consulta los detalles de la conexión en la consola de Google Cloud y copia el valor de la última sección del ID de conexión completamente calificado que se muestra en ID de conexión. Por ejemplo:projects/myproject/locations/connection_location/connections/myconnection.Debes otorgar el rol de Usuario de objetos de almacenamiento (
roles/storage.objectUser) a la cuenta de servicio de la conexión en cualquier bucket de Cloud Storage en el que lo uses para acceder a objetos.La conexión debe estar en el mismo proyecto y región que la consulta en la que llamas a la función.
Haz clic en Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
Tabla de objetos
Crea y propaga una columna ObjectRef basada en los datos de una columna ref de la tabla de objetos:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, escribe la siguiente oración:
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;
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto. Puedes omitir este argumento si creas la tabla en tu proyecto actual.DATASET_ID: Es el ID del conjunto de datos que crearás.TABLE_NAME: Es el nombre de la tabla estándar que volverás a crear.OBJECT_TABLE: Es el nombre de la tabla de objetos que contiene los datos de objetos que deseas integrar en la tabla estándar.
Haz clic en Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
Crea una columna ARRAY<ObjectRef>
Puedes crear una columna
ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>>
para que contenga arrays de valores
ObjectRef. Por ejemplo, puedes dividir un video en imágenes separadas y,
luego, almacenarlas como un array de valores ObjectRef.
Puedes usar la
función ARRAY_AGG
para agregar arrays de valores ObjectRef, incluido el uso de la cláusula ORDER BY
para conservar el orden de los objetos si es necesario. Puedes usar el
operador UNNEST
para analizar un array de valores ObjectRef en valores ObjectRef individuales,
incluido el uso de la cláusula WITH OFFSET para conservar el orden de los objetos si es necesario.
Puedes usar los metadatos de los objetos, como la ruta del URI y el nombre de archivo del objeto, para
asignar valores ObjectRef que representen fragmentos de objetos a un valor ObjectRef
que represente el objeto original.
Para ver un ejemplo de cómo trabajar con arrays de valores ObjectRef, consulta la sección
Procesa datos multimodales ordenados con valores ARRAY<ObjectRef>
del instructivo
Analiza datos multimodales con SQL.
Actualiza una columna ObjectRef
Para actualizar una columna ObjectRef en una tabla estándar, elige una de las
siguientes opciones:
Tabla de objetos
Actualiza una columna ObjectRef con datos de una columna
ref de tabla de objetos:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, escribe la siguiente oración:
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 != "";
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto. Puedes omitir este argumento si creas la tabla en tu proyecto actual.DATASET_ID: Es el ID del conjunto de datos que crearás.TABLE_NAME: Es el nombre de la tabla estándar que volverás a crear.OBJECT_TABLE: Es el nombre de la tabla de objetos que contiene los mismos datos de objetos que la columnaObjectRefde la tabla estándar.
Haz clic en Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
funciones SQL
Actualiza una columna ObjectRef con el resultado de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, escribe la siguiente oración:
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT OBJ.MAKE_REF(uri, 'CONNECTION_ID')) WHERE uri != "";
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto. Puedes omitir este argumento si creas la tabla en tu proyecto actual.DATASET_ID: Es el ID del conjunto de datos que crearás.TABLE_NAME: Es el nombre de la tabla estándar que volverás a crear.CONNECTION_ID: Es un valorSTRINGque contiene una conexión a recursos de Cloud que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formatolocation.connection_id. Por ejemplo,us-west1.myconnection. Para obtener el ID de conexión, consulta los detalles de la conexión en la consola de Google Cloud y copia el valor de la última sección del ID de conexión completamente calificado que se muestra en ID de conexión. Por ejemplo:projects/myproject/locations/connection_location/connections/myconnection.Debes otorgar el rol de Usuario de objetos de almacenamiento (
roles/storage.objectUser) a la cuenta de servicio de la conexión en cualquier bucket de Cloud Storage en el que lo uses para acceder a objetos.La conexión debe estar en el mismo proyecto y región que la consulta en la que llamas a la función.
Haz clic en Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.