BaseCNPJ 是 Meta Dados 的数据丰富化与商业智能平台:涵盖巴西企业的注册、股东与税务数据,可通过 API 实时查询。该数据库整合了超过 6200 万个营业场所,以巴西联邦税务局的开放数据为基础构建——在每个月度发布周期中都会经历一次繁重的重新处理摄取——并结合自有的多层数据丰富化能力。
如此规模的数据库,只有能被看清时才能创造价值。我们需要一个 BI 层来回答业务问题——按 UF(州)和 CNAE 分类的覆盖率、数据质量与新鲜度、各客户的 API 使用情况——而不必为每个新问题从零开始搭建仪表盘。
挑战
- 在不拖累生产环境 API 的前提下,完成繁重的分析型查询(按 CNAE、UF、企业规模和登记状态进行聚合)。
- 公共数据以不稳定著称:每个周期我们都会遇到联邦税务局文件布局的突然变更、编码损坏以及记录不一致——例如不存在或无效的 CNAE 会破坏引用完整性。
- 不懂 SQL 的商务与产品团队需要自助查询能力。
- 监控数据摄取:联邦税务局的每次数据加载都需要完整性与一致性校验。
解决方案
我们部署了自托管的 Metabase(Docker,始终保持最新版本)作为 BaseCNPJ 的 BI 层:
- 架构 — 在 DigitalOcean 上设置一个严格作为数据仓库运行的独立数据库,将繁重的分析负载与服务客户的生产环境 API 隔离开来。
- 建模 — 在 PostgreSQL 中针对最常查询的切分维度(CNAE × UF × 企业规模 × 状态)构建物化视图,并结合 Metabase 原生 Models,形成业务团队能够理解的语义层。
- 质量 — 加载后的校验流水线在联邦税务局每个新周期都会检查数据的完整性与一致性。
- 仪表盘 — 数据库的覆盖率与新鲜度、各客户的 API 使用漏斗——已跟踪超过 160 万次查询,每天约 2.3 万次——以及数据质量指标。
- 自助查询 — 商务与产品团队通过 query builder 以可视化方式提取复杂报表,无需依赖工程团队。
成果
过去需要复杂的 SQL 查询——或数天开发工作——才能完成的事情,如今变成了几秒内即可解决的自助查询。商务团队可自主按 CNAE、区域、注册资本和成立日期筛选活跃企业,并为高转化的外呼营销活动构建市场细分,无需向工程团队提交工单。
技术栈
PostgreSQL · Metabase(自托管,Docker) · 数据摄取流水线中的 Python · DigitalOcean · 巴西联邦税务局的开放数据。
为什么选择 Metabase
开源且自托管——对基础设施与数据拥有完全控制,这对 LGPD 合规至关重要;一个业务团队真正会用的 query builder;以及按团队规模而非数据量扩展的成本。
常见问题
为什么不直接用 API 来做报表?
API 是为单点、事务性查询设计的,而非繁重的聚合分析。直接在生产环境数据库上运行按 CNAE、UF 和企业规模的分析,会拖慢 API 使用者的响应时间。因此我们将分析层分离到独立的数据仓库中。
业务团队需要懂 SQL 吗?
不需要。Metabase 的 query builder 让人无需写一行 SQL 即可构建数据切分与仪表盘——而需要更高级功能的人也可以随时使用 SQL 编辑器。