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
nota
O Firehose oferece suporte ao Apache Iceberg Tables como destino em todas as regiões AWS GovCloud (US) Regions, exceto Regiões da AWSChina e Ásia-Pacífico (Malásia).
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 taxa de transferência para seu stream, use o formulário Firehose Limits para solicitar um aumento do limite
de taxa de transferência. Você também pode definir o
AppendOnly
sinalizador comoTrue
se quiser apenas inserir dados e não realizar atualizações e exclusões. Ao definir aAppendOnly
bandeira comoTrue
, o Firehose é escalado automaticamente para corresponder à sua taxa de transferência. Atualmente, você pode definir esse sinalizador somente com a operação CreateDeliveryStreamda API.Se um stream Direct PUT sofrer limitação devido a maiores volumes de ingestão de dados que excedem a capacidade de taxa de transferência de um stream Firehose, o Firehose aumenta automaticamente o limite de taxa de transferência do stream até que a limitação seja contida. Dependendo do aumento da taxa de transferência e da limitação, o Firehose pode levar mais tempo para aumentar a taxa de transferência de um stream até os níveis desejados. Por esse motivo, continue tentando novamente os registros de ingestão de dados com falha. Se você espera que o volume de dados aumente em grandes rajadas repentinas ou se seu novo stream precisar de uma taxa de transferência maior do que o limite de taxa de transferência padrão, solicite o aumento do limite de taxa de transferência.
-
Transação S3 por segundo (TPS) — Para otimizar o desempenho do S3, se você estiver usando o Kinesis Data Streams ou o Amazon MSK como fonte, recomendamos particionar o registro de origem usando uma chave de partição adequada. Dessa forma, os registros de dados que são roteados para a mesma tabela 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 dos dados de origem devem corresponder exatamente aos das tabelas de destino para que o Firehose seja entregue com sucesso. 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 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 no Iceberg Tables usando o Firehose, ele confirma e gera instantâneos, arquivos de dados e exclui arquivos. Ter muitos arquivos de dados aumenta a sobrecarga de metadados e afeta o desempenho de leitura. Para obter um desempenho de consulta eficiente, talvez você queira considerar uma solução que, periodicamente, pegue pequenos arquivos de dados e os reescreva em menos 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 no Guia do usuário do AWS Glue. Para obter informações adicionais, consulte 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. Além da compactação dos arquivos de dados, você também pode otimizar o consumo de armazenamento com a instrução VACUUM, que realiza a manutenção das tabelas do Apache Iceberg, como expiração de instantâneos e remoção de arquivos órfãos. 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
. -
Não oferecemos suporte à fonte Amazon MSK Serverless para tabelas Apache Iceberg como destino.
-
Para entrega em tabelas em compartimentos de mesa do Amazon S3, o Firehose suporta somente o catálogo padrão. AWS Glue
-
Para uma operação de atualização, o Firehose coloca um arquivo de exclusão seguido por uma operação de inserção. A exclusão de arquivos incorre em cobranças de entrada do Amazon S3.
-
O Firehose não recomenda o uso de vários streams do Firehose para gravar dados na mesma tabela do Apache Iceberg. Isso ocorre porque o Apache Iceberg depende do Controle Otimista de Concorrência
(OCC). Se vários streams do Firehose tentarem gravar em uma única tabela Iceberg simultaneamente, somente um stream 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 a duração da nova tentativa configurada expire. Quando a duração da nova tentativa se esgota, os dados e as chaves de 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 Iceberg Library 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 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 compatível com o banco de dados e o nome da tabela na biblioteca Iceberg. Para obter mais detalhes, consulte o Glue Database Regexe o Glue Table Regex que são compatíveis com a biblioteca Iceberg.