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 de ObjectRef.

Los valores de ObjectRef proporcionan metadatos e 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 imágenes de productos en la misma fila con el resto de la información del producto agregando una columna que contenga valores ObjectRef. Puedes almacenar valores de ObjectRef en columnas de STRUCT que usan 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 Analiza datos multimodales. Para ver un instructivo que muestra cómo trabajar con datos de ObjectRef, consulta Analiza datos multimodales con SQL. Para obtener información sobre cómo trabajar con datos multimodales en Python, consulta Analiza datos multimodales en Python con BigQuery DataFrames.

Requisitos previos

Para completar y actualizar los valores de ObjectRef en una tabla estándar, esta debe tener una columna STRING que contenga información del URI de los objetos relacionados de Cloud Storage.

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 con una tabla de objetos, también debes tener una tabla de objetos que represente los objetos de ese bucket.

Cómo mantener los valores de 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 versión preliminar, todas las tablas de objetos que crees tendrán una columna ref que contiene un valor ObjectRef para el objeto determinado. Puedes usar el URI del objeto para unir la tabla estándar a la tabla del objeto y, así, completar y actualizar los valores de ObjectRef. Recomendamos este enfoque para la escalabilidad, ya que evita la necesidad de recuperar los metadatos del objeto de 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 objetos directamente desde Cloud Storage. Este enfoque podría ser menos escalable, ya que requiere la recuperación de los metadatos del objeto de Cloud Storage.

Crea una columna ObjectRef

Para crear y completar 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 Trusted 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 basada en el resultado de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:

  1. En la consola de Trusted 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: Es un valor de STRING que contiene una conexión de recursos de nube que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formato location.connection_id. Por ejemplo, us-west1.myconnection. Puedes obtener el ID de conexión consultando los detalles de la conexión en la consola de Trusted Cloud y copiando 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 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 que contenga arrays de valores ObjectRef. Por ejemplo, puedes dividir un video en imágenes separadas y, luego, almacenar estas imágenes como un array de valores ObjectRef.

Puedes usar la función ARRAY_AGG para agregar arreglos de valores ObjectRef, lo que incluye 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, lo que incluye el uso de la cláusula WITH OFFSET para conservar el orden de los objetos si es necesario. Puedes usar metadatos de objetos, como la ruta de URI y el nombre de archivo del objeto, para asignar valores de ObjectRef que representan fragmentos de objetos a un valor de ObjectRef que representa el objeto original.

Para ver un ejemplo de cómo trabajar con arreglos de valores de ObjectRef, consulta la sección Procesa datos multimodales ordenados con valores de ARRAY<ObjectRef> del instructivo Analiza 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 la tabla de objetos:

  1. En la consola de Trusted 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 de la tabla estándar ObjectRef.

  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 de ObjectRef con el resultado de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:

  1. En la consola de Trusted 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: Es un valor de STRING que contiene una conexión de recursos de nube que el servicio puede usar para acceder a los objetos en Cloud Storage, en el formato location.connection_id. Por ejemplo, us-west1.myconnection. Puedes obtener el ID de conexión consultando los detalles de la conexión en la consola de Trusted Cloud y copiando 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 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?