Tabelas gerenciadas do Apache Iceberg

As tabelas gerenciadas do Apache Iceberg (antigas tabelas do BigLake para Apache Iceberg no BigQuery) fornecem a base para a criação de lakehouses de formato aberto no Cloud de Confiance by S3NS. As tabelas gerenciadas do Iceberg oferecem a mesma experiência totalmente gerenciada das tabelas padrão do BigQuery, mas armazenam dados em buckets de armazenamento de propriedade do cliente. As tabelas gerenciadas do Iceberg são compatíveis com o formato de tabela Iceberg aberto 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:

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 da nuvem. É possível usar o BigQuery e mecanismos de computação de código aberto nessas tabelas sem mover os dados dos buckets que você controla. É preciso configurar um bucket do Cloud Storage antes de começar a usar 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, faça o seguinte:

  • Especifique a conexão a recursos do Cloud com WITH CONNECTION para configurar as credenciais de conexão para o BigQuery acessar o Cloud Storage.
  • Especifique o formato do arquivo de armazenamento de dados como PARQUET com a instrução file_format = PARQUET.
  • Especifique o formato da tabela de metadados de código aberto como ICEBERG com a instrução table_format = ICEBERG.

Práticas recomendadas

Mudar ou adicionar arquivos diretamente ao bucket fora do BigQuery pode causar perda de dados ou erros irrecuperáveis. A tabela a seguir descreve os possíveis cenários:

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. Adicione 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 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 apenas tabelas gerenciadas do Iceberg em prefixos vazios.
Modificar ou substituir arquivos de dados de tabelas gerenciadas pelo Iceberg. Perda de dados:em caso de modificação ou substituição externa, a tabela falha em uma verificação de consistência e fica ilegível. As consultas na tabela falham.
Não há uma maneira de se recuperar desse ponto por conta própria. Entre em contato com o suporte para receber ajuda com a recuperação de dados.
Modifique os 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 duas tabelas gerenciadas do Iceberg nos mesmos URIs ou em URIs sobrepostos. Perda de dados:o BigQuery não faz 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, causando perda de dados. Use URIs exclusivos para cada tabela gerenciada do Iceberg.

Práticas recomendadas para a 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, custo, integridade, segurança e governança das tabelas gerenciadas pelo Iceberg. Confira a seguir 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 localizados na mesma região que o conjunto de dados do BigQuery. Essa coordenação melhora a performance e reduz os custos ao evitar 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. O Autoclass começa com a classe de armazenamento Standard 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 as funções necessárias estão atribuídas aos usuários e contas de serviço corretos.

  • Para evitar 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 PUT e DELETE para todos os usuários, exceto aqueles que você especificar.

  • Aplique chaves de criptografia gerenciadas pelo Google ou pelo cliente para ter mais proteção de dados sensíveis.

  • Ative o registro de auditoria para ter transparência operacional, resolver problemas e monitorar o 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 objetos manualmente. Isso porque 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 a performance e o custo dos arquivos.

  • Evite os seguintes recursos do Cloud Storage, porque eles não são compatíveis com tabelas gerenciadas do Iceberg:

Para implementar essas práticas recomendadas, crie seu 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 projeto
  • LOCATION: 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 recursos 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 Funções necessárias a seguir. Para mais informações sobre os papéis e as permissões necessárias 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 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.delegate no seu projeto
    • bigquery.jobs.create no seu projeto
    • bigquery.readsessions.create no seu projeto
    • bigquery.tables.create no seu projeto
    • bigquery.tables.get no seu projeto
    • bigquery.tables.getData no seu projeto
    • storage.buckets.get no seu bucket
    • storage.objects.create no seu bucket
    • storage.objects.delete no seu bucket
    • storage.objects.get no seu bucket
    • storage.objects.list no seu 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 usar 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 que contém até quatro colunas. Elas precisam ser colunas de nível superior e sem repetição.
  • CONNECTION_NAME: o nome da conexão. Por exemplo, myproject.us.myconnection. Para usar uma conexão padrão, especifique DEFAULT em 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 usar 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 que contém até quatro colunas. Elas precisam ser colunas de nível superior e sem repetição.
  • 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. Caracteres curinga também são aceitos. 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 nelas. Se você 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 para 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 separados por vírgulas. Caracteres curinga também são aceitos. Por exemplo, gs://mybucket/table.
  • FILE_FORMAT: o formato da tabela de origem. Para saber quais formatos são aceitos, consulte a linha format de load_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 format de load_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 separada por vírgulas de URIs. Caracteres curinga também são aceitos. 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 Como 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 BigQuery.

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 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:

  1. Exporte os metadados para o formato Iceberg V2 com a instrução SQL EXPORT TABLE METADATA.

  2. Opcional: agende 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.

  3. Opcional: ative a atualização automática de metadados para que seu projeto atualize automaticamente o snapshot de metadados da tabela 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 METADATA são aplicados em 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 snapshot de metadados da tabela gerenciada do Iceberg

Depois de atualizar o snapshot de metadados da tabela gerenciada do Iceberg, você pode encontrar o snapshot 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 pelo 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 seu conjunto de dados e 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 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 Lançamentos 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 pelo Iceberg, siga as etapas mostradas em Como modificar esquemas de tabelas.

Usar transações com várias instruções

Para ter acesso a transações de várias instruções para tabelas gerenciadas do Iceberg, preencha o formulário de inscrição.

Usar o particionamento

Para ter acesso ao particionamento de tabelas gerenciadas do Iceberg, preencha o formulário de inscrição.

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:

  • DATE
  • DATETIME
  • TIMESTAMP

O particionamento de uma tabela em uma coluna DATE, DATETIME ou TIMESTAMP é conhecido como particionamento de coluna de 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 particionadas.

Limitações de particionamento

Criar uma tabela gerenciada do Iceberg particionada

Para criar uma tabela gerenciada do Iceberg particionada, siga as instruções para criar uma tabela gerenciada padrão do Iceberg e inclua uma das opções a seguir, dependendo do seu ambiente:

Modificar e consultar tabelas gerenciadas particionadas do Iceberg

As instruções e consultas da linguagem de manipulação de dados (DML) do BigQuery para tabelas gerenciadas particionadas do Iceberg são as mesmas das tabelas gerenciadas padrão do Iceberg. O BigQuery automaticamente escopo o job para as partições corretas, 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 particionadas do Iceberg com outros mecanismos da mesma forma que as tabelas gerenciadas padrão do Iceberg. Recomendamos ativar snapshots de metadados para ter a melhor experiência.

Para aumentar a segurança, as informações de particionamento das tabelas gerenciadas do Iceberg são separadas do caminho de dados e gerenciadas totalmente pela camada de metadados.

Preços

Os preços das tabelas gerenciadas do Iceberg consistem em armazenamento, otimização de armazenamento e consultas e jobs.

Armazenamento

As tabelas gerenciadas do Iceberg armazenam todos os dados no Cloud Storage. Você recebe cobranças por todos os dados armazenados, incluindo dados históricos de tabelas. As taxas de processamento e transferência de dados do Cloud Storage também podem ser aplicadas. 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 é faturado em unidades de computação de dados (DCUs) ao longo do tempo, em incrementos por segundo. Para mais detalhes, consulte Preços das tabelas gerenciadas do Iceberg.

As operações de exportação de dados realizadas 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 ver exemplos de consultas, consulte o seguinte:

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 houver reservas PIPELINE com slots do Enterprise ou Enterprise Plus disponíveis, as operações de carga 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 nem com instruções ALTER TABLE RENAME TO.
  • As tabelas gerenciadas do Iceberg não são compatíveis com cópias de tabelas nem com instruções CREATE TABLE COPY.
  • As tabelas gerenciadas do Iceberg não são compatíveis com clones de tabela nem com instruções CREATE TABLE CLONE.
  • As tabelas gerenciadas do Iceberg não são compatíveis com snapshots de tabela nem com instruções CREATE SNAPSHOT TABLE.
  • As tabelas gerenciadas do Iceberg não são compatíveis com o seguinte esquema de tabela:
  • As tabelas gerenciadas do Iceberg não são compatíveis com os seguintes casos de evolução de esquema:
    • Coerções de tipo de NUMERIC para FLOAT
    • Coerções de tipo de INT para FLOAT
    • Adicionar novos campos aninhados a colunas RECORD usando instruções DDL SQL
  • As tabelas gerenciadas do Iceberg mostram um tamanho de armazenamento de 0 byte quando consultadas pelo console do Google Cloud 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 oferecem suporte a atualizações de captura de dados alterados (CDC).
  • 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 de segurança.
  • As tabelas gerenciadas do Iceberg não são compatíveis com jobs de extração.
  • A visualização INFORMATION_SCHEMA.TABLE_STORAGE não inclui tabelas gerenciadas do Iceberg.
  • As tabelas gerenciadas do Iceberg não são compatíveis como destinos de resultados de consultas. Em vez disso, use a instrução CREATE TABLE com o argumento AS query_statement para criar uma tabela como o destino do resultado da consulta.
  • O CREATE OR REPLACE não oferece suporte à substituição de tabelas padrão por tabelas gerenciadas do Iceberg ou vice-versa.
  • O carregamento em lote e as instruções LOAD DATA só aceitam anexar dados a tabelas gerenciadas do Iceberg.
  • O carregamento em lote e as instruções LOAD DATA não são compatíveis com atualizações de esquema.
  • O TRUNCATE TABLE não oferece suporte a tabelas gerenciadas do Iceberg. Existem duas alternativas:
  • A função com valor de tabela (TVF) APPENDS não é compatível com tabelas gerenciadas do Iceberg.
  • Os metadados do Iceberg podem não conter dados transmitidos para o BigQuery pela API Storage Write nos últimos 90 minutos.
  • O acesso paginado baseado em registros usando tabledata.list não é compatível com tabelas gerenciadas do Iceberg.
  • Apenas uma instrução DML mutante simultânea (UPDATE, DELETE e MERGE) é executada para cada tabela gerenciada do Iceberg. Outras instruções DML mutantes são enfileiradas.