1
resposta

[Projeto] Rodar todos os dias com upsert

Olá, tenho uma duvida! Como eu poderia fazer para caso eu precisasse rodar um etl todos os dias, e sempre que eu rodasse atualizasse os dados apenas dos últimos 7 dias ? O que tem para trás não é para alterar mais. Preciso atualizar apenas os últimos 7 dias, e fazer merge (upsert) deles pelo ID.

1 resposta

Olá Yan, tudo bem?

Para realizar um processo ETL diário que atualize apenas os dados dos últimos 7 dias, você pode utilizar filtros.

No script do AWS Glue, adicione um filtro para carregar apenas os dados dos últimos 7 dias. Você pode usar a função date_sub do Spark SQL para calcular a data de 7 dias atrás e filtrar os dados a partir daí.

from pyspark.sql.functions import col, current_date, date_sub

# Supondo que 'data_coluna' seja a coluna de data no seu dataset
seven_days_ago = date_sub(current_date(), 7)
dados_filtrados = dados.where(col("data_coluna") >= seven_days_ago)

Para fazer o upsert, você pode usar a função MERGE do Delta Lake ou UPSERT do Apache Hudi, que são compatíveis com o Spark, permitindo realizar operações de atualização/inserção (upsert). Escolha a ferramenta que melhor se adapta ao seu caso de uso.

Para agendar a execução diária do seu AWS Glue Job, você pode utilizar:

As documentações estão em inglês, mas você poderá utilizar a tradução automática do navegador.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado