Especificar columnas ObjectRef en esquemas de tabla

.

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

Los valores de ObjectRef proporcionan metadatos e información de conexión de los objetos de Cloud Storage. Usa valores ObjectRef cuando necesites integrar datos no estructurados en una tabla estándar. Por ejemplo, en una tabla de productos, puede almacenar imágenes de productos en la misma fila que el resto de la información de los productos añadiendo una columna que contenga valores ObjectRef. Puede 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 Analizar datos multimodales. Para ver un tutorial que muestra cómo trabajar con datos ObjectRef, consulta Analizar datos multimodales con SQL. Para obtener información sobre cómo trabajar con datos multimodales en Python, consulta el artículo Analizar datos multimodales en Python con BigQuery DataFrames.

Requisitos previos

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

Debe tener un segmento de Cloud Storage que contenga los mismos objetos que se identifican en los datos de URI de la tabla estándar de destino. Si quieres mantener los valores de ObjectRef en una tabla estándar usando una tabla de objetos, también debes tener una tabla de objetos que represente los objetos de ese contenedor.

Mantener los valores de ObjectRef

Puede usar una tabla de objetos para rellenar y actualizar los valores de ObjectRef en una tabla estándar. Si está en la lista de permitidos de la vista previa, las tablas de objetos que cree tendrán una columna ref que contendrá un valor ObjectRef para el objeto en cuestión. Puede usar el URI del objeto para combinar la tabla estándar con la tabla de objetos y, de este modo, rellenar y actualizar los valores de ObjectRef. Recomendamos este enfoque para mejorar la escalabilidad, ya que no es necesario recuperar los metadatos de los objetos de Cloud Storage.

Si no quieres crear una tabla de objetos, puedes usar las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF para rellenar y actualizar los valores de ObjectRef. Para ello, debes obtener 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.

Crear una columna ObjectRef

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

Tabla de objetos

Crea y rellena una columna ObjectRef a partir de los datos de una columna de tabla de objetos ref:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucció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;

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto. Puedes omitir este argumento si vas a crear la tabla en tu proyecto actual.
    • DATASET_ID: el ID del conjunto de datos que vas a crear.
    • TABLE_NAME: el nombre de la tabla estándar que quieres volver a crear.
    • OBJECT_TABLE: el nombre de la tabla de objetos que contiene los datos de objeto que quieres integrar en la tabla estándar.

  3. Haz clic en Ejecutar.

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

Funciones de SQL

Crea y rellena una columna ObjectRef en función de los resultados de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucció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;

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto. Puedes omitir este argumento si vas a crear la tabla en tu proyecto actual.
    • DATASET_ID: el ID del conjunto de datos que vas a crear.
    • TABLE_NAME: el nombre de la tabla estándar que quieres volver a crear.
    • CONNECTION_ID: un valor STRING que contiene una conexión de recursos de Cloud que el servicio puede usar para acceder a los objetos de 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 Google Cloud y copia el valor de la última sección del ID de conexión completo que se muestra en ID de conexión. Por ejemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Debes asignar el rol Usuario de objetos de Storage (roles/storage.objectUser) a la cuenta de servicio de la conexión en cualquier segmento de Cloud Storage en el que la utilices para acceder a objetos.

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

  3. Haz clic en Ejecutar.

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

Crear una columna ARRAY<ObjectRef>

Puedes crear una columna para que contenga matrices de ObjectRef valores.ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> Por ejemplo, puedes dividir un vídeo en imágenes independientes y, a continuación, almacenar estas imágenes como una matriz de valores ObjectRef.

Puede usar la función ARRAY_AGG para agregar matrices de valores ObjectRef, incluida la cláusula ORDER BY para conservar el orden de los objetos si es necesario. Puede usar el operador UNNEST para analizar una matriz de valores ObjectRef y convertirla en valores ObjectRef individuales. También puede usar la cláusula WITH OFFSET para conservar el orden de los objetos si es necesario. Puede usar metadatos de objetos, como la ruta 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 matrices de valores ObjectRef, consulte la sección Procesar datos multimodales ordenados con valores ARRAY<ObjectRef> del tutorial Analizar datos multimodales con SQL.

Actualizar una columna ObjectRef

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

Tabla de objetos

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

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucció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 != "";

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto. Puedes omitir este argumento si vas a crear la tabla en tu proyecto actual.
    • DATASET_ID: el ID del conjunto de datos que vas a crear.
    • TABLE_NAME: el nombre de la tabla estándar que quieres volver a crear.
    • OBJECT_TABLE: el nombre de la tabla de objetos que contiene los mismos datos de objeto 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, consulta Ejecutar una consulta interactiva.

Funciones de SQL

Actualiza una columna ObjectRef usando el resultado de las funciones OBJ.FETCH_METADATA y OBJ.MAKE_REF:

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

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

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

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto. Puedes omitir este argumento si vas a crear la tabla en tu proyecto actual.
    • DATASET_ID: el ID del conjunto de datos que vas a crear.
    • TABLE_NAME: el nombre de la tabla estándar que quieres volver a crear.
    • CONNECTION_ID: un valor STRING que contiene una conexión de recursos de Cloud que el servicio puede usar para acceder a los objetos de 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 Google Cloud y copia el valor de la última sección del ID de conexión completo que se muestra en ID de conexión. Por ejemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Debes asignar el rol Usuario de objetos de Storage (roles/storage.objectUser) a la cuenta de servicio de la conexión en cualquier segmento de Cloud Storage en el que la utilices para acceder a objetos.

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

  3. Haz clic en Ejecutar.

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

Siguientes pasos