Tabelas gerenciadas do Apache Iceberg
As tabelas gerenciadas do Apache Iceberg (antigas tabelas do BigLake para Apache Iceberg no BigQuery) são a base para criar lakehouses de formato aberto no Cloud de Confiance by S3NS. As tabelas gerenciadas do Iceberg oferecem a mesma experiência totalmente gerenciada que as tabelas padrão do BigQuery, mas armazenam dados em buckets de armazenamento do cliente. As tabelas gerenciadas do Iceberg são compatíveis com o formato de tabela aberto do Iceberg para melhorar a interoperabilidade com mecanismos de computação de código aberto e de terceiros em uma única cópia de dados.
As tabelas gerenciadas do Iceberg são compatíveis com os seguintes recursos:
- Mutações de tabela usando a linguagem de manipulação de dados (DML) do GoogleSQL.
- Streaming unificado de lote e de alta capacidade de processamento usando a API BigQuery Storage Write (gRPC) com conectores como Spark, Dataflow e outros mecanismos.
- Exportação de snapshot do Iceberg V2 e atualização automática em cada mutação de tabela para acesso direto a consultas com mecanismos de consulta de código aberto e de terceiros, como o Spark.
- Evolução do esquema, que permite adicionar, remover e renomear colunas de acordo com suas necessidades. Esse recurso também permite alterar o tipo de dados e o modo de uma coluna atual. Para mais informações, consulte Regras de conversão.
- Otimização automática de armazenamento, incluindo dimensionamento adaptativo de arquivos, clustering automático, coleta de lixo e otimização de metadados.
- Viagem no tempo para acesso a dados históricos no BigQuery.
- Segurança no nível da coluna e mascaramento de dados.
- Transações de várias instruções.
- Particionamento de tabela.
- Criação de tabelas em fluxos de trabalho do Dataform.
- Ambiente de execução avançado do BigQuery.
- Streaming com a API BigQuery Storage Write (gRPC).
Arquitetura
As tabelas gerenciadas do Iceberg trazem a conveniência do gerenciamento de recursos do BigQuery para tabelas que residem nos seus próprios buckets de nuvem. É possível usar o BigQuery e mecanismos de computação de código aberto nessas tabelas sem mover os dados para fora dos buckets que você controla. É preciso configurar um bucket do Cloud Storage antes de começar a usar as tabelas gerenciadas do Iceberg.
O uso de tabelas gerenciadas do Iceberg tem as seguintes implicações no seu bucket:
- O BigQuery cria novos arquivos de dados no bucket em resposta a solicitações de gravação e otimizações de armazenamento em segundo plano, como instruções DML e streaming.
- A compactação e o clustering automáticos são realizados nos arquivos de dados no bucket. Após a expiração da janela de viagem no tempo, os arquivos de dados são coletados como lixo. No entanto, se a tabela for excluída, os arquivos de dados associados não serão coletados como lixo. Para mais informações, consulte Otimização de armazenamento.
A criação de uma tabela gerenciada do Iceberg é semelhante à criação de tabelas do BigQuery. Como ele armazena dados em formatos abertos no Cloud Storage, é necessário fazer o seguinte:
- Especifique a conexão a recursos do Cloud
com
WITH CONNECTIONpara configurar as credenciais de conexão para o BigQuery acessar o Cloud Storage. - Especifique o formato do arquivo do repositório de dados como
PARQUETcom a instruçãofile_format = PARQUET. - Especifique o formato da tabela de metadados de código aberto como
ICEBERGcom a instruçãotable_format = ICEBERG.
Práticas recomendadas
Alterar ou adicionar arquivos diretamente ao bucket fora do BigQuery pode levar à perda de dados ou a erros irrecuperáveis. A tabela a seguir descreve os cenários possíveis:
| Operação | Consequências | Prevenção |
|---|---|---|
| Adicione novos arquivos ao bucket fora do BigQuery. | Perda de dados:novos arquivos ou objetos adicionados fora do BigQuery não são rastreados por ele. Os arquivos não rastreados são excluídos por processos de coleta de lixo em segundo plano. | Adicionar dados exclusivamente pelo BigQuery. Isso permite que o BigQuery rastreie os arquivos e evite que eles sejam coletados como lixo. Para evitar adições acidentais e perda de dados, também recomendamos restringir as permissões de gravação de ferramentas externas em buckets que contêm tabelas gerenciadas do Iceberg. |
| Crie uma nova tabela gerenciada do Iceberg em um prefixo não vazio. | Perda de dados:os dados existentes não são rastreados pelo BigQuery. Portanto, esses arquivos são considerados não rastreados e excluídos por processos de coleta de lixo em segundo plano. | Crie novas tabelas gerenciadas do Iceberg apenas em prefixos vazios. |
| Modificar ou substituir arquivos de dados de tabelas gerenciadas do Iceberg. | Perda de dados:em caso de modificação ou substituição externa,
a tabela falha em uma verificação de consistência e se torna ilegível. As consultas
na tabela falham. Não há uma maneira de recuperar o acesso por conta própria. Entre em contato com o suporte para receber ajuda com a recuperação de dados. |
Modificar dados exclusivamente pelo BigQuery. Isso permite que o BigQuery rastreie os arquivos e evite que eles sejam coletados como lixo. Para evitar adições acidentais e perda de dados, também recomendamos restringir as permissões de gravação de ferramentas externas em buckets que contêm tabelas gerenciadas do Iceberg. |
| Criar duas tabelas gerenciadas do Iceberg nos mesmos URIs ou em URIs sobrepostos. | Perda de dados:o BigQuery não faz a ponte entre instâncias de URI idênticas de tabelas gerenciadas do Iceberg. Os processos de coleta de lixo em segundo plano de cada tabela vão considerar os arquivos da tabela oposta como não rastreados e os excluirão, causando perda de dados. | Use URIs exclusivos para cada tabela gerenciada do Iceberg. |
Práticas recomendadas para configuração bucket do Cloud Storage
A configuração do bucket do Cloud Storage e a conexão dele com o BigQuery têm um impacto direto no desempenho, no custo, na integridade dos dados, na segurança e na governança das tabelas gerenciadas do Iceberg. Confira as práticas recomendadas para ajudar nessa configuração:
Selecione um nome que indique claramente que o bucket é destinado apenas a tabelas gerenciadas do Iceberg.
Escolha buckets do Cloud Storage de região única que estejam na mesma região do conjunto de dados do BigQuery. Essa coordenação melhora o desempenho e reduz os custos, evitando cobranças de transferência de dados.
Por padrão, o Cloud Storage armazena dados na classe de armazenamento Standard Storage, que oferece desempenho suficiente. Para otimizar os custos de armazenamento de dados, ative a Classe automática para gerenciar automaticamente as transições de classe de armazenamento. A classe automática começa com a classe Standard Storage e move objetos que não são acessados para classes progressivamente mais frias para reduzir os custos de armazenamento. Quando o objeto é lido novamente, ele é movido de volta para a classe Standard.
Ative o acesso uniforme no nível do bucket e a prevenção de acesso público.
Verifique se os papéis necessários estão atribuídos aos usuários e às contas de serviço corretos.
Para evitar a exclusão ou corrupção acidental de dados no bucket do Cloud Storage, restrinja as permissões de gravação e exclusão para a maioria dos usuários na sua organização. Para isso, defina uma política de permissão de bucket com condições que neguem solicitações
PUTeDELETEpara todos os usuários, exceto aqueles que você especificar.Aplique chaves de criptografia gerenciadas pelo Google ou gerenciadas pelo cliente para aumentar a proteção de dados sensíveis.
Ative a geração de registros de auditoria para transparência operacional, solução de problemas e monitoramento do acesso aos dados.
Mantenha a política de exclusão reversível padrão (retenção de 7 dias) para proteger contra exclusões acidentais. No entanto, se você descobrir que os dados foram excluídos, entre em contato com o suporte em vez de restaurar os objetos manualmente, já que os objetos adicionados ou modificados fora do BigQuery não são rastreados pelos metadados do BigQuery.
O dimensionamento adaptável de arquivos, o clustering automático e a coleta de lixo são ativados automaticamente e ajudam a otimizar o desempenho e o custo dos arquivos.
Evite os seguintes recursos do Cloud Storage, porque eles não são compatíveis com as tabelas gerenciadas do Iceberg:
- Listas de controle de acesso (ACLs) de objetos
- Chaves de criptografia fornecidas pelo cliente
- Controle de versões de objetos
- Bloqueio de objeto
- Bloqueio de bucket
- Como restaurar objetos excluídos de forma reversível com a API BigQuery ou a CLI bq
Para implementar essas práticas recomendadas, crie o bucket com o seguinte comando:
gcloud storage buckets create gs://BUCKET_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --enable-autoclass \ --public-access-prevention \ --uniform-bucket-level-access
Substitua:
BUCKET_NAME: o nome do novo bucket.PROJECT_ID: ID do projetoLOCATION: o local do novo bucket.
Fluxos de trabalho de tabelas gerenciadas do Iceberg
As seções a seguir descrevem como criar, carregar, gerenciar e consultar tabelas gerenciadas do Iceberg.
Antes de começar
Antes de criar e usar tabelas gerenciadas do Iceberg, configure uma conexão de recurso do Cloud com um bucket de armazenamento. Sua conexão precisa de permissões de gravação no bucket de armazenamento, conforme especificado na seção Papéis necessários a seguir. Para mais informações sobre os papéis e as permissões necessários para conexões, consulte Gerenciar conexões.
Funções exigidas
Para receber as permissões necessárias para permitir que o BigQuery gerencie tabelas no seu projeto, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Para criar tabelas gerenciadas do Iceberg:
- Proprietário de dados do BigQuery (
roles/bigquery.dataOwner) no seu projeto - Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin) no projeto
- Proprietário de dados do BigQuery (
-
Para consultar tabelas gerenciadas do Iceberg:
- Visualizador de dados do BigQuery (
roles/bigquery.dataViewer) no seu projeto - Usuário do BigQuery (
roles/bigquery.user) no seu projeto
- Visualizador de dados do BigQuery (
-
Conceda à conta de serviço de conexão os seguintes papéis para que ela possa ler e gravar dados no Cloud Storage:
- Usuário de objetos do Storage (
roles/storage.objectUser) no bucket - Leitor de bucket legado do Storage (
roles/storage.legacyBucketReader) no bucket
- Usuário de objetos do Storage (
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para permitir que o BigQuery gerencie tabelas no seu projeto. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para permitir que o BigQuery gerencie tabelas no seu projeto:
-
Todos:
-
bigquery.connections.delegateno seu projeto -
bigquery.jobs.createno seu projeto -
bigquery.readsessions.createno seu projeto -
bigquery.tables.createno seu projeto -
bigquery.tables.getno seu projeto -
bigquery.tables.getDatano seu projeto -
storage.buckets.getno bucket -
storage.objects.createno bucket -
storage.objects.deleteno bucket -
storage.objects.getno bucket -
storage.objects.listno bucket
-
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Criar tabelas gerenciadas do Iceberg
Para criar uma tabela gerenciada do Iceberg, selecione um dos seguintes métodos:
SQL
CREATE TABLE [PROJECT_ID.]DATASET_ID.TABLE_NAME ( COLUMN DATA_TYPE[, ...] ) CLUSTER BY CLUSTER_COLUMN_LIST WITH CONNECTION {CONNECTION_NAME | DEFAULT} OPTIONS ( file_format = 'PARQUET', table_format = 'ICEBERG', storage_uri = 'STORAGE_URI');
Substitua:
- PROJECT_ID: o projeto que contém o conjunto de dados. Se não for definido, o comando vai assumir o projeto padrão.
- DATASET_ID: um conjunto de dados existente.
- TABLE_NAME: o nome da tabela que você está criando;
- DATA_TYPE: o tipo de dados das informações contidas na coluna.
- CLUSTER_COLUMN_LIST (opcional): uma lista separada por vírgulas com até quatro colunas. Elas precisam ser colunas de nível superior, não repetidas.
- CONNECTION_NAME: o nome da conexão. Por exemplo,
myproject.us.myconnection. Para usar uma conexão padrão, especifiqueDEFAULTem vez do nome da conexão. - STORAGE_URI: um URI do Cloud Storage totalmente qualificado. Por exemplo,
gs://mybucket/table.
bq
bq --project_id=PROJECT_ID mk \ --table \ --file_format=PARQUET \ --table_format=ICEBERG \ --connection_id=CONNECTION_NAME \ --storage_uri=STORAGE_URI \ --schema=COLUMN_NAME:DATA_TYPE[, ...] \ --clustering_fields=CLUSTER_COLUMN_LIST \ DATASET_ID.MANAGED_TABLE_NAME
Substitua:
- PROJECT_ID: o projeto que contém o conjunto de dados. Se não for definido, o comando vai assumir o projeto padrão.
- CONNECTION_NAME: o nome da conexão. Por exemplo,
myproject.us.myconnection. - STORAGE_URI: um URI do Cloud Storage totalmente qualificado. Por exemplo,
gs://mybucket/table. - COLUMN_NAME: o nome da coluna.
- DATA_TYPE: o tipo de dados das informações contidas na coluna.
- CLUSTER_COLUMN_LIST (opcional): uma lista separada por vírgulas com até quatro colunas. Elas precisam ser colunas de nível superior, não repetidas.
- DATASET_ID: o ID de um conjunto de dados.
- MANAGED_TABLE_NAME: o nome da tabela que você está criando;
API
Chame o método tables.insert
com um recurso de tabela
definido, semelhante ao
seguinte:
{ "tableReference": { "tableId": "TABLE_NAME" }, "biglakeConfiguration": { "connectionId": "CONNECTION_NAME", "fileFormat": "PARQUET", "tableFormat": "ICEBERG", "storageUri": "STORAGE_URI" }, "schema": { "fields": [ { "name": "COLUMN_NAME", "type": "DATA_TYPE" } [, ...] ] } }
Substitua:
- TABLE_NAME: o nome da tabela que você está criando.
- CONNECTION_NAME: o nome da conexão. Por exemplo,
myproject.us.myconnection. - STORAGE_URI: um URI do Cloud Storage totalmente qualificado.
Os caracteres curinga também são compatíveis. Por exemplo,
gs://mybucket/table. - COLUMN_NAME: o nome da coluna.
- DATA_TYPE: o tipo de dados das informações contidas na coluna.
Importar dados para tabelas gerenciadas do Iceberg
As seções a seguir descrevem como importar dados de vários formatos de tabela para tabelas gerenciadas do Iceberg.
Carregar dados padrão de arquivos simples
As tabelas gerenciadas do Iceberg usam jobs de carregamento do BigQuery para carregar
arquivos externos em tabelas gerenciadas do Iceberg. Se você já tiver uma
tabela gerenciada do Iceberg, siga o guia da CLI
bq load ou o guia do SQL
LOAD
para carregar dados externos. Depois de carregar os dados, novos arquivos Parquet são gravados
na pasta STORAGE_URI/data.
Se as instruções anteriores forem usadas sem uma tabela gerenciada do Iceberg, uma tabela do BigQuery será criada.
Confira a seguir exemplos específicos de ferramentas de carregamentos em lote em tabelas gerenciadas do Iceberg:
SQL
LOAD DATA INTO MANAGED_TABLE_NAME FROM FILES ( uris=['STORAGE_URI'], format='FILE_FORMAT');
Substitua:
- MANAGED_TABLE_NAME: o nome de uma tabela gerenciada do Iceberg.
- STORAGE_URI: um URI do Cloud Storage totalmente qualificado
ou uma lista de URIs separada por vírgulas.
Os caracteres curinga também são compatíveis. Por exemplo,
gs://mybucket/table. - FILE_FORMAT: o formato da tabela de origem. Para saber quais formatos são aceitos,
consulte a linha
formatdeload_option_list.
bq
bq load \ --source_format=FILE_FORMAT \ MANAGED_TABLE \ STORAGE_URI
Substitua:
- FILE_FORMAT: o formato da tabela de origem. Para saber quais formatos são aceitos,
consulte a linha
formatdeload_option_list. - MANAGED_TABLE_NAME: o nome de uma tabela gerenciada do Iceberg.
- STORAGE_URI: um URI do Cloud Storage totalmente qualificado ou uma lista de URIs separada por vírgulas.
Os caracteres curinga também são compatíveis. Por exemplo,
gs://mybucket/table.
Carga padrão de arquivos particionados do Apache Hive
É possível carregar arquivos particionados do Hive em tabelas gerenciadas do Iceberg usando jobs de carregamento padrão do BigQuery. Para mais informações, consulte Carregar dados particionados externamente.
Carregar dados de streaming do Pub/Sub
É possível carregar dados de streaming em tabelas gerenciadas do Iceberg usando uma assinatura do Pub/Sub no BigQuery.
Carregar dados de streaming usando consultas contínuas
É possível processar e gravar continuamente dados de streaming do BigQuery
em tabelas gerenciadas do Iceberg usando uma
consulta contínua do BigQuery
com a instrução DML INSERT. Isso permite realizar ETL reverso em tempo real, aprimoramento de dados e filtragem no seu lakehouse de formato aberto.
Antes de executar a consulta contínua, verifique se a tabela gerenciada de destino do Iceberg existe e se o usuário ou a conta de serviço tem as permissões necessárias na tabela, na conexão de recurso do Cloud de Confiance by S3NS e no bucket do Cloud Storage.
Para instruções de configuração e exemplos de SQL, consulte Gravar dados em tabelas gerenciadas do BigQuery ou do Apache Iceberg.
Exportar dados de tabelas gerenciadas do Iceberg
As seções a seguir descrevem como exportar dados de tabelas gerenciadas do Iceberg para vários formatos de tabela.
Exportar dados para formatos simples
Para exportar uma tabela gerenciada do Iceberg para um formato simples, use a
instrução EXPORT DATA
e selecione um formato de destino. Para mais informações, consulte Como exportar
dados.
Criar snapshots de metadados de tabelas gerenciadas do Iceberg
Para criar um snapshot de metadados de tabela gerenciada do Iceberg, siga estas etapas:
Exporte os metadados para o formato Iceberg V2 com a instrução SQL
EXPORT TABLE METADATA.Opcional: programe a atualização do snapshot de metadados do Iceberg. Para atualizar um snapshot de metadados do Iceberg com base em um intervalo de tempo definido, use uma consulta programada.
Opcional: ative a atualização automática de metadados para que o projeto atualize automaticamente o snapshot de metadados da tabela do Iceberg em cada mutação de tabela. Para ativar a atualização automática de metadados, entre em contato com bigquery-tables-for-apache-iceberg-help@google.com. Os custos do
EXPORT METADATAsão aplicados a cada operação de atualização.
O exemplo a seguir cria uma consulta programada chamada My Scheduled Snapshot
Refresh Query usando a instrução DDL EXPORT TABLE METADATA FROM
mydataset.test. A instrução DDL é executada a cada 24 horas.
bq query \ --use_legacy_sql=false \ --display_name='My Scheduled Snapshot Refresh Query' \ --schedule='every 24 hours' \ 'EXPORT TABLE METADATA FROM mydataset.test'
Ver o snapshot de metadados da tabela gerenciada do Iceberg
Depois de atualizar o snapshot de metadados da tabela gerenciada do Iceberg, você
pode encontrá-lo no URI do Cloud Storage em que a
tabela gerenciada do Iceberg foi criada originalmente. A pasta /data
contém os fragmentos de dados do arquivo Parquet, e a pasta /metadata contém o
snapshot de metadados da tabela gerenciada do Iceberg.
SELECT table_name, REGEXP_EXTRACT(ddl, r"storage_uri\s*=\s*\"([^\"]+)\"") AS storage_uri FROM `mydataset`.INFORMATION_SCHEMA.TABLES;
Observe que mydataset e table_name são marcadores de posição para o conjunto de dados e a tabela reais.
Ler tabelas gerenciadas do Iceberg com o Spark
O exemplo a seguir configura seu ambiente para usar o Spark SQL com o Spark e, em seguida, executa uma consulta para buscar dados de uma tabela gerenciada do Iceberg especificada.
spark-sql \ --packages org.apache.iceberg:iceberg-spark-runtime-ICEBERG_VERSION_NUMBER \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.type=hadoop \ --conf spark.sql.catalog.CATALOG_NAME.warehouse='BUCKET_PATH' \ # Query the table SELECT * FROM CATALOG_NAME.FOLDER_NAME;
Substitua:
- ICEBERG_VERSION_NUMBER: a versão atual do ambiente de execução. Faça o download da versão mais recente em Versões do Iceberg.
- CATALOG_NAME: o catálogo para referenciar sua tabela gerenciada do Iceberg.
- BUCKET_PATH: o caminho para o bucket que contém os arquivos da tabela.
Por exemplo,
gs://mybucket/. - FOLDER_NAME: a pasta que contém os arquivos da tabela. Por exemplo,
myfolder.
Modificar tabelas gerenciadas do Iceberg
Para modificar uma tabela gerenciada do Iceberg, siga as etapas mostradas em Como modificar esquemas de tabelas.
Usar transações com várias instruções
É possível usar transações de várias instruções com tabelas gerenciadas do Iceberg da mesma forma que você faz com tabelas padrão do BigQuery. As transações de várias instruções são usadas com frequência para realizar mutações em várias tabelas ao mesmo tempo ou em uma única tabela em vários estágios. As transações de várias instruções garantem propriedades ACID e são compatíveis com o isolamento de snapshot.
As limitações padrão de transações com várias instruções se aplicam.
Usar particionamento
É possível usar o particionamento de tabelas com tabelas gerenciadas do Iceberg de maneira semelhante à que você faz com tabelas padrão do BigQuery. Para particionar uma tabela, especifique uma coluna de partição, que é usada para segmentar a tabela. Os seguintes tipos de coluna são compatíveis com tabelas gerenciadas do Iceberg:
DATEDATETIMETIMESTAMP
O particionamento de uma tabela em uma coluna DATE, DATETIME ou TIMESTAMP é conhecido como
particionamento de colunas por unidade de tempo.
Você escolhe se as partições têm
granularidade por hora, diária, mensal ou anual.
As tabelas gerenciadas do Iceberg também são compatíveis com clustering e combinação de tabelas em cluster e tabelas particionadas.
Limitações de particionamento
- Todas as limitações tabela particionada do BigQuery se aplicam.
- Não há suporte para tipos de coluna de particionamento diferentes de
DATE,DATETIMEouTIMESTAMP. - A evolução de partição não é compatível.
Criar uma tabela gerenciada do Iceberg particionada
Para criar uma tabela gerenciada do Iceberg particionada, siga as instruções para criar uma tabela gerenciada do Iceberg padrão e inclua uma das seguintes opções, dependendo do seu ambiente:
- A cláusula
PARTITION BY - As flags
--time_partitioning_fielde--time_partitioning_type - A propriedade
timePartitioning
É possível definir e atualizar a validade da partição da mesma forma que você faria com as tabelas do BigQuery padrão. As partições expiradas são coletadas como lixo após a janela de viagem no tempo. Se você adicionar dados a uma partição expirada, eles vão expirar instantaneamente.
Modificar e consultar tabelas gerenciadas do Iceberg particionadas
As instruções e consultas da linguagem de manipulação de dados (DML) do BigQuery para tabelas gerenciadas do Iceberg particionadas são as mesmas que as das tabelas gerenciadas padrão do Iceberg. O BigQuery define automaticamente o escopo do job para as partições certas, de forma semelhante ao particionamento oculto do Iceberg. Além disso, todos os novos dados adicionados à tabela são particionados automaticamente.
Também é possível consultar tabelas gerenciadas do Iceberg particionadas com outros mecanismos da mesma forma que as tabelas gerenciadas do Iceberg padrão. Recomendamos ativar os snapshots de metadados para ter a melhor experiência.
Para maior segurança, as informações de particionamento das tabelas gerenciadas do Iceberg são separadas do caminho de dados e gerenciadas inteiramente pela camada de metadados.
Preços
Os preços das tabelas gerenciadas do Iceberg consistem em armazenamento, otimização de armazenamento, consultas e jobs.
Armazenamento
As tabelas gerenciadas do Iceberg armazenam todos os dados no Cloud Storage. Você vai receber cobranças por todos os dados armazenados, incluindo dados históricos de tabelas. Também podem ser aplicadas cobranças de tratamento e transferência de dados do Cloud Storage. Algumas taxas de operação do Cloud Storage podem ser dispensadas para operações processadas pelo BigQuery ou pela API BigQuery Storage. Não há taxas de armazenamento específicas do BigQuery. Para mais informações, consulte Preços do Cloud Storage.
Otimização de armazenamento
As tabelas gerenciadas do Iceberg realizam o gerenciamento automático de tabelas, incluindo compactação, clustering, coleta de lixo e geração/atualização de metadados do BigQuery para otimizar o desempenho das consultas e reduzir os custos de armazenamento. O uso de recursos de computação para gerenciamento de tabelas é cobrado em unidades de computação de dados (DCUs) ao longo do tempo, em incrementos por segundo. Para mais detalhes, consulte Preços de tabelas gerenciadas do Iceberg.
As operações de exportação de dados que ocorrem durante o streaming pela API Storage Write estão incluídas nos preços da API Storage Write e não são cobradas como manutenção em segundo plano. Para mais informações, consulte Preços de ingestão de dados.
Para conferir os registros e o uso de computação dessas operações em segundo plano, consulte a
visualização INFORMATION_SCHEMA.JOBS. Para
exemplos de consultas, consulte:
Consultas e jobs
Assim como nas tabelas do BigQuery, você vai receber cobranças por consultas e bytes lidos (por TiB) se estiver usando o preço on demand do BigQuery ou o consumo de slots (por hora de slot) se estiver usando o preço de computação de capacidade do BigQuery.
Os preços do BigQuery também se aplicam à API BigQuery Storage Read e à API Storage Write.
As operações de carregamento e exportação (como EXPORT METADATA) usam slots de pagamento por uso da edição Enterprise. Isso
é diferente das tabelas do BigQuery, que não são cobradas por essas
operações. Se as reservas PIPELINE com slots Enterprise ou Enterprise Plus
estiverem disponíveis, as operações de carregamento e exportação usarão preferencialmente esses slots de
reserva.
Limitações
As tabelas gerenciadas do Iceberg têm as seguintes limitações:
- As tabelas gerenciadas do Iceberg não são compatíveis com
operações de renomeação ou
instruções
ALTER TABLE RENAME TO. - As tabelas gerenciadas do Iceberg não são compatíveis com
cópias de tabelas ou
instruções
CREATE TABLE COPY. - As tabelas gerenciadas do Iceberg não são compatíveis com
clones de tabela ou
instruções
CREATE TABLE CLONE. - As tabelas gerenciadas do Iceberg não são compatíveis com
snapshots de tabela ou
instruções
CREATE SNAPSHOT TABLE. - As tabelas gerenciadas do Iceberg não são compatíveis com o seguinte esquema de tabela:
- Esquema vazio
- Esquema com tipos de dados
BIGNUMERIC,INTERVAL,JSON,RANGEouGEOGRAPHY. - Esquema com regras de compilação de campo.
- Esquema com expressões de valor padrão.
- As tabelas gerenciadas do Iceberg não são compatíveis com os seguintes casos de evolução de esquema:
- Coerções de tipo
NUMERICparaFLOAT - Coerções de tipo
INTparaFLOAT - Adicionar novos campos aninhados a colunas
RECORDusando instruções DDL SQL
- Coerções de tipo
- As tabelas gerenciadas do Iceberg mostram um tamanho de armazenamento de 0 byte quando consultadas pelo console ou pelas APIs.
- As tabelas gerenciadas do Iceberg não são compatíveis com visualizações materializadas.
- As tabelas gerenciadas do Iceberg não são compatíveis com visualizações autorizadas, mas o controle de acesso no nível da coluna é compatível.
- As tabelas gerenciadas do Iceberg não são compatíveis com a recuperação de desastres gerenciada.
- As tabelas gerenciadas do Iceberg não são compatíveis com a segurança no nível da linha.
- As tabelas gerenciadas do Iceberg não são compatíveis com janelas à prova de falhas.
- As tabelas gerenciadas do Iceberg não são compatíveis com jobs de extração.
- A visualização
INFORMATION_SCHEMA.TABLE_STORAGEnão inclui tabelas gerenciadas do Iceberg. - As tabelas gerenciadas do Iceberg não são compatíveis como destinos de resultados de consulta. Em vez disso, use a instrução
CREATE TABLEcom o argumentoAS query_statementpara criar uma tabela como o destino do resultado da consulta. - O
CREATE OR REPLACEnão permite substituir tabelas padrão por tabelas gerenciadas do Iceberg ou vice-versa. - O carregamento em lote e as instruções
LOAD DATAsó permitem anexar dados a tabelas gerenciadas do Iceberg. - O carregamento em lote e as instruções
LOAD DATAnão são compatíveis com atualizações de esquema. - O
TRUNCATE TABLEnão oferece suporte a tabelas gerenciadas do Iceberg. Existem duas alternativas:CREATE OR REPLACE TABLE, usando as mesmas opções de criação de tabela.- Tabela
DELETE FROMWHEREverdadeira
- A função com valor de tabela (TVF)
APPENDSnão é compatível com tabelas gerenciadas do Iceberg. - Os metadados do Iceberg podem não conter dados que foram transmitidos para o BigQuery pela API Storage Write nos últimos 90 minutos.
- O acesso paginado baseado em registros usando
tabledata.listnão é compatível com tabelas gerenciadas do Iceberg. - Apenas uma instrução DML de mutação simultânea (
UPDATE,DELETEeMERGE) é executada para cada tabela gerenciada do Iceberg. Outras instruções DML de mutação são colocadas na fila.