

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Considerações e limitações
<a name="apache-iceberg-considerations"></a>

**nota**  
O Firehose oferece suporte ao Apache Iceberg Tables como destino em todas as regiões, exceto [Regiões da AWS](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#region)China AWS GovCloud (US) Regions, Ásia-Pacífico (Taipei), Ásia-Pacífico (Malásia), Ásia-Pacífico (Nova Zelândia) e México (Central).

O suporte do Firehose para tabelas do Apache Iceberg tem as considerações e limitações a seguir.
+ Taxa de **transferência** — Se você usar o **Direct PUT** como fonte para entregar dados às tabelas do Apache Iceberg, a taxa de transferência máxima por stream será 5 MiB/second nas regiões Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon) e Europa (Irlanda) e 1 em todas as outras. MiB/second Regiões da AWS Se você quiser inserir dados nas tabelas do Iceberg sem atualizações e exclusões e quiser maior throughput para seu fluxo, use o [formulário de limites do Firehose](https://support.console.aws.amazon.com/support/home#/case/create%3FissueType=service-limit-increase%26limitType=kinesis-firehose-limits) para solicitar um aumento do limite de throughput.

  Você também pode definir o sinalizador `AppendOnly` como `True` se quiser apenas inserir dados e não realizar atualizações e exclusões. Ao definir o sinalizador `AppendOnly` como `True`, o Firehose é escalado automaticamente para corresponder ao throughput. Atualmente, você pode definir esse sinalizador somente com a operação [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html)da API.

  Se um fluxo **Direct PUT** passar por controle de utilização devido a maiores volumes de ingestão de dados que excedam a capacidade de throughput de um fluxo do Firehose, o Firehose aumentará automaticamente o limite de throughput do fluxo até que o controle de utilização seja contido. Dependendo do aumento do throughput e do controle de utilização, o Firehose pode levar mais tempo para aumentar o throughput de um fluxo até os níveis desejados. Por esse motivo, tente novamente os registros de ingestão de dados com falha. Se você espera que o volume de dados aumente repentinamente em grandes quantidades ou se seu novo fluxo precisar de um throughput maior do que o limite de throughput padrão, solicite o aumento desse limite.
+ **Transação do S3 por segundo (TPS)** – Para otimizar o desempenho do S3, se você estiver usando o Kinesis Data Streams ou o Amazon MSK como origem, recomendamos particionar o registro de origem usando a chave de partição adequada. Dessa forma, os registros de dados roteados para a mesma tabela do Iceberg são mapeados para uma ou algumas partições de origem conhecidas como fragmentos. Se possível, distribua registros de dados pertencentes a diferentes tabelas Iceberg de destino em diferentespartitions/shards, so that you can use all the aggregate throughput available across all the partitions/shards of the source topic/stream.
+ **Colunas**: para nomes e valores de colunas, o Firehose usa somente o primeiro nível de nós em um JSON aninhado de vários níveis. Por exemplo, o Firehose seleciona os nós que estão disponíveis no primeiro nível, incluindo o campo de posição. Os nomes das colunas e os tipos de dados de origem devem corresponder exatamente aos das tabelas de destino para que o Firehose entregue com êxito. Nesse caso, o Firehose espera que você tenha uma coluna de tipo de dados struct ou map em suas tabelas do Iceberg que corresponda ao campo de posição. O Firehose oferece suporte a 16 níveis de aninhamento. Veja a seguir um exemplo de JSON aninhado.

  ```
  {
     "version":"2016-04-01",
     "deviceId":"<solution_unique_device_id>",
     "sensorId":"<device_sensor_id>",
     "timestamp":"2024-01-11T20:42:45.000Z",
     "value":"<actual_value>",
     "position":{
        "x":143.595901,
        "y":476.399628,
        "z":0.24234876
     }
  }
  ```

  Se os nomes das colunas ou os tipos de dados não corresponderem, o Firehose gerará um erro e entregará os dados ao bucket de erros do S3. Se todos os nomes de colunas e tipos de dados corresponderem nas tabelas do Apache Iceberg, mas você tiver um campo adicional presente no registro da fonte, o Firehose ignorará o novo campo. 
+ **Um objeto JSON por registro**: é possível enviar somente um objeto JSON em um registro do Firehose. Se você agregar e enviar vários objetos JSON dentro de um registro, o Firehose gerará um erro e entregará os dados ao bucket de erros do S3. Se você agregar registros com [KPL](https://docs.aws.amazon.com/streams/latest/dev/kpl-with-firehose.html) e ingerir dados no Firehose com o Amazon Kinesis Data Streams como fonte, o Firehose automaticamente os desagregará e usará um objeto JSON por registro. 
+ **Otimização de compactação e armazenamento** – Toda vez que você grava nas tabelas do Firehose, ele confirma e gera snapshots, arquivos de dados e arquivos de exclusão. Ter muitos arquivos de dados aumenta a sobrecarga de metadados e afeta a performance de leitura. Para obter a melhor performance de consulta, talvez você queira considerar uma solução que, periodicamente, pegue pequenos arquivos de dados e os grave novamente em um número menor de arquivos de dados maiores. Esse processo é chamado de compactação. AWS Glue Data Catalog suporta a compactação automática de suas tabelas Apache Iceberg. Para obter mais informações, consulte [Gerenciamento de compactação](https://docs.aws.amazon.com/glue/latest/dg/compaction-management.html) no *Guia do usuário do AWS Glue*. Para obter informações adicionais, consulte [Automatic compaction of Apache Iceberg Tables](https://aws.amazon.com/blogs/aws/aws-glue-data-catalog-now-supports-automatic-compaction-of-apache-iceberg-tables/). Como alternativa, você pode executar o comando Athena Optimize para realizar a compactação manualmente. Para obter mais informações sobre o comando Otimizar, consulte [Athena Optimize](https://docs.aws.amazon.com/athena/latest/ug/optimize-statement.html).

  Além da compactação dos arquivos de dados, você também pode otimizar o consumo de armazenamento com a instrução [VACUUM](https://docs.aws.amazon.com/athena/latest/ug/vacuum-statement.html), que realiza a manutenção das tabelas do Apache Iceberg, como a expiração de snapshots e a remoção do arquivo órfão. Como alternativa, você pode usar o AWS Glue Data Catalog que também suporta a otimização gerenciada de tabelas do Apache Iceberg removendo automaticamente os arquivos de dados, arquivos órfãos e instantâneos expirados que não são mais necessários. Para obter mais informações, consulte esta postagem no blog sobre [otimização de armazenamento de tabelas do Apache Iceberg](https://aws.amazon.com/blogs/big-data/the-aws-glue-data-catalog-now-supports-storage-optimization-of-apache-iceberg-tables/).
+ Não oferecemos suporte à origem do Amazon MSK Serverless para as tabelas do Apache Iceberg como destino.
+ Para uma operação de atualização, o Firehose coloca um arquivo de exclusão seguido por uma operação de inserção. A inclusão de arquivos de exclusão incorre em cobranças do Amazon S3.
+ O Firehose não recomenda o uso de vários fluxos do Firehose para gravar dados na mesma tabela do Apache Iceberg. Isso ocorre porque o Apache Iceberg depende do [Controle de simultaneidade otimista (OCC)](https://iceberg.apache.org/docs/1.6.0/reliability/#concurrent-write-operations). Se vários fluxos do Firehose tentarem gravar em uma única tabela do Iceberg simultaneamente, somente um fluxo conseguirá confirmar os dados por vez. Os outros fluxos que falham na confirmação recuam e repetem a operação de confirmação até que expire a duração configurada para a nova tentativa. Quando a duração da nova tentativa expirar, os dados e as chaves do arquivo de exclusão (caminhos do Amazon S3) são enviados para o prefixo de erro configurado do Amazon S3.
+ A versão atual da biblioteca do Iceberg compatível com o Firehose é a versão 1.5.2.
+ Para entregar dados criptografados às tabelas do Amazon S3, você deve configurar AWS Key Management Service os parâmetros nas tabelas do Amazon S3, e não na configuração do Firehose. Se você configurar AWS Key Management Service parâmetros no Firehose para entregar dados criptografados às tabelas do Amazon S3, o Firehose não poderá usar esses parâmetros para criptografar. Para obter mais informações, consulte [Usando criptografia do lado do servidor com](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-kms-encryption.html) chaves. AWS KMS 
+ Os streams do Firehose só oferecem suporte à entrega para bancos de dados e tabelas criados por meio da API do Iceberg. GlueCatalog A entrega para bancos de dados e tabelas criados por meio do Glue SDK não é suportada. Observe que um hífen (`-`) não é um caractere aceito para o banco de dados nem para o nome da tabela na biblioteca do Iceberg. Para obter mais detalhes, consulte o [Regex do banco de dados do Glue](https://github.com/apache/iceberg/blob/main/aws/src/main/java/org/apache/iceberg/aws/glue/IcebergToGlueConverter.java#L62) e o [Regex da tabela do Glue](https://github.com/apache/iceberg/blob/main/aws/src/main/java/org/apache/iceberg/aws/glue/IcebergToGlueConverter.java#L63]) que são aceitos pela biblioteca do Iceberg.
+ Todos os arquivos gravados pelo Firehose são computados usando a partição presente no registro. Isso também se aplica aos arquivos excluídos. Não há suporte para exclusões globais, como gravar arquivos de exclusão não particionados em uma tabela particionada.