ReOrc docs
Get ReOrc
简体中文
简体中文
  • 欢迎使用 Reorc
  • 设置与部署
    • 设置组织
    • 安装 Reorc-agent
  • 快速开始
    • 1. 添加连接源
    • 2. 创建项目
    • 3. 创建数据模型
    • 4. 验证数据处理流程
    • 5. 创建数据管道和调度任务
  • 连接
    • 目标数据库
    • 项目连接管理
  • 数据建模
    • 概述
    • 数据源
    • 模型
      • 宏
      • 物化
      • 模型配置
    • 字段列表
    • 数据血缘
    • 数据库特定配置
      • SelectDB(Doris)
  • 语义层建模
    • 概述
    • 语义层模型 (Cube)
      • 自定义维度
      • 自定义指标
        • 聚合计算函数
    • 语义层视图 (View)
    • 模型关系 (Relationship)
    • BI 接入方式
  • 数据摄入
    • 概述
    • 连接源类型
      • 从数据库获取数据
      • MySQL
      • SelectDB(Doris)
    • 数据转换(Transform)
  • 数据管道
    • 概述
    • 建模管道
    • 任务调度
  • 进阶用法
    • Jinja 模板
    • 变量
      • 系统内置变量
      • 项目内自定义变量
  • 健康监测
    • 数据管道健康
  • 资产管理
    • 元数据
    • 版本历史
    • dbt 包和项目依赖
  • 数据服务
    • 概述
    • 创建和编辑
    • 数据预览和下载
    • 权限管理
    • 开放 API
  • 数据安全
    • 数据脱敏
  • 设置
    • 组织设置
    • 项目设置
    • 个人设置
    • 角色和权限设置
Powered by GitBook
On this page
  1. 进阶用法

Jinja 模板

Previous任务调度Next变量

Last updated 3 months ago

Jinja 是一个高效、功能强大的模板引擎,广泛用于生成动态内容。它允许在多种基于文本的格式(如 HTML、XML、CSV 或 LaTex)中嵌入编程逻辑。了解更多信息,请参阅: 。

在现代数据工程中,Jinja 因为能够在 SQL 转换中支持变量、逻辑和重用性,已经成为一种流行的选择。

Recurve 支持在 SQL 模型中直接使用 Jinja。

Jinja 语法

Jinja 的语法与 Python 类似,代码通常位于特定的分隔符标签内,主要包括以下几种:

  • 表达式{{ ... }}: 用于输出字符串、引用变量和调用宏。

  • 语句{% ... %}:用于控制流(如 for 循环和 if 语句),也用于定义宏。

  • 注释{# ... #}:注释内容,编译时会被忽略。

以下是一些在 Recurve SQL 模型中使用 Jinja 的示例。

设置变量

Recurve 支持创建全局变量,这些变量可以在多个模型和数据管道中重复使用。详情请查阅文档:变量

在 Jinja 中,您可以按照以下方式定义局部变量:

-- min_rental_duration = 3, defined in the Variables section

SELECT film_id, title, rental_duration
FROM film
WHERE rental_duration >= {{ var('min_rental_duration') }}
SELECT film_id, title, rental_duration
FROM film
WHERE rental_duration >= 3

if 语句

用 if 语句来检查条件:

{% set include_r_rated = true %}

SELECT film_id, title, rating
FROM film
WHERE 1=1 
{% if include_r_rated %}
  AND rating = 'R'
{% else %}
  AND rating != 'R'
{% endif %}
SELECT film_id, title, rating
FROM film
WHERE 1=1

  AND rating = 'R'

for 循环

用 for 循环来遍历一个列表或字典:

{% set categories = ['Action', 'Comedy', 'Drama'] %}

SELECT f.film_id, f.title, c.name AS category
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
WHERE c.name IN (
  {% for category in categories %}
    '{{ category }}'{% if not loop.last %},{% endif %}
  {% endfor %}
)

SELECT f.film_id, f.title, c.name AS category
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
WHERE c.name IN ( 
    'Action',
    'Comedy',
    'Drama'
)

Jinja 文档