Especificar colunas ObjectRef em esquemas de tabelas

Este documento descreve como definir um esquema de tabela padrão do BigQuery com colunas que podem armazenar valores ObjectRef.

Os valores ObjectRef fornecem metadados e informações de conexão para objetos no Cloud Storage. Use valores ObjectRef quando precisar integrar dados não estruturados em uma tabela padrão. Por exemplo, em uma tabela de produtos, é possível armazenar imagens de produtos na mesma linha com o restante das informações do produto, adicionando uma coluna que contenha valores ObjectRef. É possível armazenar ObjectRef valores em colunas STRUCT que usam o ObjectRef formato, que é STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.

Para mais informações sobre como trabalhar com dados multimodais, consulte Analisar dados multimodais. Para um tutorial que mostra como trabalhar com dados ObjectRef, consulte Analisar dados multimodais com SQL.

Pré-requisitos

Para preencher e atualizar valores ObjectRef em uma tabela padrão, ela precisa ter uma coluna STRING que contenha informações de URI para os objetos relacionados do Cloud Storage.

Você precisa ter um bucket do Cloud Storage que contenha os mesmos objetos identificados nos dados de URI da tabela padrão de destino.

Manter valores ObjectRef

Todas as tabelas de objetos criadas têm uma coluna ref que contém um valor ObjectRef para o objeto especificado. Se você tiver uma tabela de objetos, poderá uni-la à tabela padrão na coluna de URI do objeto para preencher e atualizar valores ObjectRef. Isso é mais eficiente porque evita a busca de metadados do Cloud Storage para criar um novo valor ObjectRef.

Da mesma forma, se você já tiver um conjunto de dados do Storage Insights para metadados de objetos, poderá usar a coluna ref.uri ou selfLink para unir a tabela padrão ao conjunto de dados do Storage Insights para preencher e atualizar valores ObjectRef. Os valores ObjectRef criados em conjuntos de dados do Storage Insights não têm um autorizador. Para consultar esses objetos, você precisa ter acesso direto ao objeto ou adicionar um autorizador ao ObjectRef para usar acesso delegado.

Se você não tiver uma tabela de objetos ou um conjunto de dados do Storage Insights, poderá usar a OBJ.MAKE_REF função para preencher e atualizar ObjectRef valores buscando metadados de objetos diretamente do Cloud Storage. Essa abordagem pode ser menos escalonável, porque exige a recuperação de metadados de objetos do Cloud Storage.

Criar uma coluna ObjectRef

Para criar e preencher uma coluna ObjectRef em uma tabela padrão, selecione uma das seguintes opções:

funções SQL;

Crie e preencha uma coluna ObjectRef com base na saída da função OBJ.MAKE_REF:

  1. No Google Cloud console, acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    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;

    Substitua:

    • PROJECT_ID: o ID do projeto. É possível pular esse argumento se você estiver criando a tabela no projeto atual.
    • DATASET_ID: o ID do conjunto de dados que você está criando.
    • TABLE_NAME: o nome da tabela padrão que você está recriando.
    • CONNECTION_ID: um valor STRING que contém uma conexão a recursos do Cloud que o serviço pode usar para acessar os objetos no Cloud Storage, no formato location.connection_id. Por exemplo, us-west1.myconnection. É possível acessar o ID da conexão visualizando os detalhes da conexão no Google Cloud console e copiando o valor na última seção do ID da conexão totalmente qualificado mostrado em ID da conexão. Por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Você precisa conceder o papel de Usuário do objeto de armazenamento (roles/storage.objectUser) à conta de serviço da conexão em qualquer bucket do Cloud Storage em que você a esteja usando para acessar objetos.

      A conexão precisa estar no mesmo projeto e região da consulta em que você está chamando a função.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Tabela de objetos

Crie e preencha uma coluna ObjectRef com base em dados de uma coluna ref da tabela de objetos:

  1. No Google Cloud console, acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    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;

    Substitua:

    • PROJECT_ID: o ID do projeto. É possível pular esse argumento se você estiver criando a tabela no projeto atual.
    • DATASET_ID: o ID do conjunto de dados que você está criando.
    • TABLE_NAME: o nome da tabela padrão que você está recriando.
    • OBJECT_TABLE: o nome da tabela de objetos que contém os dados de objetos que você quer integrar à tabela padrão.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

Criar uma coluna ARRAY<ObjectRef>

É possível criar uma ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> coluna para conter matrizes de ObjectRef valores. Por exemplo, é possível dividir um vídeo em imagens separadas e armazená-las como uma matriz de valores ObjectRef.

É possível usar a ARRAY_AGG função para agregar matrizes de ObjectRef valores, incluindo o uso da ORDER BY cláusula para preservar a ordem dos objetos, se necessário. É possível usar o UNNEST operador para analisar uma matriz de ObjectRef valores em valores ObjectRef individuais, incluindo o uso da cláusula WITH OFFSET para preservar a ordem dos objetos, se necessário. É possível usar metadados de objetos, como o caminho do URI e o nome do arquivo do objeto, para mapear valores ObjectRef que representam blocos de objetos para um valor ObjectRef que representa o objeto original.

Para conferir um exemplo de como trabalhar com matrizes de valores ObjectRef, consulte a seção Processar dados multimodais ordenados usando valores ARRAY<ObjectRef> do tutorial Analisar dados multimodais com SQL.

Atualizar uma coluna ObjectRef

Para atualizar uma coluna ObjectRef em uma tabela padrão, selecione uma das seguintes opções:

Tabela de objetos

Atualize uma coluna ObjectRef usando dados de uma coluna ref da tabela de objetos:

  1. No Google Cloud console, acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    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 != "";

    Substitua:

    • PROJECT_ID: o ID do projeto. É possível pular esse argumento se você estiver criando a tabela no projeto atual.
    • DATASET_ID: o ID do conjunto de dados que você está criando.
    • TABLE_NAME: o nome da tabela padrão que você está recriando.
    • OBJECT_TABLE: o nome da tabela de objetos que contém os mesmos dados de objetos da coluna ObjectRef da tabela padrão.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

funções SQL;

Atualize uma coluna ObjectRef usando a saída das funções OBJ.FETCH_METADATA e OBJ.MAKE_REF:

  1. No Google Cloud console, acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • PROJECT_ID: o ID do projeto. É possível pular esse argumento se você estiver criando a tabela no projeto atual.
    • DATASET_ID: o ID do conjunto de dados que você está criando.
    • TABLE_NAME: o nome da tabela padrão que você está recriando.
    • CONNECTION_ID: um valor STRING que contém uma conexão a recursos do Cloud que o serviço pode usar para acessar os objetos no Cloud Storage, no formato location.connection_id. Por exemplo, us-west1.myconnection. É possível acessar o ID da conexão visualizando os detalhes da conexão no Google Cloud console e copiando o valor na última seção do ID da conexão totalmente qualificado mostrado em ID da conexão. Por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Você precisa conceder o papel de Usuário do objeto de armazenamento (roles/storage.objectUser) à conta de serviço da conexão em qualquer bucket do Cloud Storage em que você a esteja usando para acessar objetos.

      A conexão precisa estar no mesmo projeto e região da consulta em que você está chamando a função.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

A seguir