Especifique 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 de ObjectRef fornecem metadados e informações de ligação para objetos no Cloud Storage. Use valores ObjectRef quando precisar de integrar dados não estruturados numa tabela padrão. Por exemplo, numa tabela de produtos, pode armazenar imagens de produtos na mesma linha com o resto das informações dos produtos adicionando uma coluna que contenha valores ObjectRef. Pode armazenar valores ObjectRef em colunas STRUCT que usam o formato ObjectRef, que é STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>.

Para mais informações sobre como trabalhar com dados multimodais, consulte o artigo Analise dados multimodais. Para ver um tutorial que mostra como trabalhar com dados ObjectRef, consulte o artigo Analise dados multimodais com SQL. Para informações sobre como trabalhar com dados multimodais em Python, consulte o artigo Analise dados multimodais em Python com DataFrames do BigQuery.

Pré-requisitos

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

Tem de ter um contentor do Cloud Storage que contenha os mesmos objetos identificados nos dados do URI da tabela padrão de destino. Se quiser manter ObjectRef valores numa tabela padrão através de uma tabela de objetos, também tem de ter uma tabela de objetos que represente os objetos nesse contentor.

Manter valores ObjectRef

Pode usar uma tabela de objetos para preencher e atualizar os valores ObjectRef numa tabela padrão. Se estiver na lista de autorizações para a pré-visualização, todas as tabelas de objetos que criar têm uma coluna ref que contém um valor ObjectRef para o objeto em questão. Pode usar o URI do objeto para juntar a tabela padrão à tabela de objetos de modo a preencher e atualizar os valores de ObjectRef. Recomendamos esta abordagem para a escalabilidade, porque evita a necessidade de obter metadados de objetos do Cloud Storage.

Se não quiser criar uma tabela de objetos, pode usar as funções OBJ.FETCH_METADATA e OBJ.MAKE_REF para preencher e atualizar os valores ObjectRef obtendo os metadados dos objetos diretamente do Cloud Storage. Esta abordagem pode ser menos escalável, uma vez que requer a obtenção de metadados de objetos do Cloud Storage.

Crie uma coluna de ObjectRef

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

Tabela de objetos

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

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaraçã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 o seguinte:

    • PROJECT_ID: o ID do seu projeto. Pode ignorar este argumento se estiver a criar a tabela no seu projeto atual.
    • DATASET_ID: o ID do conjunto de dados que está a criar.
    • TABLE_NAME: o nome da tabela padrão que está a recriar.
    • OBJECT_TABLE: o nome da tabela de objetos que contém os dados de objetos que quer integrar na tabela padrão.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

Funções SQL

Crie e preencha uma coluna ObjectRef com base no resultado das funções OBJ.FETCH_METADATA e OBJ.MAKE_REF:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    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;

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto. Pode ignorar este argumento se estiver a criar a tabela no seu projeto atual.
    • DATASET_ID: o ID do conjunto de dados que está a criar.
    • TABLE_NAME: o nome da tabela padrão que está a recriar.
    • CONNECTION_ID: Um valor STRING que contém uma ligação de recursos da nuvem que o serviço pode usar para aceder aos objetos no Cloud Storage, no formato location.connection_id. Por exemplo, us-west1.myconnection. Pode obter o ID da associação vendo os detalhes da associação na Google Cloud consola e copiando o valor na última secção do ID da associação totalmente qualificado apresentado em ID da associação. Por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Tem de conceder a função Utilizador de objetos do armazenamento (roles/storage.objectUser) à conta de serviço da ligação em qualquer contentor do Cloud Storage onde a esteja a usar para aceder a objetos.

      A ligação tem de estar no mesmo projeto e região que a consulta onde está a chamar a função.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

Crie uma coluna de ARRAY<ObjectRef>

Pode criar uma coluna ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> para conter matrizes de valores ObjectRef. Por exemplo, pode dividir um vídeo em imagens separadas e, em seguida, armazenar estas imagens como uma matriz de valores ObjectRef.

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

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

Atualize uma coluna ObjectRef

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

Tabela de objetos

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

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaraçã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 o seguinte:

    • PROJECT_ID: o ID do seu projeto. Pode ignorar este argumento se estiver a criar a tabela no seu projeto atual.
    • DATASET_ID: o ID do conjunto de dados que está a criar.
    • TABLE_NAME: o nome da tabela padrão que está a recriar.
    • OBJECT_TABLE: o nome da tabela de objetos que contém os mesmos dados de objetos que a coluna ObjectRef da tabela padrão.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

Funções SQL

Atualize uma coluna ObjectRef usando o resultado das funções OBJ.FETCH_METADATA e OBJ.MAKE_REF:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto. Pode ignorar este argumento se estiver a criar a tabela no seu projeto atual.
    • DATASET_ID: o ID do conjunto de dados que está a criar.
    • TABLE_NAME: o nome da tabela padrão que está a recriar.
    • CONNECTION_ID: Um valor STRING que contém uma ligação de recursos da nuvem que o serviço pode usar para aceder aos objetos no Cloud Storage, no formato location.connection_id. Por exemplo, us-west1.myconnection. Pode obter o ID da associação vendo os detalhes da associação na Google Cloud consola e copiando o valor na última secção do ID da associação totalmente qualificado apresentado em ID da associação. Por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

      Tem de conceder a função Utilizador de objetos do armazenamento (roles/storage.objectUser) à conta de serviço da ligação em qualquer contentor do Cloud Storage onde a esteja a usar para aceder a objetos.

      A ligação tem de estar no mesmo projeto e região que a consulta onde está a chamar a função.

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

O que se segue?