fix: aplicar pushdown de ad_reached_countries no Meta Ad Library#57
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexto
A investigação do conector
meta_ad_librarymostrou que o Data Agent estava gerando consultas comWHERE ad_reached_countries = ..., mas o handler do MindsDB não tratava esse filtro como parte da request à Meta API. Na prática, o campo acabava sendo interpretado como se fosse uma coluna local da tabelaads, o que abria espaço para binder errors e para queda de comportamento para consultas mais amplas sem o filtro de país desejado.O que foi implementado
Implementei a extração de
ad_reached_countriesa partir das conditions SQL no handlermeta_ad_library, com suporte aEQUALeIN. Quando esse filtro aparece na query, ele passa a ser normalizado e enviado como parâmetro da request para a Meta API, com marcação deapplied=Truepara evitar que o mecanismo local tente reaplicar a condição como se ela fosse uma coluna do dataframe.Também cobri esse comportamento com testes unitários para os cenários principais: filtro simples, lista de países, valor JSON serializado e filtro vazio, garantindo que o handler mantenha o escopo original do datasource quando não houver país válido para fazer pushdown.
Arquitetura e decisões
A decisão aqui foi tratar
ad_reached_countriescomo filtro de request-time, e não como coluna da tabelaads. Isso preserva o contrato real da Meta Ad Library API e evita modelar como row-level data algo que, semanticamente, pertence à busca e não ao resultado por linha.Também mantive a precedência da query sobre a configuração persistida do datasource: quando o SQL explicita
ad_reached_countries, esse valor deve vencer o escopo administrativo salvo na conexão. Quando a query não fornece um filtro válido, o handler continua usando o escopo já configurado na connection data.Pontos de atenção para review
O principal ponto de review é validar se a extração de
ad_reached_countriescobre bem o shape de conditions que o parser do MindsDB entrega paraEQUALeIN, sem introduzir efeitos colaterais em outros filtros já suportados pelo handler.Também vale revisar a decisão de não expor
ad_reached_countriescomo coluna selecionável da tabela, já que a mudança assume explicitamente que esse campo deve existir apenas como filtro de pushdown e não como dado retornado no schema do datasource.