Especifica columnas ObjectRef en esquemas de tablas

En este documento, se describe cómo definir un esquema de tabla estándar de BigQuery con columnas que pueden almacenar valores ObjectRef.

Los valores ObjectRef proporcionan metadatos y también información de conexión para los objetos en Cloud Storage. Usa valores ObjectRef cuando necesites integrar datos no estructurados en una tabla estándar. Por ejemplo, en una tabla de productos, puedes almacenar las imágenes de los productos en la misma fila con el resto de la información del producto si agregas una columna que contenga valores 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 obtener más información sobre cómo trabajar con datos multimodales, consulta Cómo analizar datos multimodales. Si quieres ver un instructivo en el que se muestra cómo trabajar con datos de ObjectRef, consulta Cómo analizar datos multimodales con SQL. Para obtener información sobre cómo trabajar con datos multimodales en Python, consulta Cómo analizar datos multimodales en Python con BigQuery DataFrames.

Requisitos previos

Para propagar y actualizar los valores de ObjectRef en una tabla estándar, esta debe tener una columna STRING que contenga información de 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. Si deseas mantener los valores de ObjectRef en una tabla estándar mediante una tabla de objetos, también debes tener una tabla de objetos que represente los objetos de ese bucket.

Se mantendrá la temperatura en ObjectRef

Puedes usar una tabla de objetos para propagar y actualizar los valores de ObjectRef en una tabla estándar. Si estás en la lista de entidades permitidas para la vista previa, las tablas de objetos que crees tendrán una columna ref que contenga un valor ObjectRef para el objeto determinado. Puedes usar el URI del objeto para unir la tabla estándar a la tabla de objetos para propagar y actualizar los valores de ObjectRef. Recomendamos este enfoque para la escalabilidad, ya que evita la necesidad de recuperar metadatos de objetos desde Cloud Storage.

Si no quieres crear una tabla de objetos, puedes usar las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF para propagar y actualizar los valores de ObjectRef recuperando los metadatos de los objetos directamente desde Cloud Storage. Este enfoque puede ser menos escalable, porque requiere la recuperación de metadatos de objetos desde Cloud Storage.

Crea una columna ObjectRef

Para crear y propagar una columna ObjectRef en una tabla estándar, selecciona una de las siguientes opciones:

Tabla de objetos

Crea y propaga una columna ObjectRef basada en los datos de una columna ref de la tabla de objetos:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. 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: el ID de tu 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 recrearás.
    • OBJECT_TABLE: Es el nombre de la tabla de objetos que contiene los datos de objetos que deseas integrar en la tabla estándar.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

funciones SQL

Crea y propaga una columna ObjectRef según el resultado de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. 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.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')) AS objectrefcolumn
    FROM DATASET_ID.TABLE_NAME;

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu 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 recrearás.
    • CONNECTION_ID: Un valor STRING que contiene una conexión de recursos de Cloud que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formato location.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 la uses para acceder a los objetos.

      La conexión debe estar en el mismo proyecto y la misma región que la consulta en la que llamas a la función.

  3. 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 contener 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 arreglos de valores ObjectRef, incluida la cláusula ORDER BY para preservar el orden de los objetos si es necesario. Puedes usar el operador UNNEST para analizar un array de valores ObjectRef en valores ObjectRef individuales, incluso usar la cláusula WITH OFFSET para preservar el orden de los objetos si es necesario. Puedes usar los metadatos del objeto, como la ruta de acceso del URI y el nombre del archivo del objeto, para asignar valores ObjectRef que representan fragmentos de objetos a un valor ObjectRef que representa el objeto original.

Para ver un ejemplo de cómo trabajar con arreglos de valores ObjectRef, consulta la sección Cómo procesar datos multimodales ordenados con valores ARRAY<ObjectRef> del instructivo Cómo analizar datos multimodales con SQL.

Actualiza una columna ObjectRef

Para actualizar una columna ObjectRef en una tabla estándar, selecciona una de las siguientes opciones:

Tabla de objetos

Actualiza una columna ObjectRef con datos de una columna ref de una tabla de objetos:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. 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: el ID de tu 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 recrearás.
    • OBJECT_TABLE: Es el nombre de la tabla de objetos que contiene los mismos datos de objetos que la columna ObjectRef de la tabla estándar.

  3. 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:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu 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 recrearás.
    • CONNECTION_ID: Un valor STRING que contiene una conexión de recursos de Cloud que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formato location.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 la uses para acceder a los objetos.

      La conexión debe estar en el mismo proyecto y la misma región que la consulta en la que llamas a la función.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

¿Qué sigue?