Trino SQL Bài học 6: Cú pháp SELECT cơ bản và lọc dữ liệu với WHERE
Mục tiêu bài học:
-
Nắm vững cú pháp truy vấn định hình dữ liệu nền tảng.
-
Nhận diện sự khác biệt về tính nghiêm ngặt trong kiểu dữ liệu và định dạng chuỗi của Trino so với các hệ quản trị cơ sở dữ liệu phổ biến.
-
Thực hành trích xuất và lọc dữ liệu sử dụng tập dữ liệu mẫu TPC-H.
1. Mệnh đề SELECT: Định hình luồng dữ liệu đầu ra
Mệnh đề SELECT xác định chính xác những cột dữ liệu nào sẽ được trả về từ kho lưu trữ lên bộ nhớ xử lý của Trino.
Truy xuất toàn bộ cột (*): Cách nhanh nhất để khảo sát cấu trúc của một bảng là sử dụng dấu sao (*). Tuy nhiên, trong môi trường Big Data, thói quen này thường gây tốn băng thông mạng không cần thiết.
SQL
SELECT *
FROM tpch.tiny.customer;
Truy xuất các cột cụ thể: Chỉ định rõ tên cột giúp tối ưu hóa luồng I/O, đặc biệt khi Connectors áp dụng cơ chế đọc theo dạng cột (Columnar Storage) như ORC hay Parquet.
SQL
SELECT custkey, name, phone
FROM tpch.tiny.customer;
Sử dụng bí danh (Alias): Sử dụng từ khóa AS để định danh lại tên cột trong tập kết quả trả về, giúp dữ liệu đầu ra có ngữ nghĩa rõ ràng hơn đối với các công cụ BI hoặc hệ thống API downstream.
SQL
SELECT
custkey AS customer_id,
name AS customer_name,
acctbal AS account_balance
FROM tpch.tiny.customer;
2. Lọc dữ liệu bằng mệnh đề WHERE
Mệnh đề WHERE đóng vai trò rào chắn, lọc bỏ các bản ghi không thỏa mãn điều kiện logic trước khi chúng được đưa vào các bước xử lý phức tạp hơn (như JOIN hoặc GROUP BY).
Các toán tử so sánh cơ bản được hỗ trợ:
-
Bằng:
= -
Không bằng:
<>hoặc!= -
Lớn hơn / Nhỏ hơn:
>,<,>=,<=
Ví dụ: Tìm kiếm các đơn hàng có tổng giá trị vượt mức 150,000.
SQL
SELECT orderkey, orderstatus, totalprice
FROM tpch.tiny.orders
WHERE totalprice > 150000;
Trino engine sẽ phân tích câu lệnh này và tối ưu bằng kỹ thuật Predicate Pushdown – đẩy điều kiện totalprice > 150000 xuống trực tiếp cho Connector thực thi ở tầng hệ thống lưu trữ (nếu Connector hỗ trợ), giúp giảm tải dữ liệu thô phải truyền qua mạng.
3. Các quy tắc "thép" của Trino (ANSI SQL)
Khi chuyển từ môi trường linh hoạt như MySQL sang hệ thống phân tán như Trino, các kỹ sư thường gặp lỗi cú pháp do Trino tuân thủ cực kỳ khắt khe chuẩn ANSI SQL.
A. Phân biệt Dấu nháy đơn và Dấu nháy kép
Đây là nguyên nhân gây lỗi phổ biến nhất ở những người mới sử dụng Trino:
-
Dấu nháy đơn (
') bắt buộc dùng cho các giá trị chuỗi (String Literals). -
Dấu nháy kép (
") dùng để bao bọc các định danh (Identifiers) như tên cột hoặc tên bảng chứa khoảng trắng hoặc ký tự đặc biệt.
Cú pháp đúng:
SQL
SELECT *
FROM tpch.tiny.customer
WHERE mktsegment = 'AUTOMOBILE'; -- Chuỗi nằm trong nháy đơn
Cú pháp SAI (Trino sẽ báo lỗi cột "AUTOMOBILE" không tồn tại):
SQL
SELECT *
FROM tpch.tiny.customer
WHERE mktsegment = "AUTOMOBILE";
B. Kiểu dữ liệu tĩnh (Strongly Typed)
Trino không tự động ép kiểu (Implicit Cast) linh hoạt như các RDBMS thông thường. Nếu một cột được định nghĩa là số nguyên (Integer), bạn không thể so sánh nó trực tiếp với một chuỗi (String).
Cú pháp SAI (Trino từ chối so sánh bigint với varchar):
SQL
SELECT * FROM tpch.tiny.customer WHERE custkey = '15';
Cú pháp ĐÚNG:
SQL
SELECT * FROM tpch.tiny.customer WHERE custkey = 15;
Sự khắt khe này là cần thiết trong môi trường phân tán để đảm bảo tính an toàn dữ liệu và tối ưu hóa bộ nhớ cấp phát khi thực thi kế hoạch truy vấn qua hàng trăm Worker node.
All rights reserved