BigQuery Python UDF 新增日志可观测能力
有效阅读仅保存在当前浏览器,用于「为你」推荐;暂停或清除记录。
DataHot 速览
Google Cloud 宣布 BigQuery 的 Python UDF 支持标准 logging 库,可直接将结构化日志写入 Cloud Logging,无需外部插件或自定义连接器。文章以电商事件接入管道为例,展示内联校验、实时告警和 SQL 排查回放三阶段流程,帮助团队在查询执行中捕获行级诊断信息并隔离问题记录。
为什么值得关注:该功能直接增强 BigQuery 数据管道的可观测性与容错能力,对构建和运维数据接入、生产管道的从业者有实用价值。
本文目录 14 节
译文
AI 逐段翻译我们正在宣布一项新的 日志记录功能 现已在 BigQuery 的 Python 用户定义函数(UDF)中可用。开发者现在可以直接在 BigQuery UDF 中使用 Python 的标准 logging 库,将结构化日志无缝发送到 Cloud Logging——无需任何外部插件或自定义连接器。
UDF 日志记录支持广泛的运维监控和调试工作流,为演示此功能,我们展示了一个构建容错、有韧性的数据管道的示例。在下面的示例中,我们在查询执行期间捕获行级诊断遥测数据,以便团队可以轻松隔离有问题的记录、触发实时告警,并通过 SQL 分类处理问题,而不会中断整个工作负载。
在本文中,我们将向你展示如何开始使用 Python UDF 日志记录,并作为一个实用的端到端示例,带你走一遍电子商务事件摄取管道。
架构概览
该工作流由三个阶段组成:
- 内联验证:Python UDF 解析传入的 JSON 载荷。有效记录会进入目标表;损坏或不符合要求的行会触发
logging.error()并返回NULL以防止查询失败。 - 实时告警:基于日志的 Cloud Monitoring 指标会在错误率超过 SLA 阈值时通知你的团队。
- SQL 分类处理与重放:数据工程师通过关联的
_AllLogs视图,使用标准 SQL 在 BigQuery 中查询被隔离的载荷,诊断根本原因,并重新摄取恢复的数据。
尽管此具体演示依赖 Python 进行数据验证和转换,但你可以将 Python 驱动的日志记录和验证无缝集成到执行基于 SQL 转换的管道中。
快速入门演练:分步讲解
第 1 步:创建通用 Python UDF
此 UDF 解析 JSON 并检查必需字段。如果解析失败或缺少必需键,它会记录结构化诊断 JSON 并返回 NULL。
正在加载……
第 2 步:启用日志记录后运行摄取
在此示例中,我们模拟一个处理传入用户操作(click、view、checkout)的电子商务事件摄取管道。我们的目标是将有效事件提取到干净的分析表中,同时优雅地隔离损坏或缺少 schema 的载荷。
使用 SET @@udf.properties 在会话中启用日志记录:
正在加载……
摄取结果
| event_id | user_id | event_name | status |
|---|---|---|---|
evt_001 | usr_101 | click | VALID |
evt_004 | usr_102 | checkout | VALID |
查询成功完成且未中断,同时坏行(第 2 行和第 3 行)被路由到 Cloud Logging。
第 3 步:在 Cloud Logging 上设置实时告警
你可以配置告警,以便在格式错误的载荷超过可接受阈值时立即通知值班团队。
在 Google Cloud 控制台中(一键操作)
- 在 Google Cloud 控制台中,打开 Logs Explorer。
- 粘贴你的 UDF 例程的日志过滤器:
正在加载……
3. 点击 Create alert 位于顶部操作栏。
4. 设置你的通知渠道(例如 Slack、PagerDuty 或 Email)并保存该政策。
第 4 步:使用 BigQuery Log Analytics 分类处理坏行
"注意:要通过 BigQuery SQL 查询你的日志,请确保你已在 Cloud Logging 存储桶上启用 BigQuery Log Analytics 并创建了关联数据集。"
通过关联的 _AllLogs 视图,使用 BigQuery SQL 查询被隔离的载荷:
正在加载……
Log Analytics 输出
| timestamp | severity | error_type | missing_key | raw_payload |
|---|---|---|---|---|
2026-09-17 18:35:50 | ERROR | MISSING_REQUIRED_KEY | user_id | {"event": "view"} |
2026-09-17 18:35:50 | ERROR | JSON_SYNTAX_ERROR | null | corrupted_json{ |
恢复数据
由于完整的原始载荷保留在 Cloud Logging 中,一旦上游数据修复,你就可以直接用 SQL 恢复被隔离的记录:
正在加载……
最终的 clean_events 表结果:
| event_id | user_id | event_name | status |
evt_001 | usr_101 | click | VALID |
evt_004 | usr_102 | checkout | VALID |
| evt_003_recovered | default_user | view | RECOVERED |
所有有效和已恢复的数据现已统一到生产表中,没有任何数据丢失。
其他用例
- 影子执行与安全迁移:在 UDF 中并排运行旧版和新版业务逻辑。将旧版结果返回到生产环境,同时将计算差异记录到 Cloud Logging。
- PII 脱敏审计:在写入 BigQuery 之前掩码敏感令牌(例如 SSN 或账号),同时向 Cloud Logging 发送匿名化审计事件。
- ML 推理漂移:当嵌入式评分逻辑遇到词汇表外输入或低模型置信度时记录警告。
最佳实践
- 启用调试输出:在希望捕获日志的会话中包含
SET @@udf.properties = JSON '{"enableDebugOutput": true}';。 - 避免在日志中记录敏感数据:Cloud Logging 对拥有 Logging Viewer 权限的用户可见。请勿记录凭据或机密。
- 成本管理:在高吞吐量管道上,有选择性地记录日志(例如仅在出错时或通过采样),以管理日志摄取量。
快速上手
发布于
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏