0

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí