dbt run-operation命令及应用示例

news2024/9/23 17:14:45

DBT是数据分析和数据工程领域的佼佼者,完美地在数据领域引入软件工程理念,极大地提升了数据开发效率和质量。通过类SQL语法开发数据模型,在数据仓库中原始数据和可用数据(通常为数据集市)之间架起了桥梁,让数据开发人员以标准化分层方式轻松实现数仓数据转换和开发。

在dbt的命令库中,run-operation非常突出。它不仅仅能够调用宏,而且也能够自动化重复任务;灵活利用该命令调用宏可以确保数据完整性,自动化授权、清理过时数据、更新业务指标、生成每月财务报告等。

run-operation 语法说明

run-operation命令核心能力是作为桥梁执行宏函数,并支持给宏函数传递参数。语法如下:

$ dbt run-operation {macro} --args '{args}'
  • {macro}: 这是要执行宏的名字,名称应该清晰描述它的业务功能。
  • args: 提供要执行宏函数的参数列表,将被映射至宏函数定义的形式参数,参数应该是YAML字符串。如:{my_variable: my_value} 。YAML格式是一种可读性强的数据序列化格式。

dbt run-operation命令能够从命令行直接执行宏。这对于需要在模型运行的上下文之外执行的任务特别有用,例如加载seed数据、更新配置信息或执行自定义SQL操作。dbt run-operation的灵活性在于它能够与SQL和Python环境进行交互,使其成为处理复杂数据流的重要工具。

  • 为什么使用dbt run-operation?

    自动化: 把重复任务封装为宏函数,使用该命令自动化调度执行宏函数。

    灵活性: 使用Python和Jinja扩展SQL的功能,支持生成或执行动态查询。

    高效率: 在单个命令中执行复杂的操作,减少必要的人为手动干预。

run-operation实战示例

下面的有些示例假设你已经创建了宏函数,并且正在使用run-operation从命令行手动执行它们,或者通过预定的操作执行它们。

示例1: 自动化授权操作

业务场景: 想象数据部门有新员工加入。与其手动授予权限,不如使用此宏自动执行该过程。

执行命令:

$ dbt run-operation grant_select --args '{role: reporter}'

示例2: 清理模型历史数据

业务场景:随着数据的积累,模型历史数据可能会使数据仓库变得低效。定期清理它们可以优化性能、降低存储成本。

执行命令:

$ dbt run-operation clean_stale_models --args '{days: 7, dry_run: True}'

示例3:更新销售指标

业务场景: 每月销售复盘会议在企业中很常见。因此,需要自动化收集数据,确保报告及时准确。

执行命令:

$ dbt run-operation update_sales_metrics --args '{month: "July", year: 2024}'

示例4:归档历史数据

业务场景: 有为了遵从《通用数据保护条例》类法规条例,强制需要符合某些数据处理规范。下面示例执行命令,让历史客户数据保留时间不超过规定时间。

执行命令:

$ dbt run-operation archive_old_customers --args '{inactive_days: 365}'

示例5:

业务场景: 财务审查是落实业务战略的关键环节。为特定部门生成量身定制的财务报告,能够助力管理者对业务进行优化,并为决策提供有力支持。

执行命令:

$ dbt run-operation generate_financial_report --args '{month: "August", year: 2023, department: "Sales"}'

示例6:执行简单SQL

下面宏实现从数据库中生成表名列表,且没有参数:

{% macro list_tables() %}
    select table_name
    from information_schema.tables
    where table_schema = 'public'
{% endmacro %}

运行命令:

dbt run-operation list_tables

这将执行宏中定义的SQL查询并返回表名列表。

示例7:生成动态查询

Jinja是与dbt集成的模板引擎,它支持给SQL查询添加业务逻辑。下面是使用Jinja根据前缀动态过滤表的例子:

{% macro list_filtered_tables(prefix) %}
    select table_name
    from information_schema.tables
    where table_schema = 'public'
    and table_name like '{{ prefix }}%'
{% endmacro %}

传入参数,运行命令:

dbt run-operation list_filtered_tables --args '{"prefix": "sales_"}'

这将列出public schema中以“sales_”开头的所有表。

最佳实践

注意事项

  • 验证检查: 在执行之前验证宏和参数,理解宏函数的执行结果、宏参数及其意义。
  • 提供文档: 宏定义提供相应文档描述,更容易使用,并降低调用者出错的可能性。
  • 定期更新: 随着业务的发展数据需求也会随之变化,定期检查和更新宏业务实现。

常见问题

  • YAML格式: 常见错误包括缺少空格或不正确的缩进。可使用在线YAML验证工具获得帮助。
  • 宏错误: 确保在dbt项目中正确定义了宏,并且已得到测试与验证。
  • 参数问题: 缺少或格式不正确的参数可能导致失败,始终参考宏的文档。

总结

dbt run-operation命令是一个强大的工具,可以为dbt工作流增加灵活性和效率。使用宏可以自动执行复杂的任务、生成动态SQL查询,所有这些都可以从命令行完成。无论你是优化数据转换过程还是确保数据质量,掌握dbt run-operation都将让你在数据工程领域脱颖而出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】yum、vim、gcc使用(超详细)

目录 yum 安装软件 卸载软件 查看安装包 安装一下好玩的命令 vim vim基本操作 模式切换 命令集 vim批量注释 vim配置 gcc 函数库 小知识点: Linux中常见的软件安装方式 --------- 下载&&安装 a、yum/apt b、rpm安装包安装 c、源码安装 y…

SDK(1.1note)

什么是SDK 控制台程序(Console User interface)CUI 对于控制台程序,通用,也就是平台无关 图形界面系统 可是如果你想要播放一个音乐,C语言有嘛? 所以需要平台开发,不可以移植性 平台会提供…

摒弃“流量思维”,以精准流量驱动企业发展——基于开源 AI 智能名片、链动 2+1 模式及 O2O 商城小程序的思考

摘要:本文深入探讨在当前竞争激烈的营销环境下,摒弃“流量思维”的紧迫性与必要性。强调做内容营销不能仅仅局限于发文案,而应摆脱一味追求阅读量、推荐量和粉丝数的误区,聚焦于获取精准流量。结合开源 AI 智能名片、链动 21 模式…

如何解决npm下载Puppeteer卡死的问题

亲测有效 export PUPPETEER_DOWNLOAD_BASE_URLhttps://cdn.npmmirror.com/binaries/chrome-for-testingnpm install https://github.com/cnpm/binary-mirror-config/pull/47https://github.com/cnpm/binary-mirror-config/pull/47 PS: 最开始看了下面这两个链接&#xff0c…

网络安全-长亭雷池的sql绕过

一、环境 雷池官网docker安装我的版本是 看官网介绍主要防御top10 二、讲解 我这里只描述通用型绕过,对于事件型不多描述,因为通用型的绕过是通杀的,差异化绕过 正常来说我们是因为没有一个很好的过滤所以造成第11关靶场的绕过 但是现在有了…

Stable Diffusion进阶篇:模型训练(附秋叶模型训练器)

前言 今天就来学习下Stable Diffusion关于微调训练方面的知识点。 今天没多少废话,因为我下午要去玩PTCG!让我们冲冲冲 整理和输出教程属实不易,觉得这篇教程对你有所帮助的话,可以点击👇二维码领取资料&#x1f618…

k8s介绍-搭建k8s

官网:https://kubernetes.io/ 应用部署方式演变 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用边界,很难合理地分配计…

Active Directory 实验室设置第二部分- 添加数据到AD域

在之前的文章中,我们已经讨论了AD森林的安装和AD基础知识。在这篇文章中,让我们开始使用 AD 对象(如用户对象、计算机对象、组对象、网络共享等)填充 AD 环境,以及计算机如何加入域。 #1、添加用户对象 可以使用GUI、…

什么是CPQ?一文讲解什么是CPQ选型配置报价系统

什么是CPQ选型配置报价? CPQ,是英文名 Configure Price Quote的缩写,中文称为配置报价软件。该软件经常出现在销售行业。它是一种可以快速为企业报价的销售工具。企业在报价时,会综合考虑数量、折扣、产品可选功能等。CPQ软件能够整合企业的…

Linux学习之路 -- 线程 -- 互斥

目录 1、概念引入 2、互斥锁 1、pthread_mutex_init && pthread_ mutex_destory 2、pthread_mutex_lock && pthread_mutex_unlock 3、互斥锁原理的简单介绍 1、概念引入 为了介绍线程的同步与互斥,我们以抢票逻辑引入相关的概念。 示例代码…

harmonyOS 原来构建还有这么多弯弯绕绕

随着用户需求的不断增长,我们的 APP 已发展成功能丰富的超级APP,这也导致打包构建变得非常耗时,可能需要数小时,严重影响开发效率和产品迭代。通过采用模块化设计、增量构建、并行处理、缓存机制、优化依赖管理,以及云…

SSM整合步骤

目录 一、Mybatis整合Spring 1、整合后的maven坐标 2、核心配置文件 3、pojo、mapper、service配置 4、单测 二、整合SpringMVC 1、引入springMVC的坐标并配置tomcat 2、核心配置文件 3、controller配置 4、启动项目并测试 SSM SpringMVC Spring Mybatis 整合顺序&#xff1…

Spring AOP - 注解方式实现

前文已经讨论了基于配置文件方式实现Spring AOP&#xff08;Spring AOP - 配置文件方式实现&#xff09;&#xff0c;本文采用注解的方式实现前文相同的功能。配置步骤如下&#xff1a; 1、项目增加aop依赖&#xff08;pom.xml) <dependency><groupId>org.springfr…

大数据:快速入门Scala+Flink

一、什么是Scala Scala 是一种多范式编程语言&#xff0c;它结合了面向对象编程和函数式编程的特性。Scala 这个名字是“可扩展语言”&#xff08;Scalable Language&#xff09;的缩写&#xff0c;意味着它被设计为能够适应不同规模的项目&#xff0c;从小型脚本到大型分布式…

vue2 中使用 Tinymce 富文本编辑器详解

vue2.x使用Tinymce富文本 项目中Tinymce效果图安装依赖包/创建依赖文件创建skins文件夹汉化文件-zh_CN.js 封装组件Tinymce.vue组件中使用封装组件tinymce.vueTinymce 扩展插件集合 项目中Tinymce效果图 如果想先了解一下&#xff0c;可以浏览一博主整理的的TinyMCE中文文档&am…

【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】

目录 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】 1. 信息传递的奇迹:电化学信号的奥秘 2. 非线性动态交互:大脑的智慧之源 3. 结构与功能的鸿沟:从并行分布到有限层次 结语:探索未知的边界 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】…

【深度学习】【TensorRT】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转engineWindows平台搭…

[C#]winform 使用opencvsharp实现玉米粒计数

【算法介绍】 这段代码是使用OpenCvSharp库&#xff08;OpenCV的C#封装&#xff09;对图像进行处理&#xff0c;主要流程包括图像的二值化、腐蚀操作、距离变换、轮廓检测&#xff0c;并在原图上标出检测到的轮廓位置及数量。下面是对代码的详细解读&#xff1a; 初始化&…

网络通信——路由器、交换机、集线器(HUB)

注意&#xff1a;传输层&#xff0c;应用层没有网路设备 一.路由器&#xff08;网络层设备&#xff09; 1.分割广播域 2.一个接口就是一个广播域 3.一般接口位4&#xff0c;8&#xff0c;12。 4.数据转发 &#xff08;由路由表转发数据&#xff09; 5.根据路由表来进行路径选…

基于微信小程序的美食外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…