SuperAPI AI 工具集

monte-carlo-push-ingestion

数据与分析

查看项目

更新于 10-16 04:19

技能介绍

用途

Monte Carlo Push Ingestion 是一个智能体技能,帮助用户从数据仓库或相邻系统采集元数据、血缘关系和查询日志,并通过推送式摄取 API 直接发送到 Monte Carlo。推送模型与拉取模型互补,用于填补拉取模型无法覆盖的空白:不暴露查询历史的集成、非仓库资产之间的自定义血缘,或用户已经持有这些数据并希望直接发送的场景。

主要能力

该技能可以生成可直接运行的 Python 脚本,完成以下工作:

  • 使用目标平台惯用的驱动连接数据仓库
  • 发现数据库、模式和表
  • 提取列信息(名称、类型、行数、字节数、最后修改时间、描述)
  • 构建正确的 pycarlo RelationalAsset、LineageEvent 或 QueryLogEntry 对象
  • 推送到 Monte Carlo,并保存包含 invocation_id 的输出清单以便追踪

可推送的数据流包括:表元数据、表血缘、列血缘、查询日志,以及通过 GraphQL 变更创建的自定义血缘节点和边。

使用方式

该技能要求始终从模板出发生成脚本。模板位于技能目录下的 scripts/templates/<warehouse>/,可通过 glob 模式 **/push-ingestion/scripts/templates/<warehouse>/*.py 查找。模板文件命名模式为:collect_<flow>.py(仅采集)、push_<flow>.py(仅推送)、collect_and_push_<flow>.py(合并执行)。若目标仓库没有模板,则以 Snowflake 模板作为规范参考,仅调整仓库特定的采集查询。

脚本使用 pycarlo SDK,客户端通过 Client(session=Session(mcd_id=key_id, mcd_token=key_token, scope="Ingestion")) 初始化,服务通过 IngestionService(mc_client=client) 创建。推送方法包括 send_metadata()、send_lineage()、send_query_logs(),并通过 service.extract_invocation_id(result) 提取调用 ID。

环境变量约定:MCD_INGEST_ID、MCD_INGEST_TOKEN 用于推送脚本;MCD_ID、MCD_TOKEN 用于验证脚本;MCD_RESOURCE_UUID 用于所有脚本。

推送后需通过 GraphQL API 验证数据可见性。元数据通常在几分钟内可见,表血缘在数秒到几分钟内可见,列血缘需要几分钟,查询日志至少需要 15-20 分钟。

该技能还提供斜杠命令,例如 /mc-build-metadata-collector、/mc-build-lineage-collector、/mc-build-query-log-collector、/mc-validate-metadata、/mc-validate-lineage、/mc-validate-query-logs、/mc-create-lineage-node、/mc-create-lineage-edge、/mc-delete-lineage-node、/mc-delete-push-tables。

适用场景

  • 数据仓库不暴露查询历史,需要主动推送查询日志
  • 需要在非仓库资产(如 dbt 模型、Airflow DAG、自定义 ETL 管道)之间建立自定义血缘
  • 用户已持有元数据、血缘或查询日志,希望直接发送到 Monte Carlo
  • 需要为常见仓库(Snowflake、BigQuery、BigQuery Iceberg、Databricks、Redshift、Hive)快速生成采集脚本

限制与注意事项

  • 需要两个独立的 API 密钥:Ingestion 密钥(scope=Ingestion)用于推送,GraphQL API 密钥用于验证查询
  • 查询日志使用 log_type 而非 resource_type,这是唯一字段名不同的推送端点
  • 每次推送返回的 invocation_id 必须保存,它是跨下游系统追踪的唯一句柄
  • 大批量负载需要分批,建议每批 50 个资产;压缩请求体不得超过 1MB;pycarlo HTTP 客户端有硬编码的 10 秒读取超时
  • 推送频率最多每小时一次,低于每小时的推送会导致异常检测器行为不可预测
  • 列血缘在 10 天后过期;自定义血缘节点默认 7 天过期,需设置 expireAt: "9999-12-31" 才能永久保留
  • 推送的表不会被自动删除,需通过 deletePushIngestedTables 显式删除
  • 异常检测器需要历史数据训练:新鲜度需要约 2 周内 7 次以上推送,容量需要约 42 天内 10-48 个样本
  • 生成的脚本必须包含启动内存检查,避免大仓库长回溯窗口导致进程被静默终止
  • 仓库查询中的 SQL 标识符需要加引号,Snowflake 和 Redshift 使用双引号,BigQuery/Databricks/Hive 使用反引号