Estou enfrentando erros ao usar uma tabela Apache Iceberg com o Amazon Athena.
Resolução
Siga as etapas de solução de problemas do erro que você está enfrentando.
Chave de propriedade da tabela não suportada
Esse erro ocorre quando a cláusula TBLPROPERTIES do comando CREATE TABLE ou ALTER TABLE não usa uma propriedade de tabela compatível. Quando você está criando ou modificando tabelas Iceberg, o Athena permite somente uma lista predefinida de pares de valores-chave nas propriedades da tabela.
Para resolver esse problema, certifique-se de que sua tabela Iceberg use propriedades de tabela suportadas.
O Athena não pode gerar a declaração CREATE TABLE porque a tabela tem propriedades não suportadas
Você recebe um erro “UNSUPPORTED” quando o Athena não consegue reproduzir a estrutura da tabela porque você usou a declaração DDL SHOW CREATE TABLE em sua consulta. Em vez disso, use a declaração DDL DESCRIBE FORMATTED para mostrar as propriedades da tabela.
Você recebe o erro “TABLE_REDIRECTION_ERROR”
Esse erro ocorre com consultas SELECT do Athena que usam metadados de tabela Iceberg não compatíveis. Certifique-se de que sua consulta Athena SELECT contenha metadados compatíveis da tabela Query Iceberg.
Você recebe o erro “Unsupported Hive type”
Esse erro ocorre quando você usa um tipo de dados não suportado com uma tabela Iceberg. Por exemplo, você pode receber o erro “SHORT, use integer” porque as tabelas Iceberg não suportam os tipos de dados tinyint ou smallint Athena. Ou você pode receber o erro “CHAR, use string” porque as tabelas Iceberg não suportam os tipos de dados char Athena.
Para resolver esse problema, confirme se sua consulta do Athena está usando um tipo de dados compatível com tabelas Iceberg.
Você recebe o erro “ICEBERG_COMMIT_ERROR”
Esse erro pode ocorrer quando várias instruções tentam modificar o mesmo conjunto de arquivos que são executados em paralelo para atualizações da tabela Iceberg. Por exemplo, quando várias instruções DELETE em paralelo tentam excluir o mesmo conjunto de registros ao mesmo tempo.
Para evitar esse problema, execute as seguintes ações:
- Certifique-se de que as atualizações de consulta sejam executadas sequencialmente para evitar o processamento paralelo de dados.
- Implemente um mecanismo de repetição com recuo exponencial ao atualizar as tabelas do Iceberg.
Observação: o Athena somente é compatível com o bloqueio positivo do AWS Glue. Ao modificar uma tabela Iceberg com outros métodos de bloqueio, você pode causar perda de dados e interromper transações. Para obter mais informações, consulte Bloqueio positivo no site do Apache Iceberg.
Você recebe o erro “NOT\ _SUPPORTED: Iceberg table updates require at least format version 2”
Esse erro ocorre quando você tenta a operação DELETE em uma tabela Iceberg da versão 1. O Athena somente cria e opera nas tabelas Iceberg da versão 2. Certifique-se de que sua mesa Iceberg use a versão 2 do motor Athena. Se você usar outro tipo de mecanismo, defina a propriedade da tabela format-version como 2 para permitir exclusões em nível de linha. Por exemplo, use a versão 2 ao escrever uma tabela Iceberg e registrá-la no catálogo de dados do AWS Glue. Para obter mais informações, consulte Excluir formatos no site do Apache Iceberg.
Você recebe o erro “GENERIC_INTERNAL_ERROR:”
Se você receber a seguinte mensagem de erro:
“GENERIC_INTERNAL_ERROR: com.amazonaws.trino.exceptions.UnrecoverableS3OperationException: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist”
Esse erro ocorre quando você exclui um arquivo de metadados, como uma lista de manifestos ou metadata.json. Em seguida, a consulta do Athena falha. Se você não conseguir recuperar o arquivo com êxito, reverta a tabela para um snapshot ou um carimbo de data/hora.
Observação: você deve reverter a tabela em um ambiente Apache Spark, como AWS Glue ou Amazon EMR, não no editor de consultas Athena.
Para reverter a tabela para um ID de snapshot específico, execute o comando roll_to_snapshot Apache Iceberg:
CALL catalog_name.system.rollback_to_snapshot('your-db.your-table', your-snapshot-id)
Observação: substitua your-db, your-table e your-snapshot-id por seus valores.
Para reverter a tabela para um carimbo de data/hora específico, execute o comando rollback_to_timestamp Apache Iceberg:
CALL catalog_name.system.rollback_to_timestamp('your-db.your-table', TIMESTAMP 'yyyy-mm-dd hh:mm:ss')
Observação: substitua your-db, your-table e yyyy-mm-dd hh:mm:ss por seus valores.
Para obter mais informações, consulte rollback_to_snapshot e rollback_to_timestamp no site do Apache Iceberg.
Informações relacionadas
Solucionar problemas no Athena
Como posso usar o Apache Iceberg com um catálogo de dados do AWS Glue entre contas no Spark?
Consulte tabelas do Apache Iceberg