DataLeap New IDE 提供完整的 SQL 在线开发环境,支持多种计算引擎,适用于数据查询、ETL 加工和报表开发等场景。
在左侧文件树中右键点击目标目录。
选择新建 > SQL。
输入文件名(如 extract_orders)。
系统自动创建两个文件:
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"
字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| String | 是 | 固定为 |
| String | 是 | 固定为 |
| String (Enum) | 是 | 计算引擎类型 |
| String | 是 | 计算队列名称 |
| 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 → 右键 「执行选中」 | 仅执行选中的语句 |
执行结果展示:
语句类型 | 结果展示 |
|---|---|
| 表格形式展示数据(默认最多 1000 行),支持排序、筛选和导出。 |
DDL(CREATE / ALTER / DROP) | 显示成功/失败状态。 |
DML(INSERT / UPDATE) | 显示影响行数与执行耗时。 |
DataLeap New IDE 支持多种 SQL 计算引擎,不同引擎适用于不同的业务场景:
引擎 |
| SQL 方言 | 适用场景 |
|---|---|---|---|
Spark SQL |
| ANSI SQL + Hive 扩展 | 大规模批处理 ETL |
每个引擎通过 engineQueue 指定计算队列,队列决定了可用的计算资源配额:
spec: engineType: emr_serverless_spark engineQueue: default # 使用默认队列
在 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}}"
字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| String | 是 | 固定为 |
| String | 是 | 文件来源( |
| String | 是 | SQL 文件路径 说明
|
| String (Enum) | 是 | 计算引擎类型 |
| String | 是 | 计算队列 |
| Map | 否 | 向 SQL 脚本传递的参数值 |
SQL 代码中使用名称引用格式,通过 {{参数名}}引用参数。运行时系统按 Activity → Pipeline → Project 的优先级逐层查找参数值:
SELECT * FROM {{source_database}}.orders WHERE dt = '${date}' AND region = '{{target_region}}';
支持的引用类型:
引用类型 | 语法 | 说明 |
|---|---|---|
参数名称引用 |
| 按 Activity → Pipeline → Project 逐层查找。 |
系统预定义变量 |
| 运行时自动替换为当前业务日期/小时。 |
两种格式可以在同一 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 | Pipeline YAML 中为该 Activity 传入的值。 |
2 | Pipeline | 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}';
这种设计实现了脚本与配置解耦:
{{参数名}} 引用所需的参数,不感知参数的最终来源。parameterValues 将项目参数、Pipeline 参数或硬编码值桥接到脚本的参数名上。注意
SQL 脚本代码中只能使用名称引用({{参数名}}),不支持精确引用(如 {{project.parameters.xxx}})。精确引用语法仅用于 Pipeline YAML 配置中。
实践 | 说明 |
|---|---|
分区过滤 | 所有查询必须包含分区条件(如 |
参数化日期 | 使用 |
幂等设计 | 使用 |
代码规范 | SQL 关键字大写、缩进对齐、每个子句单独一行。 |
注释清晰 | 为复杂逻辑添加注释,说明业务含义和转换规则。 |
增量加载 | 通过 Watermark 或 |