You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
在线开发
SQL 开发
复制全文
下载 pdf
SQL 开发

DataLeap New IDE 提供完整的 SQL 在线开发环境,支持多种计算引擎,适用于数据查询、ETL 加工和报表开发等场景。

创建 SQL 脚本

创建流程

  1. 在左侧文件树中右键点击目标目录。

  2. 选择新建 > SQL。

  3. 输入文件名(如 extract_orders)。

  4. 系统自动创建两个文件:

    • extract_orders.sql — SQL 代码文件
    • extract_orders.sql.metadata.yml — 元数据配置文件

双文件结构

sql/
├── extract_orders.sql              # SQL 代码文件
└── extract_orders.sql.metadata.yml # 元数据配置
  • 代码文件.sql):包含实际执行的 SQL 语句,可在任何编辑器中打开。
  • 元数据文件.metadata.yml):存储在线调试所需的引擎类型、计算队列和参数值。

元数据配置

# extract_orders.sql.metadata.yml
apiVersion: newide.studio.dataleap.volc/v1
kind: Script
spec:
  engineType: emr_serverless_spark
  engineQueue: default
  parameterValues:
    biz_date: "${date}"
    target_region: "cn-beijing"

字段

类型

必填

说明

apiVersion

String

固定为 newide.studio.dataleap.volc/v1

kind

String

固定为 Script

spec.engineType

String (Enum)

计算引擎类型

spec.engineQueue

String

计算队列名称

spec.parameterValues

Map

调试时使用的参数值(键值对)

说明

元数据文件仅用于在线调试。当 SQL 脚本被 Pipeline Activity 引用时,引擎和参数配置以 Activity 定义为准。

多语句脚本

一个 SQL 文件可包含多条语句,用分号分隔,按顺序执行:

-- 步骤 1:创建临时视图
CREATE OR REPLACE TEMP VIEW temp_orders AS
SELECT *
FROM ods.orders
WHERE dt = '${date}'
  AND order_id IS NOT NULL;

-- 步骤 2:数据清洗
CREATE OR REPLACE TEMP VIEW cleaned_orders AS
SELECT
    order_id,
    TRIM(customer_id) AS customer_id,
    CAST(total_amount AS DECIMAL(18,2)) AS total_amount,
    CASE
        WHEN status = 'COMP' THEN 'completed'
        WHEN status = 'SHIP' THEN 'shipped'
        ELSE status
    END AS status,
    current_timestamp() AS etl_time
FROM temp_orders;

-- 步骤 3:写入目标表(幂等写入)
INSERT OVERWRITE TABLE dwd.orders PARTITION (dt = '${date}')
SELECT * FROM cleaned_orders;

交互式执行

方式

操作

说明

全文执行

点击 「运行」 或 “Shift + Enter”

顺序执行文件中所有语句

选中执行

选中部分 SQL → 右键 「执行选中」

仅执行选中的语句

执行结果展示:

语句类型

结果展示

SELECT

表格形式展示数据(默认最多 1000 行),支持排序、筛选和导出。

DDL(CREATE / ALTER / DROP)

显示成功/失败状态。

DML(INSERT / UPDATE)

显示影响行数与执行耗时。

5.2.2 选择引擎与计算队列

支持的 SQL 引擎

DataLeap New IDE 支持多种 SQL 计算引擎,不同引擎适用于不同的业务场景:

引擎

engineType

SQL 方言

适用场景

Spark SQL

emr_serverless_spark

ANSI SQL + Hive 扩展

大规模批处理 ETL

计算队列

每个引擎通过 engineQueue 指定计算队列,队列决定了可用的计算资源配额:

spec:
  engineType: emr_serverless_spark
  engineQueue: default          # 使用默认队列
  • 不同队列具有不同的资源配额和优先级。
  • 生产任务和开发调试建议使用不同的队列,避免资源竞争。
  • 队列由平台管理员在项目设置中配置。

Pipeline Activity 中的引擎配置

在 Pipeline 中引用 SQL 脚本时,通过 Activity 配置指定引擎和队列:

activities:
  - name: extract_orders
    type: sql
    source: WORKSPACE
    path: /Workspace/Users/zhang3/sql/extract_orders.sql
    engineType: emr_serverless_spark
    engineQueue: default
    parameterValues:
      biz_date: "${date}"
      source_db: "{{project.parameters.source_database}}"

字段

类型

必填

说明

type

String

固定为 sql

source

String

文件来源(WORKSPACETOS

path

String

SQL 文件路径

说明

path字段支持引用项目参数(如 {{project.parameters.code_owner}}),但不支持引用 Pipeline 参数或变量。

engineType

String (Enum)

计算引擎类型

engineQueue

String

计算队列

parameterValues

Map

向 SQL 脚本传递的参数值

5.2.3 SQL 脚本参数引用

引用语法

SQL 代码中使用名称引用格式,通过 {{参数名}}引用参数。运行时系统按 Activity → Pipeline → Project 的优先级逐层查找参数值:

SELECT *
FROM {{source_database}}.orders
WHERE dt = '${date}'
  AND region = '{{target_region}}';

支持的引用类型:

引用类型

语法

说明

参数名称引用

{{param_name}}

按 Activity → Pipeline → Project 逐层查找。

系统预定义变量

${date}${hour}

运行时自动替换为当前业务日期/小时。

两种格式可以在同一 SQL 语句中混合使用:

INSERT OVERWRITE TABLE {{target_database}}.orders
PARTITION (dt = '${date}')
SELECT *
FROM {{source_database}}.raw_orders
WHERE dt = '${date}'
  AND update_time >= '{{start_time}}';

参数查找优先级

当同名参数在多个层级定义时,优先级从高到低:

优先级

来源

说明

1(最高)

Activity parameterValues

Pipeline YAML 中为该 Activity 传入的值。

2

Pipeline parameters

Pipeline 级别定义的参数默认值。

3(最低)

Project parameters

项目级别定义的参数。

注意

如果代码中引用的参数在所有层级均未定义,运行时将报错。

参数传值示例

Activity 通过 parameterValues向 SQL 脚本传入参数:

# Pipeline YAML
activities:
  - name: daily_etl
    type: sql
    source: WORKSPACE
    path: /Workspace/Users/zhang3/sql/daily_etl.sql
    engineType: emr_serverless_spark
    engineQueue: default
    parameterValues:
      source_db: "{{project.parameters.source_database}}"
      target_db: "{{project.parameters.target_database}}"
      biz_date: "${date}"
-- daily_etl.sql
-- 脚本中只使用名称引用,不关心值从哪来
INSERT OVERWRITE TABLE {{target_db}}.orders PARTITION (dt = '${date}')
SELECT *
FROM {{source_db}}.raw_orders
WHERE dt = '${date}';

这种设计实现了脚本与配置解耦

  • SQL 脚本只使用 {{参数名}} 引用所需的参数,不感知参数的最终来源。
  • Pipeline 配置通过 parameterValues 将项目参数、Pipeline 参数或硬编码值桥接到脚本的参数名上。
  • 同一 SQL 脚本可被多个 Pipeline 引用,传入不同的参数值。

注意

SQL 脚本代码中只能使用名称引用({{参数名}}),不支持精确引用(如 {{project.parameters.xxx}})。精确引用语法仅用于 Pipeline YAML 配置中。

SQL 开发最佳实践

实践

说明

分区过滤

所有查询必须包含分区条件(如 WHERE dt = '${date}'),避免全表扫描。

参数化日期

使用 ${date} 系统变量,禁止硬编码日期值。

幂等设计

使用 INSERT OVERWRITE 确保重跑安全,同一分区重复写入不会产生重复数据。

代码规范

SQL 关键字大写、缩进对齐、每个子句单独一行。

注释清晰

为复杂逻辑添加注释,说明业务含义和转换规则。

增量加载

通过 Watermark 或 update_time 字段实现增量抽取。

最近更新时间:2026.06.12 11:44:16
这个页面对您有帮助吗?
有用
有用
无用
无用