Configuração do fluxo do Firehose
Para criar um fluxo do Firehose com as tabelas do Apache Iceberg como destino, você precisa configurar os itens a seguir.
nota
A configuração de um fluxo do Firehose para entrega em tabelas em buckets de tabelas do S3 é a mesma das tabelas do Apache Iceberg no Amazon S3.
Configuração de fonte e destino
Para entregar dados para as tabelas do Apache Iceberg, escolha a fonte do seu fluxo.
Para configurar a fonte do seu fluxo, consulte Definição de configurações da fonte.
Em seguida, escolha Tabelas do Apache Iceberg como destino e forneça um nome de fluxo do Firehose.
Configuração da transformação de dados
Para realizar transformações personalizadas em seus dados, como adicionar ou modificar registros em seu fluxo de entrada, é possível adicionar uma função do Lambda ao seu fluxo do Firehose. Para obter mais informações sobre transformação de dados usando o Lambda em um fluxo do Firehose, consulte Transformação de dados da fonte no Amazon Data Firehose.
Para tabelas do Apache Iceberg, você precisa especificar como deseja encaminhar os registros de entrada para diferentes tabelas de destino e as operações que deseja realizar. Uma das maneiras de fornecer as informações de encaminhamento necessárias para o Firehose é usando uma função do Lambda.
Para obter mais informações, consulte Encaminhamento de registros para diferentes tabelas do Iceberg.
Conexão de catálogo de dados
O Apache Iceberg requer um catálogo de dados para gravar nas tabelas do Apache Iceberg. O Firehose se integra ao AWS Glue Data Catalog para tabelas do Apache Iceberg.
É possível usar o AWS Glue Data Catalog na mesma conta do fluxo do Firehose ou em uma conta cruzada e na mesma região do fluxo do Firehose (padrão), ou em uma região diferente.
Se você estiver entregando para uma tabela do Amazon S3 e estiver usando o console para configurar seu fluxo do Firehose, selecione o catálogo que corresponda ao seu catálogo de tabelas do Amazon S3. Se você estiver usando a CLI para configurar seu fluxo do Firehose, na entrada de CatalogConfiguration, use CatalogARN com o formato: arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog/<s3
table bucket name>. Para obter mais informações, consulte Configuração de um fluxo do Firehose para as tabelas do Amazon S3.
nota
O Firehose aceita três operações relacionadas às tabelas do Iceberg: inserir, atualizar e excluir. Sem que uma operação tenha sido especificada, o Firehose usa como padrão a inserção, adicionando cada registro recebido como uma nova linha e preservando as duplicatas. Para modificar os registros atuais, especifique a operação de “atualização”, que usa chaves primárias para localizar e alterar as linhas existentes.
Exemplo:
Padrão (inserir): vários registros de clientes idênticos criam linhas duplicadas.
Atualização especificada: o novo endereço do cliente atualiza o registro atual.
Configuração de expressões JQ
Para tabelas do Apache Iceberg, você precisa especificar como deseja encaminhamento os registros de entrada para diferentes tabelas de destino e as operações, como inserir, atualizar e excluir, que deseja realizar. Isso pode ser feito configurando expressões JQ para que o Firehose analise e obtenha as informações necessárias. Para obter mais informações, consulte Fornecimento das informações de encaminhamento para o Firehose com expressão JSONQuery.
Configuração de chaves exclusivas
Atualizações e exclusões com mais de uma tabela: as chaves exclusivas são um ou mais campos em seu registro de fonte que identificam exclusivamente uma linha nas tabelas do Apache Iceberg. Se você inseriu somente um cenário com mais de uma tabela, não precisará configurar chaves exclusivas. Se você quiser fazer atualizações e exclusões em determinadas tabelas, deverá configurar chaves exclusivas para essas tabelas necessárias. Observe que a atualização inserirá automaticamente a linha se a linha nas tabelas estiver ausente. Se você tiver apenas uma única tabela, então poderá configurar chaves exclusivas. Para uma operação de atualização, o Firehose coloca um arquivo de exclusão seguido por uma inserção.
É possível configurar chaves exclusivas por tabela como parte da criação do fluxo do Firehose, ou é possível definir identifier-field-idsidentifier-field-ids para as tabelas necessárias e os usará como chaves exclusivas. Se ambos não estiverem configurados, a entrega de dados com operações de atualização e exclusão falhará.
Para configurar essa seção, forneça o nome do banco de dados, o nome da tabela e as chaves exclusivas das tabelas nas quais você deseja atualizar ou excluir dados. Você só pode ter uma entrada para cada tabela na configuração. Não será necessário configurar essa seção para cenários somente de acréscimo. Opcionalmente, você também pode escolher fornecer um prefixo de bucket de erros se os dados da tabela falharem na entrega, conforme mostrado no exemplo a seguir.
[ { "DestinationDatabaseName": "MySampleDatabase", "DestinationTableName": "MySampleTable", "UniqueKeys": [ "COLUMN_PLACEHOLDER" ], "S3ErrorOutputPrefix": "OPTIONAL_PREFIX_PLACEHOLDER" } ]
O Firehose suporta a configuração de chaves exclusivas se o nome da coluna fornecida for exclusivo em toda a tabela. No entanto, ele não aceita nomes de colunas totalmente qualificados como chaves exclusivas. Por exemplo, uma chave chamada top._id não é considerada uma chave exclusiva se a _id do nome da coluna também estiver presente no nível superior. Se a _id for exclusiva em toda a tabela, ela será utilizada independentemente de sua localização na estrutura da tabela. Ou seja, independentemente de ser uma coluna de nível superior ou uma coluna aninhada. No exemplo a seguir, _id é uma chave exclusiva válida para o esquema porque o nome da coluna é exclusivo em todo o esquema.
[ "schema": { "type": "struct", "fields": [ { "name": "top", "type": { "type": "struct", "fields": [ { "name": "_id", "type": "string" }, { "name": "name", "type": "string" } ] } }, { "name": "user", "type": "string" } ] } ]
No exemplo a seguir, _id não é uma chave exclusiva válida para o esquema porque é usada tanto na coluna de nível superior quanto na estrutura aninhada.
[ "schema": { "type": "struct", "fields": [ { "name": "top", "type": { "type": "struct", "fields": [ { "name": "_id", "type": "string" }, { "name": "name", "type": "string" } ] } }, { "name": "_id", "type": "string" } ] } ]
Especificação da duração da repetição
É possível usar essa configuração para especificar a duração, em segundos, durante a qual o Firehose deve tentar novamente, caso encontre falhas na gravação nas tabelas do Apache Iceberg no Amazon S3. É possível definir qualquer valor de 0 a 7.200 segundos para realizar novas tentativas. Por padrão, o Firehose tenta novamente por 300 segundos.
Como lidar com falha na entrega ou no processamento
Você deve configurar o Firehose para entregar registros a um bucket de backup do S3 caso ele encontre falhas no processamento ou na entrega de um fluxo após a expiração da duração da nova tentativa. Para isso, configure o bucket de backup do S3 e o prefixo de saída de erro do bucket de backup do S3 nas Configurações de backup no console.
Lidar com erros
O Firehose envia todos os erros de entrega para os logs do CloudWatch e para os buckets de erros do Amazon S3.
Lista de erros:
|
Mensagem de erro |
Descrição |
|---|---|
|
|
Firehose está gravando em uma tabela que não existe ou a tabela não está no formato V2. O Firehose não oferece suporte a tabelas no formato V1. |
|
|
Um nome de tabela nulo ou vazio é aprovado ou a tabela não está no formato V2. O Firehose não oferece suporte a tabelas no formato V1. |
|
|
Certifique-se de que o perfil do IAM criado na etapa de pré-requisitos tenha as permissões e a política de confiança necessárias. |
|
|
Certifique-se de que o perfil do IAM criado na etapa de pré-requisitos tenha as permissões e a política de confiança necessárias. |
Configuração de sugestões de buffer
O Firehose armazena em buffer os dados de streaming recebidos na memória até um determinado tamanho (Tamanho do armazenamento em buffer) e por um determinado período (Intervalo de armazenamento em buffer) antes de entregá-los às tabelas do Apache Iceberg. É possível escolher um tamanho de buffer de 1 a 128 MiBs e um intervalo de buffer de 0 a 900 segundos. Sugestões de valores de buffer mais altos resultam em menor número de gravações no S3, menor custo de compactação devido a arquivos de dados maiores e runtime mais rápido de consultas, mas com maior latência. Sugestões de valores buffer mais baixos entregam os dados com menor latência.
Definir as configurações avançadas
É possível configurar a criptografia do lado do servidor, o registro de erros em log, as permissões e tags para as tabelas do Apache Iceberg. Para obter mais informações, consulte Definir as configurações avançadas. Você precisa adicionar o perfil do IAM que criou como parte do Pré-requisitos para uso das tabelas do Apache Iceberg como destino. O Firehose assumirá o perfil para acessar as tabelas do AWS Glue e gravar nos buckets do Amazon S3.
A criação do fluxo do Firehose pode demorar vários minutos para ser concluída. Depois de criar com êxito o fluxo do Firehose, será possível começar a ingerir dados nele e visualizar os dados nas tabelas do Apache Iceberg.