Notebook查询Iceberg表数据以及时间宏变量使用
Notebook支持连接Spark数据处理实例或分析与AI搜索实例,通过Spark或Doris查询Iceberg表。本文介绍两种查询方式的适用场景、完整操作步骤、时间条件写法和常见问题。
场景概览
Spark和Doris都可以查询Iceberg表,但使用的计算资源、SQL写法和适用场景不同。
表1 Spark与Doris查询方式对比
| 对比项 | Spark引擎 | Doris引擎 |
|---|---|---|
| 使用实例 | Spark类型的数据处理实例 | 分析与AI搜索实例(Doris) |
| 连接入口 | Notebook编辑器上方的待连接按钮 | Notebook编辑器上方的待连接按钮 |
| 表定位方式 | 使用数据目录.数据模式.数据表三段式完整表名 |
先切换数据目录(Catalog),再切换数据模式(Schema),最后查询表名 |
| 典型用途 | 大规模离线计算、多表关联、清洗转换、批处理 | 交互式SQL查询、快速预览和分析 |
| 资源特点 | 适合计算量较大或需要复杂处理的任务 | 适合低延迟、交互式查询 |
如果仅需快速查看数据或执行简单SQL,建议使用Doris;如果需要处理大量数据、执行复杂关联或继续进行Spark计算,建议使用Spark。
前提条件
使用任一方式查询前,请完成以下准备:
- 已在工作台项目中创建Notebook。
- 当前项目已绑定资源组。
- 使用Spark需创建Spark类型的数据处理实例;使用Doris还需创建分析与AI搜索实例。
- 目标计算实例已加入该资源组,且处于运行状态。
- 当前用户具有目标数据目录、数据模式和Iceberg表的查看元数据及读表权限。
- 已确认Iceberg表所属的数据目录名称、数据模式名称和数据表名称。
获取Iceberg表信息
查询前需要确认目标表的三层名称。
- 登录百度胜算控制台,在选中的工作空间操作列单击打开按钮,进入空间内。
- 在侧边导航选择元数据。在数据目录树中依次展开目标数据目录、数据模式和数据表。
- 单击目标Iceberg表,进入数据表详情页面。
-
切换至详情tab页,记录以下信息:
- 数据目录名称;
- 数据模式名称;
- 数据表名称。
- 按以下格式组合Spark查询所需的完整表名:
1<数据目录名称>.<数据模式名称>.<数据表名称>
例如,数据目录为iceberg_test、数据模式为default、数据表为test_table,完整表名为:
1iceberg_test.default.test_table
- 按以下格式组合Doris查询所需的完整表名:
1<`数据目录名称`>.<`数据模式名称`>.<`数据表名称`>
例如,数据目录为iceberg_test、数据模式为default、数据表为test_table,完整表名为:
1`iceberg_test`.`default`.`test_table`
使用时间宏
Notebook查询支持在SQL中使用平台时间宏生成业务逻辑时间。时间宏的基本格式如下:
1${logicTime(<时间格式>,<偏移量>)}
例如:
1${logicTime(yyyy-MM-dd HH:mm:ss,-1d)}
时间格式包括:
| 格式 | 释义 | 举例 |
|---|---|---|
| yyyy | 年 | 2019 |
| MM | 月 | 02 |
| dd | 日 | 18 |
| HH | 小时(24小时制) | 13,下午一点 |
| mm | 分钟 | 53 |
| ss | 秒 | 42 |
| SSS | 毫秒 | 629 |
偏移量包括:
| 格式 | 释义 | 举例 |
|---|---|---|
| y | 年 | 3y, -1y |
| M | 月 | 6M |
| d | 日 | -10d |
| h | 小时 | 1h |
| m | 分钟 | -5m |
| s | 秒 | 30s |
注意,偏移量必须带单位,负号代表当前时间往前的偏移。
本文后续的Spark和Doris查询示例会直接使用该时间宏,并通过logicTime字段展示宏替换后的时间。例如:
1SELECT '${logicTime(yyyy-MM-dd HH:mm:ss,-1d)}' as logicTime;
运行时,平台会将时间宏替换为对应的业务逻辑时间。您可以根据实际业务需求修改时间格式和偏移量。
说明:时间宏外层需要使用单引号,使替换后的时间按照字符串类型返回。如果要使用时间宏过滤DATE或TIMESTAMP字段,请根据字段类型进行日期或时间类型转换。
利用Spark引擎查询Iceberg表
步骤一:打开Notebook并连接Spark实例
- 在侧边导航选择工作台,进入目标项目和文件夹。
- 单击已有Notebook名称;如未创建Notebook,单击页面右上角创建>Notebook。
- 在Notebook编辑器上方单击待连接,在实例列表中选择Spark类型的数据处理实例。
- 等待连接完成。连接成功后,实例显示在编辑器上方。
说明:如果实例列表中没有目标Spark实例,请检查实例是否已加入项目绑定的资源组,以及当前用户是否具有使用权限。
步骤二:使用SQL和时间宏查询Iceberg表
- 在Notebook中将单元格类型选择为SQL。
- 输入查询SQL,将表名替换为实际的三段式完整表名。以下示例同时返回前一天的业务逻辑时间和Iceberg表数据:
1SELECT
2 '${logicTime(yyyy-MM-dd HH:mm:ss,-1d)}' as logicTime,
3 *
4FROM iceberg_test.default.test_table
5LIMIT 100;
其中,logicTime列展示时间宏替换后的前一天时间,LIMIT 100用于限制返回数据量。
- 运行单元格,在单元格下方查看查询结果。
- 确认结果中包含
logicTime列,并检查该列时间是否符合预期。
步骤三:验证Spark查询结果
查询完成后检查:
- 单元格是否执行成功。
- 返回字段是否与元数据中的字段一致。
- 返回行数是否符合
LIMIT和过滤条件。 - 动态脱敏、行权限和列权限是否按当前用户权限生效。
利用Doris引擎查询Iceberg表
步骤一:打开Notebook并连接Doris实例
- 在侧边导航选择工作台,进入目标项目和文件夹。
- 打开已有Notebook;如未创建,单击页面右上角创建>Notebook。
- 在Notebook编辑器上方单击待连接,在查询检索实例列表中选择目标分析与AI搜索实例。
- 等待实例连接成功。连接成功后,实例显示在编辑器上方。
说明:如果存在多个分析与AI搜索实例,请选择能够访问目标Iceberg数据目录的实例。
步骤二:使用SQL和时间宏查询Iceberg表
- 在Notebook中将单元格类型选择为SQL。
- 输入查询SQL,将表名替换为实际的三段式完整表名。以下示例同时返回前一天的业务逻辑时间和Iceberg表数据:
1SELECT
2 '${logicTime(yyyy-MM-dd HH:mm:ss,-1d)}' AS logicTime,
3 *
4FROM `iceberg_test`.`default`.`test_table`
5LIMIT 100;
其中,logicTime列展示时间宏替换后的前一天时间,LIMIT 100用于限制返回数据量。
- 运行单元格,在单元格下方查看查询结果。
- 确认结果中包含
logicTime列,并检查该列时间是否符合预期。
步骤三:验证Doris查询结果
查询完成后检查:
- SQL单元格是否执行成功。
- 当前数据目录、数据模式和表名是否正确。
- 返回字段和数据是否符合预期。
- 行权限、列权限和动态脱敏是否按当前用户权限生效。
评价此篇文章
