Criar tabelas do Delta Lake BigLake

Para solicitar feedback ou suporte para esse recurso, envie um e-mail para biglake-help@google.com.

Com o BigLake, é possível acessar as tabelas do Delta Lake com controle de acesso mais granular. Delta Lake é um formato de armazenamento de dados tabulares de código aberto desenvolvido pelo Databricks que oferece suporte a tabelas de dados em escala de petabytes.

O BigQuery oferece suporte aos seguintes recursos com as tabelas Delta Lake:

  • Delegação de acesso: consulte dados estruturados em repositórios de dados externos com delegação de acesso. A delegação de acesso separa o acesso à tabela Delta Lake do acesso ao armazenamento de dados subjacente.
  • Controle de acesso granular: aplique uma segurança refinada no nível da tabela, incluindo segurança de nível de linha e nível de coluna. Para tabelas Delta Lake baseadas no Cloud Storage, também é possível usar máscara de dados dinâmica.
  • Evolução do esquema: as alterações de esquema nas tabelas de Delta Lake são detectadas automaticamente. As alterações no esquema são refletidas na tabela do BigQuery.

As tabelas do Delta Lake também são compatíveis com todos os recursos do BigLake quando você os configura como tabelas do BigLake.

Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative as APIs BigQuery Connection and BigQuery Reservation.

    Ative as APIs

  4. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

  5. Verifique se você tem um conjunto de dados do BigQuery.

  6. Verifique se a versão do SDK Google Cloud é a 366.0.0 ou mais recente:

    gcloud version
    

    Se necessário, atualize o SDK Google Cloud.

  7. Crie uma conexão de recursos do Cloud com base na sua fonte de dados externa e conceda a ela acesso ao Cloud Storage. Se você não tiver as permissões apropriadas para criar uma conexão, peça ao administrador do BigQuery para criar uma conexão e compartilhá-la com você.

Funções exigidas

As seguintes permissões são necessárias para criar uma tabela Delta Lake:

  • bigquery.tables.create
  • bigquery.connections.delegate

O papel predefinido do Identity and Access Management do BigQuery Admin (roles/bigquery.admin) inclui essas permissões.

Se você não for o principal nesse papel, peça ao administrador que conceda essas permissões ou crie a tabela Delta Lake para você.

Além disso, para permitir que os usuários do BigQuery consultem a tabela, a conta de serviço associada à conexão precisa ter as seguintes permissões e acesso:

  • Papel de leitor do BigQuery (roles/bigquery.viewer)
  • Papel de usuário de conexão do BigQuery (roles/bigquery.connectionUser)
  • Acesso ao bucket do Cloud Storage que contém os dados

Para mais informações sobre os papéis e as permissões do Identity and Access Management no BigQuery, consulte Papéis e permissões predefinidos.

Criar tabelas com o Delta Lake

Para criar tabelas de Delta Lake, siga estas etapas.

SQL

Use a instrução CREATE EXTERNAL TABLE para criar a tabela do Delta Lake:

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  format ="DELTA_LAKE",
  uris=['DELTA_TABLE_GCS_BASE_PATH']);

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto em que você quer criar a tabela do Delta Lake
  • DATASET: o conjunto de dados do BigQuery para conter a tabela do Delta Lake
  • DELTALAKE_TABLE_NAME: o nome da sua tabela do Delta Lake
  • REGION: a região que contém a conexão para criar a tabela do Delta Lake, por exemplo, us
  • CONNECTION_ID: o ID da conexão. Por exemplo, myconnection

    Quando você visualiza os detalhes da conexão no console do Google Cloud, o ID da conexão é o valor na última seção do ID totalmente qualificado, mostrado em ID da conexão, por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela do Delta Lake.

bq

Em um ambiente de linha de comando, use o comando bq mk para criar a tabela do Delta Lake:

bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

Substitua os seguintes valores:

  • DEFINITION_FILE: o caminho para um arquivo de definição da tabela
  • PROJECT_ID: o ID do projeto em que você quer criar a tabela do Delta Lake
  • DATASET: o conjunto de dados do BigQuery para conter a tabela do Delta Lake
  • DELTALAKE_TABLE_NAME: o nome da sua tabela do Delta Lake

REST

Use a API BigQuery para criar uma tabela do Delta Lake chamando o método da API tables.insert:

REQUEST='{
  "autodetect": true,
  "externalDataConfiguration": {
  "sourceFormat": "DELTA_LAKE",
  "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
  "sourceUris": [
    "DELTA_TABLE_GCS_BASE_PATH"
  ],
 },
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'

echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto em que você quer criar a tabela do Delta Lake
  • REGION: a região que contém a conexão para criar a tabela do Delta Lake, por exemplo, us
  • CONNECTION_ID: o ID da conexão. Por exemplo, myconnection

    Quando você visualiza os detalhes da conexão no console do Google Cloud, o ID da conexão é o valor na última seção do ID totalmente qualificado, mostrado em ID da conexão, por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela do Delta Lake.

  • DELTALAKE_TABLE_NAME: o nome da sua tabela do Delta Lake

  • DATASET: o conjunto de dados do BigQuery para conter a tabela do Delta Lake

Quando você cria tabelas do Delta Lake, o prefixo Delta Lake é usado como o URI da tabela. Por exemplo, para uma tabela que tem registros no bucket gs://bucket/warehouse/basictable/_delta_log, o URI da tabela é gs://bucket/warehouse/basictable. Quando você executa consultas na tabela do Delta Lake, o BigQuery lê dados sob o prefixo para identificar a versão atual da tabela e, em seguida, calcula os metadados e os arquivos da tabela.

Atualizar tabelas do Delta Lake

Para atualizar o esquema das tabelas do Delta Lake, siga estas etapas.

bq

Em um ambiente de linha de comando, use o comando bq update para atualizar o esquema da tabela do Delta Lake:

bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto em que você quer criar a tabela do Delta Lake
  • DATASET: o conjunto de dados do BigQuery para conter a tabela do Delta Lake
  • DELTALAKE_TABLE_NAME: o nome da sua tabela do Delta Lake

REST

Use a API BigQuery para atualizar uma tabela do Delta Lake chamando o método da API tables.patch:

REQUEST='{
  "externalDataConfiguration": {
    "sourceFormat": "DELTA_LAKE",
    "sourceUris": [
      "DELTA_TABLE_GCS_BASE_PATH"
    ],
    "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
    "autodetect": true
  },
  "tableReference": {
    "tableId": "DELTALAKE_TABLE_NAME"
  }
}'
echo $REQUEST |curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables

Substitua os seguintes valores:

  • DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela do Delta Lake.
  • PROJECT_ID: o ID do projeto em que você quer criar a tabela do Delta Lake
  • REGION: a região que contém a conexão para criar a tabela do Delta Lake, por exemplo, us
  • CONNECTION_ID: o ID da conexão. Por exemplo, myconnection

    Quando você visualiza os detalhes da conexão no console do Google Cloud, o ID da conexão é o valor na última seção do ID totalmente qualificado, mostrado em ID da conexão, por exemplo, projects/myproject/locations/connection_location/connections/myconnection.

  • DELTALAKE_TABLE_NAME: o nome da sua tabela do Delta Lake

  • DATASET: o conjunto de dados do BigQuery para conter a tabela do Delta Lake

Consultar tabelas do Delta Lake

Depois de criar uma tabela do BigLake do Delta Lake, será possível consultá-la usando a sintaxe do GoogleSQL, da mesma forma que você faria com uma tabela padrão do BigQuery. Exemplo:

SELECT field1, field2 FROM mydataset.my_cloud_storage_table;

Para mais informações, consulte Consultar dados do Cloud Storage em tabelas do BigLake.

Uma conexão externa associada a uma conta de serviço é usada para se conectar ao repositório de dados. Como a conta de serviço recupera dados do repositório de dados, os usuários só precisam acessar a tabela do Delta Lake.

Mapeamento de dados

O BigQuery converte tipos de dados do Delta Lake em tipos de dados do BigQuery, conforme mostrado na tabela a seguir:

Tipo do Delta Lake Tipo do BigQuery
boolean BOOL
byte INT64
int INT64
long INT64
float FLOAT64
double FLOAT64
Decimal(P/S) NUMERIC ou BIG_NUMERIC, dependendo da precisão
date DATE
time TIME
timestamp (not partition column) TIMESTAMP
timestamp (partition column) DATETIME
string STRING
binary BYTES
array<Type> ARRAY<Type>
struct STRUCT
map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

Limitações

As tabelas do Delta Lake têm limitações das tabelas do BigLake e também as seguintes limitações:

  • Oferece suporte à versão de leitor 3 do Delta Lake com vetores de exclusão e mapeamento de colunas.
  • Liste a versão do leitor no último arquivo de entrada de registro. Por exemplo, novas tabelas precisam incluir 00000..0.json.
  • As operações de captura de dados alterados (CDC) não são compatíveis. Todas as operações de CDC existentes serão ignoradas.
  • O esquema é detectado automaticamente. Não é possível modificar o esquema usando o BigQuery.
  • Os nomes das colunas da tabela precisam aderir às restrições de nome de coluna do BigQuery.
  • Não há suporte para visualizações materializadas.
  • A API Read não é compatível com o Delta Lake.