Lakehouse 基础数据过滤与排序指南

概述

数据查询是数据分析的第一步。云器 Lakehouse 提供完整的 SQL 过滤与排序能力,支持从简单条件过滤到复杂表达式组合。本指南按常见业务场景分类,帮助你快速掌握高效的数据探索方法。

涉及的 SQL 命令

命令/子句用途适用场景
SELECT
SELECT
指定返回的列列裁剪,减少数据传输
SELECT * EXCEPT(...)
SELECT * EXCEPT(...)
排除指定列快速排除敏感字段
WHERE
WHERE
行级过滤按条件筛选数据
ORDER BY
ORDER BY
结果排序按单列或多列排序
LIMIT
LIMIT
限制返回行数数据探索、分页查询

前置准备

以下示例使用模拟的员工表

employees
employees

-- 创建测试表 CREATE TABLE IF NOT EXISTS employees ( emp_id INT, emp_name STRING, dept STRING, salary DOUBLE, hire_date DATE ); -- 插入测试数据 INSERT INTO employees VALUES (1, 'Alice', 'Engineering', 12000, '2020-03-15'), (2, 'Bob', 'Engineering', 9500, '2021-07-01'), (3, 'Carol', 'Marketing', 8500, '2019-11-20'), (4, 'David', 'Marketing', 7800, '2022-01-10'), (5, 'Eve', 'HR', 6000, '2023-05-05');


基础字段筛选

查询时明确指定需要的列,避免返回不必要的数据。这在列式存储中可以显著提升查询性能。

-- 只查询姓名和部门 SELECT emp_name, dept FROM employees;

结果说明

emp_namedept
AliceEngineering
BobEngineering
CarolMarketing
DavidMarketing
EveHR

条件过滤

使用

WHERE
WHERE
子句根据条件过滤数据。Lakehouse 支持丰富的比较运算符和逻辑运算符。

场景 1:数值范围过滤

-- 查询薪资大于 8000 的员工 SELECT emp_name, dept, salary FROM employees WHERE salary > 8000;

场景 2:多条件组合

-- 查询 Engineering 部门且薪资高于 10000 的员工 SELECT emp_name, dept, salary FROM employees WHERE dept = 'Engineering' AND salary > 10000;

场景 3:IN 与 BETWEEN

-- 查询 Marketing 或 HR 部门的员工 SELECT emp_name, dept FROM employees WHERE dept IN ('Marketing', 'HR'); -- 查询 2020 年到 2022 年入职的员工 SELECT emp_name, hire_date FROM employees WHERE hire_date BETWEEN '2020-01-01' AND '2022-12-31';

场景 4:模糊匹配

-- 查询姓名以 'A' 开头的员工 SELECT emp_name FROM employees WHERE emp_name LIKE 'A%';


结果排序

使用

ORDER BY
ORDER BY
对查询结果进行排序,支持升序(ASC,默认)和降序(DESC)。

-- 按薪资降序排列 SELECT emp_name, dept, salary FROM employees ORDER BY salary DESC; -- 多列排序:先按部门升序,再按薪资降序 SELECT emp_name, dept, salary FROM employees ORDER BY dept ASC, salary DESC;

结果说明(多列排序):

emp_namedeptsalary
AliceEngineering12000
BobEngineering9500
EveHR6000
CarolMarketing8500
DavidMarketing7800

限制返回行数

使用

LIMIT
LIMIT
控制返回的行数,常用于数据探索和分页查询。

-- 只查看前 3 条记录 SELECT emp_name, dept, salary FROM employees ORDER BY salary DESC LIMIT 3;

结果说明

emp_namedeptsalary
AliceEngineering12000
BobEngineering9500
CarolMarketing8500

排除指定列

使用

EXCEPT
EXCEPT
子句快速排除不需要的列,特别适合宽表查询。

-- 查询所有列,但排除 emp_id SELECT * EXCEPT(emp_id) FROM employees;

结果说明

emp_namedeptsalaryhire_date
AliceEngineering120002020-03-15
BobEngineering95002021-07-01
CarolMarketing85002019-11-20
DavidMarketing78002022-01-10
EveHR60002023-05-05

清理测试数据

完成查询验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS employees;


注意事项

  1. 列裁剪优化:明确指定
    SELECT
    SELECT
    列名,避免
    SELECT *
    SELECT *
    ,可显著减少 I/O 和网络传输。
  2. 分区裁剪:如果表已分区,在
    WHERE
    WHERE
    中直接使用分区字段过滤,可跳过无关分区。
  3. 排序性能
    ORDER BY
    ORDER BY
    会触发全局排序,大数据量时建议配合
    LIMIT
    LIMIT
    使用。
  4. NULL 值排序
    ORDER BY
    ORDER BY
    默认将
    NULL
    NULL
    值排在最后(升序)或最前(降序),可使用
    NULLS FIRST/LAST
    NULLS FIRST/LAST
    控制。

相关文档

联系我们
预约咨询
微信咨询
电话咨询