| FILTER mới là nơi database bắt đầu có giá trị: đừng chỉ `SELECT *`

Được viết bởi thanhdt vào ngày 25/05/2026 lúc 23:07 | 8 lượt xem

Code bám theo: Phu dao 5.2_Crypto Day du lieu ve PostgreSQL (20 nam).ipynb

Notebook đang dừng ở bước đọc lại dữ liệu bằng SELECT *. Về mặt học thuật thì ổn. Nhưng về mặt hệ thống, giá trị thật của PostgreSQL chỉ xuất hiện khi bạn biết FILTER đúng chỗ.

Sau khi dữ liệu đã được chuẩn hóa thành các cột:
Symbol
Datetime
Open
High
Low
Close
Volume
Timeframe

thì bước tự nhiên tiếp theo không phải là cứ đọc cả bảng lên rồi mới xử lý bằng tay. Bước đúng hơn là:
lọc ngay từ database.

Ví dụ, thay vì:
python
query = f"SELECT * FROM {schema}.trading_data_crypto"
data = pd.read_sql(query, con=engine)

ta nên nghĩ theo kiểu:
– chỉ lấy ETHUSDT
– chỉ lấy 1d
– chỉ lấy giai đoạn 2020-01-01 tới 2024-12-31

Ví dụ logic filter:
sql
SELECT *
FROM public.trading_data_crypto
WHERE Symbol = 'ETHUSDT'
AND Timeframe = '1d'
AND Datetime >= '2020-01-01'
AND Datetime < '2025-01-01'
ORDER BY Datetime;

Vì sao FILTER quan trọng về mặt kỹ thuật?

1. Giảm tải RAM cho Python
Nếu bảng ngày càng lớn, SELECT * sẽ kéo tất cả lên notebook. Database đáng ra phải làm phần lọc nặng trước, rồi Python mới xử lý phần còn lại.

2. Tăng tốc workflow phân tích
Thay vì load cả kho rồi mới lọc bằng pandas, bạn lấy đúng lát dữ liệu cần cho:
– chart
– backtest
– dashboard
– signal research

3. Giữ flow dữ liệu sạch hơn
Khi WHERE nằm trong query, logic “mình đang phân tích cái gì” được nói rất rõ:
– symbol nào
– timeframe nào
– khoảng thời gian nào

4. Dễ tách thành hàm dùng lại
Sau này bạn có thể viết:
get_data(symbol, timeframe, from_date, to_date)
và để lớp database làm việc lọc phía sau

Flow kỹ thuật tóm tắt

text
PostgreSQL table
-> WHERE Symbol / Timeframe / Datetime
-> dataset nhỏ hơn, đúng hơn
-> pd.read_sql()
-> chart / strategy / backtest

Insight kỹ thuật đáng nói

Database không có giá trị lớn chỉ vì “lưu được dữ liệu”. Giá trị thật nằm ở chỗ:
lọc được đúng phần dữ liệu cần dùng, đúng lúc, với chi phí thấp hơn việc kéo cả bảng lên Python.

Pitfall kỹ thuật

  • SELECT * ở giai đoạn học là ổn, nhưng giữ thói quen đó khi dataset lớn sẽ rất tốn tài nguyên
  • Nếu không filter theo Timeframe, cùng một symbol nhưng khác timeframe có thể bị trộn
  • Nếu không filter theo Datetime, chart/backtest rất dễ đọc thừa giai đoạn không liên quan
  • Nếu sau này thêm nhiều symbol mà không filter theo Symbol, dataset đọc lên sẽ mất kiểm soát rất nhanh

Góc nhìn trader thực chiến: khi bạn đã có PostgreSQL, bài toán không còn là “lưu dữ liệu được chưa”. Bài toán là “lấy đúng lát dữ liệu nào để phục vụ quyết định nhanh và chính xác hơn”. Đó chính là tư duy FILTER.

Comment FILTER nếu bạn muốn mình viết tiếp bộ query mẫu cho crypto theo Symbol + Timeframe + Datetime.

Bài viết chia sẻ góc nhìn kỹ thuật và vận hành dữ liệu, không phải khuyến nghị đầu tư.