SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南
在数据工程领域,构建和维护数据转换管道是一项复杂而关键的任务。SQLMesh 是一个强大的工具,可以帮助你简化这一过程。本文将带你快速了解如何使用 SQLMesh CLI 来构建和维护数据转换管道。本文的目标是在 30 分钟或更短的时间内,让你熟悉 SQLMesh 的大部分工作流程。我们将通过实际操作来展示如何使用 SQLMesh CLI 进行模型更改、测试和部署。
开发工作流
模型更改
首先,你需要在 SQL 和 Python 文件中直接对模型进行更改。这些文件通常会预先准备好。更改完成后,你需要在开发环境中计划这些更改。
sqlmesh plan dev
应用更改
在开发环境中应用更改时,只需在提示符下输入 y
即可。
审计更改
审计步骤会在应用更改到开发环境时自动执行,用于测试数据质量。
预览、应用和审计更改
你可以使用以下命令快速预览、应用和审计更改:
sqlmesh plan dev --auto-apply
示例输出
当你对 incremental_model
和 full_model
做出破坏性更改时,SQLMesh 会显示受影响的模型、将要进行的更改以及需要回填的模型。
> sqlmesh plan dev
数据差异对比
在将更改应用到生产环境之前,运行数据差异对比是一个好习惯。这可以验证更改是否按预期工作。
sqlmesh table_diff prod:dev sqlmesh_example.full_model --show-sample
示例输出
SQLMesh 会显示环境之间的模式差异、行数差异以及样本数据差异。
将更改应用到生产环境
在对更改充满信心后,可以将它们应用到生产环境。建议使用 CI/CD 进行自动化部署,但也可以手动应用更改。
sqlmesh plan prod
示例输出
SQLMesh 会显示受影响的模型、将要进行的更改,并更新虚拟层以反映更改。
增强的测试工作流
为了确保更改按预期工作,可以使用以下命令进行增强测试:
创建和审计外部模型
有时模型会从 SQLMesh 控制范围之外的表/视图中选择数据。SQLMesh 可以自动解析这些模型的完全限定名称并确定其完整模式和列数据类型。
sqlmesh create_external_models tcloud
自动生成单元测试
你可以为模型自动生成单元测试,以确保业务逻辑按预期工作。
sqlmesh create_test sqlmesh_example.full_model --query sqlmesh_example.incremental_model "select * from sqlmesh_example.incremental_model limit 5"
执行即席查询
你可以直接从 CLI 中运行实时查询,以验证更改的外观和感觉。
sqlmesh fetchdf "select * from sqlmesh_example__dev.full_model limit 5"
代码检查
启用代码检查可以在开发过程中自动运行,以捕获已知的 SQL 问题。
config.yaml
gateways:duckdb:connection:type: duckdbdatabase: db.dbmodel_defaults:dialect: duckdblinter:enabled: truerules:- ambiguousorinvalidcolumn- invalidselectstarexpansionwarn_rules:- noselectstar- nomissingaudits
调试工作流
如果需要验证更改是否按预期工作,可以使用以下命令进行调试:
渲染 SQL 更改
渲染模型以验证 SQL 是否符合预期。
sqlmesh render sqlmesh_example.incremental_model
在详细模式下应用计划更改
详细模式可以让你看到物理和虚拟层的详细操作。
sqlmesh plan dev -vv
查看日志
每次执行 SQLMesh 命令时,它都会在日志目录中创建一个日志文件。你可以使用以下命令轻松查看日志。
bat --theme='ansi' $(ls -t logs/ | head -n 1 | sed 's/^/logs\//')
生产调度
SQLMesh 可以按模型基础安排转换,并以适当的 DAG 顺序进行。这使得配置每个管道步骤的运行频率变得容易。
示例场景和模型 DAG
假设你有以下模型 DAG:
stg_transactions
(每小时运行)fct_transactions
(每天运行)
如果 stg_transactions
失败,fct_transactions
将被阻止运行,并处于挂起状态。一旦 stg_transactions
成功运行,fct_transactions
将从失败点重新运行。
结论
SQLMesh 是一个强大的工具,可以帮助你高效地构建和维护数据转换管道。通过本文的快速指南,你应该能够掌握 SQLMesh CLI 的基本用法,并开始在你的项目中应用它。