Crie tabelas externas do BigLake para o Delta Lake
O BigLake permite-lhe aceder a tabelas Delta Lake com um controlo de acesso mais detalhado. O Delta Lake é um formato de armazenamento de dados tabulares de código aberto desenvolvido pela Databricks que suporta tabelas de dados à escala de petabytes.
O BigQuery suporta as seguintes funcionalidades com 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 dissocia o acesso à tabela Delta Lake do acesso ao repositório de dados subjacente.
- Controlo de acesso detalhado: aplique segurança detalhada ao nível da tabela, incluindo segurança ao nível da linha e ao nível da coluna. Para tabelas do Delta Lake baseadas no Cloud Storage, também pode usar a ocultação dinâmica de dados.
- Evolução do esquema: as alterações ao esquema nas tabelas do Delta Lake são detetadas automaticamente. As alterações ao esquema são refletidas na tabela do BigQuery.
As tabelas Delta Lake também suportam todas as funcionalidades do BigLake quando as configura como tabelas BigLake.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, activate Cloud Shell.
Certifique-se de que tem um conjunto de dados do BigQuery.
Certifique-se de que a versão do Google Cloud SDK é a 366.0.0 ou posterior:
gcloud version
Se necessário, atualize o SDK do Google Cloud.
Crie uma associação de recursos na nuvem com base na sua origem de dados externa e conceda a essa associação acesso ao Cloud Storage. Se não tiver as autorizações adequadas para criar uma ligação, peça ao administrador do BigQuery para criar uma ligação e partilhá-la consigo.
bigquery.tables.create
bigquery.connections.delegate
- Função de leitor do BigQuery (
roles/bigquery.viewer
) - Função de utilizador de ligação do BigQuery (
roles/bigquery.connectionUser
) - Acesso ao contentor do Cloud Storage que contém esses dados
- PROJECT_ID: o ID do projeto no qual quer criar a tabela do Delta Lake
- DATASET: o conjunto de dados do BigQuery que vai conter a tabela Delta Lake
- DELTALAKE_TABLE_NAME: o nome da sua tabela Delta Lake
- REGION: a região que contém a ligação para criar a tabela do Delta Lake, por exemplo,
us
CONNECTION_ID: o ID de associação, por exemplo,
myconnection
Quando vê os detalhes da ligação na Google Cloud consola, o ID da ligação é o valor na última secção do ID da ligação totalmente qualificado apresentado em ID da ligação, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela Delta Lake
- DEFINITION_FILE: o caminho para um ficheiro de definição de tabela
- PROJECT_ID: o ID do projeto no qual quer criar a tabela do Delta Lake
- DATASET: o conjunto de dados do BigQuery que vai conter a tabela Delta Lake
- DELTALAKE_TABLE_NAME: o nome da sua tabela Delta Lake
- PROJECT_ID: o ID do projeto no qual quer criar a tabela do Delta Lake
- REGION: a região que contém a ligação para criar a tabela do Delta Lake, por exemplo,
us
CONNECTION_ID: o ID de associação, por exemplo,
myconnection
Quando vê os detalhes da ligação na Google Cloud consola, o ID da ligação é o valor na última secção do ID da ligação totalmente qualificado apresentado em ID da ligação, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela Delta Lake
DELTALAKE_TABLE_NAME: o nome da sua tabela Delta Lake
DATASET: o conjunto de dados do BigQuery que vai conter a tabela Delta Lake
- Os utilizadores podem deparar-se com erros
ACCESS_DENIED
ao tentar aceder a ficheiros no Cloud Storage. - As funcionalidades, como o controlo de acesso detalhado, só estão disponíveis em tabelas do BigLake do Delta Lake.
- PROJECT_ID: o ID do projeto no qual quer criar a tabela do Delta Lake
- DATASET: o conjunto de dados do BigQuery que vai conter a tabela Delta Lake
- DELTALAKE_TABLE_NAME: o nome da sua tabela Delta Lake
- DELTA_TABLE_GCS_BASE_PATH: o prefixo da tabela Delta Lake
- PROJECT_ID: o ID do projeto no qual quer criar a tabela do Delta Lake
- REGION: a região que contém a ligação para criar a tabela do Delta Lake, por exemplo,
us
CONNECTION_ID: o ID de associação, por exemplo,
myconnection
Quando vê os detalhes da ligação na Google Cloud consola, o ID da ligação é o valor na última secção do ID da ligação totalmente qualificado apresentado em ID da ligação, por exemplo,
projects/myproject/locations/connection_location/connections/myconnection
.DELTALAKE_TABLE_NAME: o nome da sua tabela Delta Lake
DATASET: o conjunto de dados do BigQuery que vai conter a tabela Delta Lake
- Suporta a versão 3 do leitor Delta Lake com vetores de eliminação de caminhos relativos e mapeamento de colunas.
- Não suporta pontos de verificação do Delta Lake V2.
- Tem de indicar a versão do leitor no último ficheiro de entrada do registo. Por exemplo, as novas tabelas têm de incluir
00000..0.json
. - As operações de captura de dados de alterações (CDC) não são suportadas. Todas as operações de CDC existentes são ignoradas.
- O esquema é detetado automaticamente. A modificação do esquema através do BigQuery não é suportada.
- Os nomes das colunas das tabelas têm de cumprir as restrições de nomes de colunas do BigQuery.
- As vistas materializadas não são suportadas.
- A API Read não é suportada para o Delta Lake.
Certifique-se de que está a usar tabelas do BigLake Delta Lake (com uma associação).
Os utilizadores têm a autorização necessária descrita.
Use as utilidades do Delta Lake para compactar os ficheiros de dados subjacentes e remover ficheiros redundantes, como dados e metadados.
Certifique-se de que
delta.checkpoint.writeStatsAsStruct
está definido comotrue
.Certifique-se de que as variáveis usadas com frequência em cláusulas de predicado estão em colunas de partição.
Funções necessárias
São necessárias as seguintes autorizações para criar uma tabela do Delta Lake:
A função predefinida de administrador do BigQuery (roles/bigquery.admin
) do
Identity and Access Management inclui estas autorizações.
Se não for um principal nesta função, peça ao seu administrador para lhe conceder estas autorizações ou para criar a tabela do Delta Lake por si.
Além disso, para permitir que os utilizadores do BigQuery consultem a tabela, a conta de serviço associada à ligação tem de ter a seguinte autorização e acesso:
Para mais informações sobre as funções e as autorizações de gestão de identidades e acessos no BigQuery, consulte o artigo Funções e autorizações predefinidas.
Crie tabelas com o Delta Lake
Para criar tabelas Delta Lake, siga estes passos.
SQL
Use a declaraçã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:
bq
Num ambiente de linha de comandos, use o comando bq mk
para criar a tabela Delta Lake:
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Substitua os seguintes valores:
REST
Use a API BigQuery para
criar uma tabela Delta Lake chamando o método 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:
Quando cria tabelas Delta Lake, o prefixo Delta Lake é usado como o URI da tabela. Por exemplo, para uma tabela que tenha registos no contentor gs://bucket/warehouse/basictable/_delta_log
, o URI da tabela é gs://bucket/warehouse/basictable
. Quando executa consultas na tabela Delta Lake, o BigQuery lê os dados sob o prefixo para identificar a versão atual da tabela e, em seguida, calcula os metadados e os ficheiros da tabela.
Embora possa criar tabelas externas do Delta Lake sem uma ligação, não é recomendado pelos seguintes motivos:
Atualize tabelas do Delta Lake
Para atualizar (atualizar) o esquema das tabelas Delta Lake, siga estes passos.
bq
Num ambiente de linha de comandos, use o comando
bq update
para atualizar (atualizar) o esquema da tabela do Delta Lake:
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Substitua os seguintes valores:
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
}
}'
echo $REQUEST |curl -X PATCH -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/DELTALAKE_TABLE_NAME?autodetect_schema=true
Substitua os seguintes valores:
Consultar tabelas do Delta Lake
Depois de criar uma tabela do BigLake Delta Lake, pode consultá-la através da sintaxe do GoogleSQL, tal como faria com uma tabela padrão do BigQuery. Por exemplo:
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
Para mais informações, consulte o artigo Consultar dados do Cloud Storage em tabelas BigLake.
É usada uma associação externa associada a uma conta de serviço para estabelecer ligação ao repositório de dados. Uma vez que a conta de serviço obtém dados do repositório de dados, os utilizadores só precisam de acesso à tabela do Delta Lake.
Mapeamento de dados
O BigQuery converte os tipos de dados do Delta Lake em tipos de dados do BigQuery, conforme mostrado na tabela seguinte:
Tipo de Delta Lake | Tipo do BigQuery |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC ou BIG_NUMERIC , consoante a 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 Delta Lake têm limitações de tabelas BigLake e também as seguintes limitações:
Resolução de problemas
Esta secção fornece ajuda com as tabelas Delta Lake BigLake. Para obter ajuda mais geral com a resolução de problemas de consultas do BigQuery, consulte o artigo Resolva problemas de consultas.
Limite de tempo da consulta e erros de recursos
Verifique o diretório de registos (gs://bucket/warehouse/basictable/_delta_log
) da tabela Delta Lake e procure ficheiros JSON com um número de versão superior ao ponto de verificação anterior. Pode obter o número da versão
listando o diretório ou inspecionando o
ficheiro _delta_log/_last_checkpoint.
Os ficheiros JSON com mais de 10 MiB podem abrandar a expansão da tabela, o que pode originar problemas de tempo limite e de recursos. Para resolver este problema, use o seguinte comando
para criar um novo ponto de verificação para que as consultas ignorem a leitura dos ficheiros JSON:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");
Em seguida, os utilizadores podem usar o mesmo comando para repor o intervalo de pontos de verificação para o valor predefinido de 10 ou para um valor que evite ter mais de 50 MB de ficheiros JSON entre os pontos de verificação.
Nome da coluna inválido
Certifique-se de que o mapeamento de colunas está ativado para a tabela Delta Lake. O mapeamento de colunas é suportado com a versão 2 ou superior do leitor. Para a versão 1 do leitor, defina "delta.columnMapping.mode" como "name" usando o seguinte comando:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");
Se o nome de coluna inválido cumprir as restrições de nomes de colunas flexíveis, contacte o apoio técnico ao cliente do Google Cloud ou biglake-help@google.com.
Erros de acesso negado
Para diagnosticar problemas com tabelas do BigLake Delta Lake, verifique o seguinte:
Desempenho
Para melhorar o desempenho das consultas, experimente os seguintes passos:
Os conjuntos de dados grandes (superiores a 100 TB) podem beneficiar de configurações e funcionalidades adicionais. Se os passos anteriores não resolverem os seus problemas, considere contactar o Apoio ao Cliente ou biglake-help@google.com, especialmente para conjuntos de dados com mais de 100 TB.