Olá Oliva, tudo bem?
Sim, conseguimos carregar dados de uma tabela PostgreSQL externa para o BigQuery sem grandes complicações. Você não precisa, necessariamente, de um conjunto de dados preexistente para iniciar a migração.
Uma maneira de fazer isso é usando as Conexões de Dados do BigQuery. Você cria uma Conexão que aponta diretamente para o seu PostgreSQL. Isso permite que você execute consultas federadas, ou seja, você escreve um SELECT no BigQuery, e ele busca os dados no PostgreSQL. Essa funcionalidade é comumente usada para consultas pontuais ou para mover a tabela de uma vez só com um comando como CREATE TABLE AS SELECT * FROM minha_conexao.tabela_postgres.
Para volumes realmente grandes (milhares ou milhões de linhas) ou para uma rotina de carga recorrente, o caminho ideal é a abordagem clássica de ETL/ELT. O ideal é exportar esses dados do PostgreSQL para o Google Cloud Storage (GCS), de preferência em formatos otimizados como Parquet ou CSV, e depois carregar esses arquivos no BigQuery.
Sua preocupação com a condição IN é super válida, já que em muitos bancos relacionais tradicionais, essa condição realmente tem limites de performance ou até limites físicos (como o famoso limite de 1000 itens) quando a lista é muito longa.
No BigQuery, as coisas são diferentes: o IN vai funcionar com milhares de itens sem quebrar a consulta, pois ele não impõe esse limite físico baixo. O BigQuery é feito para processar dados em escala massiva e de forma distribuída.
Mas, mesmo que funcione, usar uma lista gigante de IDs literais dentro do WHERE id IN (...) ainda não é a prática mais eficiente.
A melhor maneira de filtrar ou identificar registros repetidos no BigQuery, quando se trata de milhares de IDs, é através de um JOIN.
Se você carregar os IDs que precisa checar (os repetidos) em uma pequena tabela temporária ou permanente, e depois usar um INNER JOIN com a sua tabela principal, o otimizador do BigQuery pode aplicar técnicas avançadas como Hash Joins. Essa operação distribuída é mais rápida e escalável do que tentar comparar cada linha da sua tabela com uma lista literal que está dentro do seu código SQL.
Com isso, se você tem poucos itens (uns 100 ou 200), o IN é ótimo pela legibilidade. Mas para milhares de linhas, migre a lógica para um JOIN e garanta a melhor performance e a otimização de custos de consulta no BigQuery.
Espero ter ajudado.
Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!