You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Levantamento do catálogo inteiro pra dar escopo a esta chore: cruzamos os 1171 registros de Table.Update (backend, via GraphQL — allUpdate(table_Id_Isnull: false, first: 1200), uma query só, sem paginação) contra o last_modified_time real de cada tabela no BigQuery (SELECT table_id, last_modified_time FROM basedosdados.<dataset>.__TABLES__, em lotes de UNION ALL, cobrindo os 228 datasets distintos — 0 GB de custo, é metadado puro, não um scan).
Isso é mais amplo que a verificação por Coverage/MAX() feita na #1806 (que cobriu as ~41 tabelas com flow monitorado) — aqui é o catálogo publicado inteiro, direto contra o campo que esta chore propõe corrigir.
Números gerais:
Categoria
Qtd.
Tabelas com Update vinculado a uma Table
1171
Sem Table.Update registrado (latest nulo)
11
Sem tabela real encontrada no BigQuery (dataset ou tabela não existe mais)
63
Com os dois valores disponíveis
1099
Batem (diferença ≤ 2 dias)
869
Divergência > 2 dias
230
Das 230 divergentes: 219 têm o BigQuery mais recente que o metadado (caso normal — o metadado só não foi commitado na última run), e 11 têm o metadado registrado mais recente que o BigQuery real (suspeito — ver seção própria abaixo).
Já existe um script pronto para corrigir uma parte deste escopo: pipelines/utils/metadata/sync_table_update.py (dry-run por padrão, --apply grava via client.upsert_table_update), cobrindo as ~41 tabelas ligadas a flows monitorados levantadas na #1806. Ele exclui de propósito br_me_comex_stat (4 tabelas) e br_ms_cnes (13 tabelas) — esses dois usam um modelo de reconciliação de cobertura que grava Table.Update.latest como data de cobertura, não como last_modified físico; aplicar a correção genérica nelas reintroduziria o bug que a migração deles já corrigiu.
Escopo afetado
63 tabelas registradas sem contraparte real no BigQuery — 7 datasets concentram todas: br_b3_cotacoes, br_ibge_censo_agropecuario, br_mercadolivre_ofertas, us_cms_open_payments (datasets inteiros não existem mais no projeto basedosdados), test_dataset (esperado), br_bd_metadados e br_ibge_censo_2022/br_ibge_pib (datasets existem, mas os table_id registrados não batem com nenhuma tabela real). Mesmo padrão do achado br_me_cnpj da #1806 — metadado órfão, não dá pra aplicar last_modified a uma tabela que não existe. Fora do escopo de correção automática; precisa de limpeza de catálogo separada.
11 tabelas onde o metadado registrado é mais recente que o BigQuery real (suspeito):
Os 5 br_ibge_munic são ruído de fronteira de dia (mesmo desvio de fuso de ~3h documentado na #1806). br_ms_sim.municipio (quase 5 anos na frente), br_ibge_ppm (4 tabelas) e br_inep_indicadores_educacionais.escola_nivel_socioeconomico são o achado real — antes de "corrigir" via last_modified, checar se há mais de uma CloudTable vinculada a essas Tables (uma pode apontar pra um table_id desatualizado/renomeado).
219 tabelas onde o BigQuery é mais recente que o metadado registrado (ordenado por magnitude — topo é o que mais precisa de correção; grupos com o mesmo valor de dias, ex. as ~35 de br_ibge_censo_demografico em +940d e as ~15 de br_tse_eleicoes em +600-628d, indicam uma run em lote que trouxe dado novo sem commitar metadado de nenhuma tabela):
(Lista completa, tabela a tabela sem agrupamento, disponível no vault interno da auditoria — grupos com */faixa de dias foram condensados aqui só pra caber no corpo da issue.)
Leitura:
br_ms_cnes e br_me_comex_stat aparecem com diferença de 38-49 dias — esperado, não é bug: o Table.Update deles é gravado como data de cobertura (sync_table_coverage_task), não como last_modified físico. Não devem passar pelo sync_table_update.py.
Muitas tabelas dicionario aparecem na lista — normalmente atualizadas na mesma run que a tabela principal do dataset; a mesma causa ("metadado nunca comitado") se aplica a elas.
Os grandes clusters (br_ibge_censo_demografico, br_tse_eleicoes, world_iea_timss, br_ibge_censo_2022) sugerem migrações/backfills em lote feitos fora do fluxo padrão dos flows (script manual, carga única), não um bug recorrente.
Referências
Verificar a situação das datas de atualização #1806 — auditoria original que motivou esta chore (verificação por Coverage/MAX() nas ~41 tabelas com flow monitorado; achou br_ms_sinan com Coverage desatualizado)
pipelines/utils/metadata/sync_table_update.py — script pronto (dry-run por padrão) pra corrigir as ~41 tabelas de flow monitorado; não cobre as 219 tabelas fora desse escopo listadas acima
Descrição
Levantamento do catálogo inteiro pra dar escopo a esta chore: cruzamos os 1171 registros de
Table.Update(backend, via GraphQL —allUpdate(table_Id_Isnull: false, first: 1200), uma query só, sem paginação) contra olast_modified_timereal de cada tabela no BigQuery (SELECT table_id, last_modified_time FROM basedosdados.<dataset>.__TABLES__, em lotes deUNION ALL, cobrindo os 228 datasets distintos — 0 GB de custo, é metadado puro, não um scan).Isso é mais amplo que a verificação por
Coverage/MAX()feita na #1806 (que cobriu as ~41 tabelas com flow monitorado) — aqui é o catálogo publicado inteiro, direto contra o campo que esta chore propõe corrigir.Números gerais:
Updatevinculado a umaTableTable.Updateregistrado (latestnulo)Das 230 divergentes: 219 têm o BigQuery mais recente que o metadado (caso normal — o metadado só não foi commitado na última run), e 11 têm o metadado registrado mais recente que o BigQuery real (suspeito — ver seção própria abaixo).
Já existe um script pronto para corrigir uma parte deste escopo:
pipelines/utils/metadata/sync_table_update.py(dry-run por padrão,--applygrava viaclient.upsert_table_update), cobrindo as ~41 tabelas ligadas a flows monitorados levantadas na #1806. Ele exclui de propósitobr_me_comex_stat(4 tabelas) ebr_ms_cnes(13 tabelas) — esses dois usam um modelo de reconciliação de cobertura que gravaTable.Update.latestcomo data de cobertura, não comolast_modifiedfísico; aplicar a correção genérica nelas reintroduziria o bug que a migração deles já corrigiu.Escopo afetado
63 tabelas registradas sem contraparte real no BigQuery — 7 datasets concentram todas:
br_b3_cotacoes,br_ibge_censo_agropecuario,br_mercadolivre_ofertas,us_cms_open_payments(datasets inteiros não existem mais no projetobasedosdados),test_dataset(esperado),br_bd_metadadosebr_ibge_censo_2022/br_ibge_pib(datasets existem, mas ostable_idregistrados não batem com nenhuma tabela real). Mesmo padrão do achadobr_me_cnpjda #1806 — metadado órfão, não dá pra aplicarlast_modifieda uma tabela que não existe. Fora do escopo de correção automática; precisa de limpeza de catálogo separada.11 tabelas onde o metadado registrado é mais recente que o BigQuery real (suspeito):
br_ms_sim.municipiobr_inep_indicadores_educacionais.escola_nivel_socioeconomicobr_ibge_ppm.efetivo_rebanhosbr_ibge_ppm.producao_origem_animalbr_ibge_ppm.producao_aquiculturabr_ibge_ppm.producao_pecuariabr_ibge_munic.atual_prefeitobr_ibge_munic.habitacaobr_ibge_munic.meio_ambientebr_ibge_munic.recursos_gestaobr_ibge_munic.recursos_humanosOs 5
br_ibge_municsão ruído de fronteira de dia (mesmo desvio de fuso de ~3h documentado na #1806).br_ms_sim.municipio(quase 5 anos na frente),br_ibge_ppm(4 tabelas) ebr_inep_indicadores_educacionais.escola_nivel_socioeconomicosão o achado real — antes de "corrigir" vialast_modified, checar se há mais de umaCloudTablevinculada a essasTables (uma pode apontar pra umtable_iddesatualizado/renomeado).219 tabelas onde o BigQuery é mais recente que o metadado registrado (ordenado por magnitude — topo é o que mais precisa de correção; grupos com o mesmo valor de dias, ex. as ~35 de
br_ibge_censo_demograficoem +940d e as ~15 debr_tse_eleicoesem +600-628d, indicam uma run em lote que trouxe dado novo sem commitar metadado de nenhuma tabela):br_inmet_bdmep.estacaobr_inep_indicadores_educacionais.brasil_remuneracao_docentesbr_cgu_pessoal_executivo_federal.terceirizadosbr_tse_eleicoes.local_secaoworld_wb_wdi.indicatorsworld_wb_wdi.indicator_timeworld_wb_wdi.footnoteworld_wb_wdi.dataworld_wb_wdi.country_indicatorbr_inep_saeb.uf_taxa_alfabetizacaobr_inep_saeb.brasil_taxa_alfabetizacaobr_tse_filiacao_partidaria.microdados_antigosbr_sp_seduc_fluxo_escolar.escolabr_sp_seduc_fluxo_escolar.municipiobr_bd_diretorios_brasil.municipiobr_inep_indicador_nivel_socioeconomico.escolabr_geobr_mapas.setor_censitario_2010br_ibge_censo_demografico.*(35 tabelas — setores censitários e microdados 1970-2010)br_cvm_administradores_carteira.responsavelbr_ibge_pnadc.dicionarioworld_wb_wdi.dicionarioworld_wb_mides.licitacao_itembr_ms_cnes.dicionariobr_rj_isp_estatisticas_seguranca.*(6 tabelas)br_cgu_beneficios_cidadao.bolsa_familia_pagamentobr_bd_diretorios_comercio_internacional.sistema_harmonizadobr_bd_diretorios_brasil.cid_10br_ons_estimativa_custos.custo_variavel_unitario_usinas_termicasbr_ms_sim.dicionarioworld_iea_timss.*(10 tabelas)br_bd_diretorios_brasil.etnia_indigenamundo_transfermarkt_competicoes_internacionais.champions_leaguebr_bcb_sicor.dicionariobr_inep_indicadores_educacionais.escola/municipio/uf_remuneracao_docentesbr_ibge_censo_2022.cadastro_enderecosbr_bd_diretorios_mundo.paisbr_bd_indicadores.receitas_planejadas/contabilidadebr_tse_eleicoes.*(17 tabelas — candidatos, resultados, receitas, despesas, perfil eleitorado)br_me_rais.dicionariobr_inep_indicador_nivel_socioeconomico.dicionariobr_ibge_pof.servico_nao_monetario_pof2_2017br_ibge_pam.lavoura_temporaria/lavoura_permanentebr_inep_saeb.brasil/municipio/uf/dicionariobr_rf_cno.dicionariobr_me_caged.microdados_antigos/microdados_antigos_ajustesbr_bd_indicadores.pessoas/equipesbr_inep_educacao_especial.tipo_deficienciabr_ibge_censo_2022.*(9 tabelas — população, domicílio, território indígena/quilombola, setor censitário)br_inep_censo_escolar.escolabr_bd_diretorios_brasil.empresabr_sfb_sicar.area_imovelbr_mg_belohorizonte_smfa_iptu.iptubr_ms_sia.dicionariobr_tse_eleicoes.receitas_orgao_partidariobr_inep_censo_educacao_superior.cursobr_ms_sinan.dicionariobr_inep_indicadores_educacionais.brasilbr_ms_sinan.microdados_denguebr_inep_enem.dicionario/microdadosbr_ibge_censo_2022.alfabetizacao_grupo_idade_sexo_racabr_inep_indicadores_educacionais.uf_taxa_transicaobr_tse_eleicoes.receitas_comitebr_cgu_licitacao_contrato.contrato_compra/contrato_item/contrato_termo_aditivobr_ms_sia.psicossocialbr_rj_isp_estatisticas_seguranca.evolucao_mensal_cispbr_ans_beneficiario.informacao_consolidadabr_simet_educacao_conectada.escolabr_ms_cnes.*(11 tabelas, incl.leito)br_me_comex_stat.*(4 tabelas)br_mma_sinpatinhas.microdadosbr_ibge_pnadc.microdadosbr_ibge_populacao.brasilbr_seeg_emissoes.municipio/ufbr_inep_saeb.aluno_em_34anous_harvard_ned.presidential_elections/parliamentary_electionsbr_rf_arrecadacao.itr/cnaebr_inep_sinopse_estatistica_educacao_basica.docente_regime_contratobr_senado_dados_abertos.*(10 tabelas)us_census_acs.*(10 tabelas)world_dasanaike_sage.*(4 tabelas)br_ms_sih.dicionariobr_ms_sim.microdados,br_ms_populacao.municipio,br_inpe_queimadas.microdadosus_census_cbp.*(4 tabelas),br_bd_diretorios_us.naics_*(5 tabelas)br_cgu_sancoes.dicionario,au_ato_abr.*(3 tabelas)br_inep_enem.questionario_socioeconomico_2023,br_rf_arrecadacao.cnae(Lista completa, tabela a tabela sem agrupamento, disponível no vault interno da auditoria — grupos com
*/faixa de dias foram condensados aqui só pra caber no corpo da issue.)Leitura:
br_ms_cnesebr_me_comex_stataparecem com diferença de 38-49 dias — esperado, não é bug: oTable.Updatedeles é gravado como data de cobertura (sync_table_coverage_task), não comolast_modifiedfísico. Não devem passar pelosync_table_update.py.dicionarioaparecem na lista — normalmente atualizadas na mesma run que a tabela principal do dataset; a mesma causa ("metadado nunca comitado") se aplica a elas.br_ibge_censo_demografico,br_tse_eleicoes,world_iea_timss,br_ibge_censo_2022) sugerem migrações/backfills em lote feitos fora do fluxo padrão dos flows (script manual, carga única), não um bug recorrente.Referências
Coverage/MAX()nas ~41 tabelas com flow monitorado; achoubr_ms_sinancomCoveragedesatualizado)compare_againstempoll_source_for_update, causa raiz do bug de comparação que motivou a auditoria inicialpipelines/utils/metadata/sync_table_update.py— script pronto (dry-run por padrão) pra corrigir as ~41 tabelas de flow monitorado; não cobre as 219 tabelas fora desse escopo listadas acima