Crie tabelas externas do BigLake no Amazon S3
Este documento descreve como criar uma tabela BigLake do Amazon Simple Storage Service (Amazon S3). Uma tabela do BigLake permite-lhe usar a delegação de acesso para consultar dados no Amazon S3. A delegação de acesso dissocia o acesso à tabela do BigLake do acesso ao repositório de dados subjacente.
Para obter informações sobre como os dados fluem entre o BigQuery e o Amazon S3, consulte Fluxo de dados ao consultar dados.
Antes de começar
Certifique-se de que tem uma ligação para aceder aos dados do Amazon S3.
Funções necessárias
Para receber as autorizações de que
precisa para criar uma tabela externa,
peça ao seu administrador para lhe conceder a função
Administrador do BigQuery (roles/bigquery.admin
)
do IAM no seu conjunto de dados.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém as autorizações necessárias para criar uma tabela externa. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para criar uma tabela externa:
-
bigquery.tables.create
-
bigquery.connections.delegate
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Crie um conjunto de dados
Antes de criar uma tabela externa, tem de criar um conjunto de dados na região suportada. Selecione uma das seguintes opções:Consola
Aceda à página do BigQuery.
- No painel Explorador, selecione o projeto onde quer criar o conjunto de dados.
- Expanda a opção Ver ações e clique em Criar conjunto de dados.
- Na página Criar conjunto de dados, especifique os seguintes detalhes:
- Para ID do conjunto de dados, introduza um nome exclusivo do conjunto de dados.
- Para Localização de dados, escolha uma região suportada.
- Opcional: para eliminar tabelas automaticamente, selecione a caixa de verificação Ativar validade da tabela e defina a Idade máxima predefinida da tabela em dias. Os dados no Amazon S3 não são eliminados quando a tabela expira.
- Se quiser usar a colação predefinida, expanda a secção Opções avançadas e, em seguida, selecione a opção Ativar colação predefinida.
- Clique em Criar conjunto de dados.
SQL
Use a CREATE SCHEMA
declaração DDL.
O exemplo seguinte cria um conjunto de dados na região aws-us-east-1
:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE SCHEMA mydataset OPTIONS ( location = 'aws-us-east-1');
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Num ambiente de linha de comandos, crie um conjunto de dados com o bq mk
comando:
bq --location=LOCATION mk \ --dataset \ PROJECT_ID:DATASET_NAME
O parâmetro --project_id
substitui o projeto predefinido.
Substitua o seguinte:
LOCATION
: a localização do seu conjunto de dadosPara ver informações sobre as regiões suportadas, consulte o artigo Localizações. Depois de criar um conjunto de dados, não pode alterar a respetiva localização. Pode definir um valor predefinido para a localização através do ficheiro
.bigqueryrc
.PROJECT_ID
: o ID do seu projetoDATASET_NAME
: o nome do conjunto de dados que quer criarPara criar um conjunto de dados num projeto que não seja o projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:
PROJECT_ID:DATASET_NAME
.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Crie tabelas BigLake em dados não particionados
Selecione uma das seguintes opções:
Consola
Aceda à página do BigQuery.
No painel Explorador, expanda o seu projeto e, de seguida, selecione um conjunto de dados.
Na secção Informações do conjunto de dados, clique em
Criar tabela.Na página Criar tabela, na secção Origem, faça o seguinte:
- Em Criar tabela a partir de, selecione Amazon S3.
- Para Selecionar caminho do S3, introduza um URI que aponte para os dados do Amazon S3 no formato
s3://BUCKET_NAME/PATH
. SubstituaBUCKET_NAME
pelo nome do contentor do Amazon S3; a região do contentor deve ser a mesma que a região do conjunto de dados. SubstituaPATH
pelo caminho para o qual quer escrever o ficheiro exportado. Este pode conter um caráter universal*
. - Em Formato de ficheiro, selecione o formato de dados no Amazon S3. Os formatos suportados são AVRO, CSV, DELTA_LAKE, ICEBERG, JSONL, ORC e PARQUET.
Na secção Destino, especifique os seguintes detalhes:
- Para Conjunto de dados, escolha o conjunto de dados adequado.
- No campo Tabela, introduza o nome da tabela.
- Verifique se o Tipo de tabela está definido como Tabela externa.
- Para o ID da associação, escolha o ID da associação adequado no menu pendente. Para obter informações sobre associações, consulte o artigo Ligar ao Amazon S3.
Na secção Esquema, pode ativar a deteção automática de esquemas ou especificar manualmente um esquema se tiver um ficheiro de origem. Se não tiver um ficheiro de origem, tem de especificar manualmente um esquema.
Para ativar a deteção automática do esquema, selecione a opção Deteção automática.
Para especificar manualmente um esquema, desmarque a opção Deteção automática. Ative a opção Editar como texto e introduza o esquema de tabela como uma matriz JSON.
Clique em Criar tabela.
SQL
Para criar uma tabela do BigLake, use a
CREATE EXTERNAL TABLE
declaração com a
cláusula WITH CONNECTION
:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME WITH CONNECTION `AWS_LOCATION.CONNECTION_NAME` OPTIONS ( format = "DATA_FORMAT", uris = ["S3_URI"], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Substitua o seguinte:
DATASET_NAME
: o nome do conjunto de dados que criouTABLE_NAME
: o nome que quer dar a esta tabelaAWS_LOCATION
: uma localização da AWS em Google Cloud (por exemplo, `aws-us-east-1`)CONNECTION_NAME
: o nome da associação que criouDATA_FORMAT
: qualquer um dos formatos federados do BigQuery suportados (comoAVRO
,CSV
,DELTA_LAKE
,ICEBERG
ouPARQUET
[pré-visualização])S3_URI
: um URI que aponta para os dados do Amazon S3 (por exemplo,s3://bucket/path
)STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações de colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém metadados do Amazon S3.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Para mais informações acerca das considerações sobre o armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Definido como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
Exemplo:
CREATE EXTERNAL TABLE awsdataset.awstable WITH CONNECTION `aws-us-east-1.s3-read-connection` OPTIONS ( format="CSV", uris=["s3://s3-bucket/path/file.csv"], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
bq
Crie um ficheiro de definição de tabela:
bq mkdef \ --source_format=DATA_FORMAT \ --connection_id=AWS_LOCATION.CONNECTION_NAME \ --metadata_cache_mode=CACHE_MODE \ S3_URI > table_def
Substitua o seguinte:
DATA_FORMAT
: qualquer um dos formatos federados do BigQuery suportados (comoAVRO
,CSV
,DELTA_LAKE
,ICEBERG
ouPARQUET
).S3_URI
: um URI que aponta para os dados do Amazon S3 (por exemplo,s3://bucket/path
).AWS_LOCATION
: uma localização da AWS em Google Cloud (por exemplo,aws-us-east-1
).CONNECTION_NAME
: o nome da associação que criou.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Só precisa de incluir esta flag se também planear usar a flag--max_staleness
no comandobq mk
subsequente para ativar o armazenamento em cache de metadados. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que a cache de metadados seja atualizada num intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache. Tem de definirCACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.
Em seguida, crie a tabela do BigLake:
bq mk --max_staleness=STALENESS_INTERVAL --external_table_definition=table_def DATASET_NAME.TABLE_NAME
Substitua o seguinte:
STALENESS_INTERVAL
: especifica se as operações na tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações relativas à colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor de literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém metadados do Amazon S3.DATASET_NAME
: o nome do conjunto de dados que criou.TABLE_NAME
: o nome que quer dar a esta tabela.
Por exemplo, o comando seguinte cria uma nova tabela do BigLake, awsdataset.awstable
, que pode consultar os seus dados do Amazon S3 armazenados no caminho s3://s3-bucket/path/file.csv
e tem uma associação de leitura na localização aws-us-east-1
:
bq mkdef \ --autodetect \ --source_format=CSV \ --connection_id=aws-us-east-1.s3-read-connection \ --metadata_cache_mode=AUTOMATIC \ s3://s3-bucket/path/file.csv > table_def bq mk --max_staleness=INTERVAL "1" HOUR \ --external_table_definition=table_def awsdataset.awstable
API
Chame o método tables.insert
da API e crie um
ExternalDataConfiguration
no recurso Table
que transmite.
Especifique a propriedade schema
ou defina a propriedade autodetect
como true
para ativar a deteção automática do esquema para
origens de dados suportadas.
Especifique a propriedade da connectionId
para identificar a associação a usar
para estabelecer ligação ao Amazon S3.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Crie tabelas do BigLake em dados particionados
Pode criar uma tabela BigLake para dados particionados do Hive no Amazon S3. Depois de criar uma tabela particionada externamente, não pode alterar a chave de partição. Tem de recriar a tabela para alterar a chave de partição.
Para criar uma tabela do BigLake com base em dados particionados do Hive, selecione uma das seguintes opções:
Consola
Aceda à página do BigQuery.
No painel Explorador, expanda o projeto e selecione um conjunto de dados.
Clique em
Ver ações e, de seguida, em Criar tabela. É apresentado o painel Criar tabela.Na secção Origem, especifique os seguintes detalhes:
Em Criar tabela a partir de, selecione Amazon S3.
Indique o caminho para a pasta através de caracteres universais. Por exemplo,
s3://mybucket/*
.A pasta tem de estar na mesma localização que o conjunto de dados que contém a tabela que quer criar, acrescentar ou substituir.
Na lista Formato de ficheiro, selecione o tipo de ficheiro.
Selecione a caixa de verificação Particionamento de dados de origem e, de seguida, especifique os seguintes detalhes:
- Para Selecionar prefixo de URI de origem, introduza o prefixo de URI. Por exemplo,
s3://mybucket/my_files
. - Opcional: para exigir um filtro de partição em todas as consultas para esta tabela, selecione a caixa de verificação Exigir filtro de partição. A exigência de um filtro de partição pode reduzir o custo e melhorar o desempenho. Para mais informações, consulte o artigo Exigir filtros de predicados em chaves de partição em consultas.
Na secção Modo de inferência de partição, selecione uma das seguintes opções:
- Inferir automaticamente tipos: defina o modo de deteção do esquema de partição como
AUTO
. - Todas as colunas são strings: defina o modo de deteção do esquema de partição como
STRINGS
. - Fornecer os meus próprios: defina o modo de deteção do esquema de partição como
CUSTOM
e introduza manualmente as informações do esquema para as chaves de partição. Para mais informações, consulte o artigo Esquema de chave de partição personalizado.
- Inferir automaticamente tipos: defina o modo de deteção do esquema de partição como
- Para Selecionar prefixo de URI de origem, introduza o prefixo de URI. Por exemplo,
Na secção Destino, especifique os seguintes detalhes:
- Para Projeto, selecione o projeto no qual quer criar a tabela.
- Em Conjunto de dados, selecione o conjunto de dados no qual quer criar a tabela.
- Para Tabela, introduza o nome da tabela que quer criar.
- Para Tipo de tabela, verifique se a opção Tabela externa está selecionada.
- Em ID da associação, selecione a associação que criou anteriormente.
Na secção Esquema, pode ativar a deteção automática de esquemas ou especificar manualmente um esquema se tiver um ficheiro de origem. Se não tiver um ficheiro de origem, tem de especificar manualmente um esquema.
Para ativar a deteção automática do esquema, selecione a opção Deteção automática.
Para especificar manualmente um esquema, desmarque a opção Deteção automática. Ative a opção Editar como texto e introduza o esquema de tabela como uma matriz JSON.
Para ignorar linhas com valores de colunas adicionais que não correspondem ao esquema, expanda a secção Opções avançadas e selecione Valores desconhecidos.
Clique em Criar tabela.
SQL
Use a
CREATE EXTERNAL TABLE
declaração DDL:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS ( PARTITION_COLUMN PARTITION_COLUMN_TYPE, ) WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX", uris=['FILE_PATH'], format ="TABLE_FORMAT" max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Substitua o seguinte:
PROJECT_ID
: o nome do seu projeto no qual quer criar a tabela, por exemplo,myproject
DATASET
: o nome do conjunto de dados do BigQuery no qual quer criar a tabela, por exemplo,mydataset
EXTERNAL_TABLE_NAME
: o nome da tabela que quer criar, por exemplo,mytable
PARTITION_COLUMN
: o nome da coluna de partiçãoPARTITION_COLUMN_TYPE
: o tipo da coluna de partiçãoREGION
: a região que contém a ligação, por exemplo,us
CONNECTION_ID
: o nome da associação, por exemplo,myconnection
HIVE_PARTITION_URI_PREFIX
: particionamento de colmeias prefixo do URI, por exemplo:s3://mybucket/
FILE_PATH
: caminho para a origem de dados da tabela externa que quer criar, por exemplo:s3://mybucket/*.parquet
TABLE_FORMAT
: o formato da tabela que quer criar, por exemplo,PARQUET
STALENESS_INTERVAL
: especifica se as operações contra a tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações de colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém metadados do Amazon S3.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Para mais informações acerca das considerações sobre o armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Definido como
AUTOMATIC
para que a cache de metadados seja atualizada a um intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache.Tem de definir
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
Exemplos
O exemplo seguinte cria uma tabela do BigLake sobre dados particionados no Amazon S3. O esquema é detetado automaticamente.
CREATE EXTERNAL TABLE `my_dataset.my_table` WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "s3://mybucket/products", uris = ['s3://mybucket/products/*'] max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
bq
Primeiro, use o comando
bq mkdef
para
criar um ficheiro de definição de tabela:
bq mkdef \ --source_format=SOURCE_FORMAT \ --connection_id=REGION.CONNECTION_ID \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ --metadata_cache_mode=CACHE_MODE \ URIS > DEFINITION_FILE
Substitua o seguinte:
SOURCE_FORMAT
: o formato da origem de dados externa. Por exemplo,CSV
.REGION
: a região que contém a ligação, por exemplo,us
.CONNECTION_ID
: o nome da associação, por exemplo,myconnection
.PARTITIONING_MODE
: o modo de partição do Hive. Use um dos seguintes valores:AUTO
: detetar automaticamente os nomes e os tipos das chaves.STRINGS
: converta automaticamente os nomes das chaves em strings.CUSTOM
: codifique o esquema de chaves no prefixo do URI de origem.
URI_SHARED_PREFIX
: o prefixo do URI de origem.BOOLEAN
: especifica se é necessário um filtro de predicado no momento da consulta. Esta flag é opcional. O valor predefinido éfalse
.CACHE_MODE
: especifica se a cache de metadados é atualizada automaticamente ou manualmente. Só precisa de incluir esta flag se também planear usar a flag--max_staleness
no comandobq mk
subsequente para ativar o armazenamento em cache de metadados. Para mais informações sobre considerações relativas ao armazenamento em cache de metadados, consulte o artigo Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que a cache de metadados seja atualizada num intervalo definido pelo sistema, normalmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar a cache de metadados de acordo com uma programação que determinar. Neste caso, pode chamar o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar a cache. Tem de definirCACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor superior a 0.URIS
: o caminho para a pasta do Amazon S3, usando o formato de carateres universais.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela no seu computador local.
Se PARTITIONING_MODE
for CUSTOM
, inclua o esquema da chave de partição no prefixo do URI de origem, usando o seguinte formato:
--hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Depois de criar o ficheiro de definição da tabela, use o comando
bq mk
para
criar a tabela do BigLake:
bq mk --max_staleness=STALENESS_INTERVAL \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Substitua o seguinte:
STALENESS_INTERVAL
: especifica se as operações na tabela do BigLake usam metadados em cache e qual a atualização dos metadados em cache necessária para que a operação os use. Para mais informações sobre considerações relativas à colocação em cache de metadados, consulte o artigo Colocação em cache de metadados para desempenho.Para desativar a colocação em cache de metadados, especifique 0. Esta é a predefinição.
Para ativar o armazenamento em cache de metadados, especifique um valor de literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de desatualização de 4 horas. Com este valor, as operações na tabela usam metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem mais antigos, a operação obtém metadados do Amazon S3.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela.DATASET_NAME
: o nome do conjunto de dados que contém a tabela.TABLE_NAME
: o nome da tabela que está a criar.SCHEMA
: especifica um caminho para um ficheiro de esquema JSON, ou especifica o esquema no formuláriofield:data_type,field:data_type,...
. Para usar a deteção automática do esquema, omita este argumento.
Exemplos
O exemplo seguinte usa o modo de partição do Hive para dados do Amazon S3:AUTO
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/* > mytable_def
bq mk --max_staleness=INTERVAL "1" HOUR \
--external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
O exemplo seguinte usa o modo de partição do Hive para dados do Amazon S3:STRING
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/myTable/* > mytable_def
bq mk --max_staleness=INTERVAL "1" HOUR \
--external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Para definir a partição do Hive através da API BigQuery, inclua o objeto
hivePartitioningOptions
no objeto ExternalDataConfiguration
quando criar o ficheiro de definição de tabelas.
Para criar uma tabela do BigLake, também tem de especificar um valor para o campo connectionId
.
Se definir o campo hivePartitioningOptions.mode
como CUSTOM
, tem de codificar o esquema da chave de partição no campo hivePartitioningOptions.sourceUriPrefix
da seguinte forma: s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Para aplicar a utilização de um filtro de predicado no momento da consulta, defina o campo hivePartitioningOptions.requirePartitionFilter
como true
.
Tabelas do Delta Lake
O Delta Lake é um formato de tabela de código aberto que suporta tabelas de dados à escala de petabytes. As tabelas Delta Lake podem ser consultadas como tabelas temporárias e permanentes e são suportadas como uma tabela do BigLake.
Sincronização de esquemas
O Delta Lake mantém um esquema canónico como parte dos respetivos metadados. Não pode atualizar um esquema através de um ficheiro de metadados JSON. Para atualizar o esquema:
Use o comando
bq update
com a flag--autodetect_schema
:bq update --autodetect_schema PROJECT_ID:DATASET.TABLE
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém a tabela que quer atualizarDATASET
: o conjunto de dados que contém a tabela que quer atualizarTABLE
: a tabela que quer atualizar
Conversão de tipo
O BigQuery converte os tipos de dados do Delta Lake nos seguintes tipos de dados do BigQuery:
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 seguintes limitações aplicam-se às tabelas Delta Lake:
Aplicam-se limitações de tabelas externas às tabelas Delta Lake.
As tabelas Delta Lake só são suportadas no BigQuery Omni e têm as limitações associadas.
Não pode atualizar uma tabela com um novo ficheiro de metadados JSON. Tem de usar uma operação de atualização da tabela de esquemas de deteção automática. Consulte a secção Sincronização do esquema para mais informações.
As funcionalidades de segurança do BigLake só protegem as tabelas do Delta Lake quando acedidas através dos serviços do BigQuery.
Crie uma tabela Delta Lake
O exemplo seguinte cria uma tabela externa através da declaração CREATE EXTERNAL
TABLE
com o formato Delta Lake:
CREATE [OR REPLACE] EXTERNAL TABLE table_name WITH CONNECTION connection_name OPTIONS ( format = 'DELTA_LAKE', uris = ["parent_directory"] );
Substitua o seguinte:
table_name: o nome da tabela.
connection_name: o nome da associação. A associação tem de identificar uma origem Amazon S3 ou Blob Storage.
parent_directory: o URI do diretório principal.
Transferência entre nuvens com o Delta Lake
O exemplo seguinte usa a declaração LOAD DATA
para carregar dados para a tabela adequada:
LOAD DATA [INTO | OVERWRITE] table_name FROM FILES ( format = 'DELTA_LAKE', uris = ["parent_directory"] ) WITH CONNECTION connection_name;
Para ver mais exemplos de transferências de dados entre nuvens, consulte o artigo Carregue dados com operações entre nuvens.
Consultar tabelas do BigLake
Para mais informações, consulte o artigo Consultar dados do Amazon S3.
Veja os metadados dos recursos
Pode ver os metadados dos recursos com as visualizaçõesINFORMATION_SCHEMA
. Quando consulta as vistas
JOBS_BY_*
,
JOBS_TIMELINE_BY_*
e
RESERVATION*
,
tem de especificar a localização de processamento da consulta
que está localizada na mesma região que a tabela. Para informações sobre as localizações do BigQuery Omni, consulte o artigo Localizações. Para todas as outras tabelas do sistema, especificar a localização da tarefa de consulta é opcional.
Para informações sobre as tabelas do sistema suportadas pelo BigQuery Omni, consulte as Limitações.
Para consultar as tabelas do sistema JOBS_*
e RESERVATION*
, selecione um dos seguintes
métodos para especificar a localização de processamento:
Consola
Aceda à página do BigQuery.
Se o separador Editor não estiver visível, clique em
Redigir nova consulta.Clique em Mais > Definições de consulta. É apresentada a caixa de diálogo Definições de consulta.
Na caixa de diálogo Definições de consulta, em Definições adicionais > Localização dos dados, selecione a região do BigQuery que está localizada na mesma região do BigQuery Omni. Por exemplo, se a sua região do BigQuery Omni for
aws-us-east-1
, especifiqueus-east4
.Selecione os restantes campos e clique em Guardar.
bq
Use a flag --location
para definir a localização de processamento da tarefa para a
região do BigQuery que está
localizada na mesma região que o BigQuery Omni.
Por exemplo, se a sua região do BigQuery Omni for aws-us-east-1
,
especifique us-east4
.
Exemplo
bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-aws-us-east-1.INFORMATION_SCHEMA.JOBS limit 10;"
bq query --use_legacy_sql=false --location=asia-northeast3 \
"SELECT * FROM region-aws-ap-northeast-2.INFORMATION_SCHEMA.JOBS limit 10;"
API
Se estiver a executar tarefas programaticamente,
defina o argumento de localização para a região do BigQuery
que está localizada na mesma região que a região do BigQuery Omni.
Por exemplo, se a sua região do BigQuery Omni for aws-us-east-1
,
especifique us-east4
.
O exemplo seguinte apresenta as tarefas de atualização de metadados nas últimas seis horas:
SELECT * FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time desc LIMIT 10;
Substitua REGION_NAME pela sua região.
VPC Service Controls
Pode usar perímetros dos VPC Service Controls para restringir o acesso do BigQuery Omni a um serviço de nuvem externo como uma camada adicional de defesa. Por exemplo, os perímetros dos VPC Service Controls podem limitar as exportações das tabelas do BigQuery Omni para um bucket específico do Amazon S3 ou um contentor de armazenamento de blobs.
Para saber mais acerca do VPC Service Controls, consulte o artigo Vista geral do VPC Service Controls.
Autorização necessária
Certifique-se de que tem as autorizações necessárias para configurar perímetros de serviço. Para ver uma lista das funções da IAM necessárias para configurar os VPC Service Controls, consulte o artigo Controlo de acesso com a IAM na documentação dos VPC Service Controls.
Configure os VPC Service Controls através da Google Cloud consola
No menu de navegação da Google Cloud consola, clique em Segurança e, de seguida, clique em VPC Service Controls.
Para configurar os VPC Service Controls para o BigQuery Omni, siga os passos no guia Crie um perímetro de serviço e, quando estiver no painel Regras de saída, siga estes passos:
No painel Regras de saída, clique em Adicionar regra.
Na secção A partir dos atributos do cliente da API, selecione uma opção na lista Identidade.
Selecione Para atributos de recursos externos.
Para adicionar um recurso externo, clique em Adicionar recursos externos.
Na caixa de diálogo Adicionar recurso externo, para Nome do recurso externo, introduza um nome de recurso válido. Por exemplo:
Para o Amazon Simple Storage Service (Amazon S3):
s3://BUCKET_NAME
Substitua BUCKET_NAME pelo nome do seu contentor do Amazon S3.
Para o armazenamento de blobs do Azure:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME
Substitua CONTAINER NAME pelo nome do contentor do Blob Storage.
Para ver uma lista dos atributos das regras de saída, consulte a referência das regras de saída.
Selecione os métodos que quer permitir nos seus recursos externos:
- Se quiser permitir todos os métodos, selecione Todos os métodos na lista Métodos.
- Se quiser permitir métodos específicos, selecione Método selecionado, clique em Selecionar métodos e, de seguida, selecione os métodos que quer permitir nos seus recursos externos.
Clique em Criar perímetro.
Configure os VPC Service Controls através da CLI gcloud
Para configurar os VPC Service Controls através da CLI gcloud, siga estes passos:
- Defina a política de acesso predefinida.
- Crie o ficheiro de entrada da política de saída.
- Adicione a política de saída.
Defina a política de acesso predefinida
Uma política de acesso é um contentor ao nível da organização para níveis de acesso e perímetros de serviço. Para ver informações sobre como definir uma política de acesso predefinida ou obter o nome de uma política de acesso, consulte o artigo Gerir uma política de acesso.
Crie o ficheiro de entrada da política de saída
Um bloco de regras de saída define o acesso permitido a partir de um perímetro a recursos fora desse perímetro. Para recursos externos, a propriedade externalResources
define os caminhos de recursos externos com acesso permitido a partir do seu perímetro dos VPC Service Controls.
As regras de saída podem ser configuradas através de um ficheiro JSON ou um ficheiro YAML. O exemplo seguinte usa o formato .yaml
:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" *OR* - permission: "externalResource.read" externalResources: - EXTERNAL_RESOURCE_PATH egressFrom: identityType: IDENTITY_TYPE *OR* identities: - serviceAccount:SERVICE_ACCOUNT
egressTo
: indica as operações de serviço permitidas em Google Cloud recursos em projetos especificados fora do perímetro.operations
: lista os serviços e as ações ou os métodos acessíveis aos quais um cliente que satisfaça as condições de bloqueiofrom
tem permissão para aceder.serviceName
: definabigquery.googleapis.com
para o BigQuery Omni.methodSelectors
: lista os métodos aos quais um cliente que satisfaça asfrom
condições pode aceder. Para ver os métodos e as autorizações restritivas para serviços, consulte o artigo Restrições de métodos de serviços suportados.method
: um método de serviço válido ou\"*\"
para permitir todos os métodosserviceName
.permission
: uma autorização de serviço válida, como\"*\"
,externalResource.read
ouexternalResource.write
. O acesso a recursos fora do perímetro é permitido para operações que requerem esta autorização.externalResources
: lista os recursos externos aos quais os clientes dentro de um perímetro podem aceder. Substitua EXTERNAL_RESOURCE_PATH por um contentor do Amazon S3 válido, comos3://bucket_name
, ou um caminho do contentor de armazenamento de blobs, comoazure://myaccount.blob.core.windows.net/container_name
.egressFrom
: lista as operações de serviço permitidas em Google Cloud recursos em projetos especificados dentro do perímetro.identityType
ouidentities
: define os tipos de identidade que podem aceder aos recursos especificados fora do perímetro. Substitua IDENTITY_TYPE por um dos seguintes valores válidos:ANY_IDENTITY
: para permitir todas as identidades.ANY_USER_ACCOUNT
: para permitir todos os utilizadores.ANY_SERVICE_ACCOUNT
: para permitir todas as contas de serviço
identities
: indica as contas de serviço que podem aceder aos recursos especificados fora do perímetro.serviceAccount
(opcional): substitua SERVICE_ACCOUNT pela conta de serviço que pode aceder aos recursos especificados fora do perímetro.
Exemplos
O exemplo seguinte é uma política que permite operações de saída do perímetro para a localização do s3://mybucket
Amazon S3 na AWS.
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - s3://mybucket - s3://mybucket2 egressFrom: identityType: ANY_IDENTITY
O exemplo seguinte permite operações de saída para um contentor do armazenamento de blobs:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
Para mais informações acerca das políticas de saída, consulte a Referência das regras de saída.
Adicione a política de saída
Para adicionar a política de saída quando cria um novo perímetro de serviço, use o comando gcloud access-context-manager perimeters create
.
Por exemplo, o seguinte comando cria um novo perímetro denominado omniPerimeter
que inclui o projeto com o número do projeto 12345
, restringe a API BigQuery e adiciona uma política de saída definida no ficheiro egress.yaml
:
gcloud access-context-manager perimeters create omniPerimeter \ --title="Omni Perimeter" \ --resources=projects/12345 \ --restricted-services=bigquery.googleapis.com \ --egress-policies=egress.yaml
Para adicionar a política de saída a um perímetro de serviço existente, use o comando
gcloud access-context-manager perimeters update
.
Por exemplo, o comando seguinte adiciona uma política de saída definida no ficheiro
egress.yaml
a um perímetro de serviço existente denominado omniPerimeter
:
gcloud access-context-manager perimeters update omniPerimeter --set-egress-policies=egress.yaml
Valide o seu perímetro
Para validar o perímetro, use o comando gcloud access-context-manager perimeters describe
:
gcloud access-context-manager perimeters describe PERIMETER_NAME
Substitua PERIMETER_NAME pelo nome do perímetro.
Por exemplo, o comando seguinte descreve o perímetro omniPerimeter
:
gcloud access-context-manager perimeters describe omniPerimeter
Para mais informações, consulte o artigo Faça a gestão dos perímetros de serviço.
Permita o acesso VPC do BigQuery Omni ao Amazon S3
Como administrador do BigQuery, pode criar uma política de contentor do S3 para conceder acesso do BigQuery Omni aos seus recursos do Amazon S3. Isto garante que apenas as VPCs do BigQuery Omni autorizadas podem interagir com o seu Amazon S3, o que melhora a segurança dos seus dados.
Aplique uma política de contentor do S3 para a VPC do BigQuery Omni
Para aplicar uma política de contentor do S3, use a CLI do AWS ou o Terraform:
AWS CLI
Execute o seguinte comando para aplicar uma política de contentor do S3 que inclua uma condição com o atributo aws:SourceVpc
:
aws s3api put-bucket-policy \ --bucket=BUCKET_NAME \ --policy "{ \"Version\": \"2012-10-17\", \"Id\": \"RestrictBucketReads\", \"Statement\": [ { \"Sid\": \"AccessOnlyToOmniVPC\", \"Principal\": \"*\", \"Action\": [\"s3:ListBucket\", \"s3:GetObject\"], \"Effect\": \"Allow\", \"Resource\": [\"arn:aws:s3:::BUCKET_NAME\", \"arn:aws:s3:::BUCKET_NAME/*\"], \"Condition\": { \"StringEquals\": { \"aws:SourceVpc\": \"VPC_ID\" } } } ] }"
Substitua o seguinte:
BUCKET_NAME
: o contentor do Amazon S3 ao qual quer que o BigQuery aceda.VPC_ID
: o ID da VPC do BigQuery Omni da região do BigQuery Omni colocada juntamente com o contentor do Amazon S3. Pode encontrar estas informações na tabela desta página.
Terraform
Adicione o seguinte ao ficheiro de configuração do Terraform:
resource "aws_s3_bucket" "example" { bucket = "BUCKET_NAME" } resource "aws_s3_bucket_policy" "example" { bucket = aws_s3_bucket.example.id policy = jsonencode({ Version = "2012-10-17" Id = "RestrictBucketReads" Statement = [ { Sid = "AccessOnlyToOmniVPC" Effect = "Allow" Principal = "*" Action = ["s3:GetObject", "s3:ListBucket"] Resource = [ aws_s3_bucket.example.arn, "${aws_s3_bucket.example.arn}/*" ] Condition = { StringEquals = { "aws:SourceVpc": "VPC_ID" } } }, ] }) }
Substitua o seguinte:
BUCKET_NAME
: o contentor do Amazon S3 ao qual quer que o BigQuery aceda.VPC_ID
: o ID da VPC do BigQuery Omni da região do BigQuery Omni colocada juntamente com o contentor do Amazon S3.
IDs de recursos da VPC do BigQuery Omni
Região | ID da VPC |
---|---|
aws-ap-northeast-2 | vpc-0b488548024288af2 |
aws-ap-southeast-2 | vpc-0726e08afef3667ca |
aws-eu-central-1 | vpc-05c7bba12ad45558f |
aws-eu-west-1 | vpc-0e5c646979bbe73a0 |
aws-us-east-1 | vpc-0bf63a2e71287dace |
aws-us-west-2 | vpc-0cc24e567b9d2c1cb |
Limitações
Para ver uma lista completa das limitações aplicáveis às tabelas BigLake com base no Amazon S3 e no armazenamento de blobs, consulte o artigo Limitações.
O que se segue?
- Saiba mais acerca do BigQuery Omni.
- Use o laboratório do BigQuery Omni com a AWS.
- Saiba mais sobre as tabelas do BigLake.
- Saiba como exportar resultados de consultas para o Amazon S3.
- Saiba como criar vistas materializadas sobre tabelas com a cache de metadados do Amazon Simple Storage Service (Amazon S3) ativada.
- Saiba como disponibilizar os dados do Amazon S3 numa vista materializada localmente para junções através da criação de uma réplica da vista materializada.