Flat File là gì?
(evidence.dev)- Flat file là một định dạng rất phổ biến trong phân tích dữ liệu
- Hướng dẫn đầy đủ này giải thích flat file là gì, có những loại nào, nên chọn loại nào, cùng các use case, đặc điểm định dạng và so sánh với cơ sở dữ liệu non-flat file và DBMS quan hệ
Khó định nghĩa một cách chặt chẽ
- Flat file chủ yếu được dùng khi trích xuất dữ liệu từ cơ sở dữ liệu để xử lý
- Đây là dạng tệp văn bản đơn giản như CSV, trong đó mỗi hàng biểu thị một bản ghi và các trường được phân tách bằng dấu phẩy
- Tuy nhiên, định nghĩa của "Flat File" không thật sự rõ ràng, nhưng có những đặc điểm chung sau:
- Chỉ gồm văn bản: Chỉ lưu trữ văn bản và số, không phải dữ liệu nhị phân (Blob)
- Dạng bảng (tabular): Mỗi tệp tương ứng một bảng, gồm các bản ghi theo hàng
- Tính di động cao: Có thể dễ dàng xuất, chỉnh sửa và xử lý mà không cần phần mềm chuyên biệt
- Phi cấu trúc: Thông thường không có phân cấp hay quan hệ giữa các bản ghi
- Không nén: Mặc định không có cơ chế nén thông minh (dù DuckDB, Spark... có thể chấp nhận tệp zip)
- Không có chỉ mục: Không có chỉ mục tích hợp để tìm một bản ghi cụ thể
- Không tự mô tả: Thường không có metadata hay thông tin schema
- JSON và YAML nằm ngoài định nghĩa này vì chúng có thể chứa cấu trúc phân cấp và schema
- Việc có thể được dùng cho rất nhiều use case khác nhau cũng không thực sự giúp làm rõ khái niệm này
- CSV: Định dạng lưu trữ và trao đổi dữ liệu
- JSON: Trao đổi dữ liệu quy mô lớn, quản lý cấu hình, định dạng trả về của API
- YAML: Quản lý cấu hình và tệp định nghĩa pipeline
Các loại Flat File
- Có nhiều loại khác nhau tùy theo cách dữ liệu được tổ chức và lưu trữ
- Cách tổ chức trường và bản ghi
- Flat file phi cấu trúc: Cấu trúc một bảng duy nhất như CSV
- Flat file có cấu trúc: JSON, YAML, XML... có cấu trúc phân cấp
- Loại ký tự phân tách trường
- Mỗi hàng biểu thị một bản ghi và các trường được phân tách bằng delimiter
- Dùng dấu phẩy(
,), tab(\t), dấu gạch đứng(|)
- Định dạng chiều rộng cố định vs không cố định
- Định dạng chiều rộng cố định có các trường với độ dài nhất quán → tốc độ xử lý nhanh
- Định dạng không cố định linh hoạt hơn khi xử lý
- Bộ phân cách dữ liệu
- CSV có thể lưu tab và xuống dòng (thông qua escaping)
- TSV không thể lưu tab và xuống dòng
- Mức độ dễ đọc với con người
- Flat file thường có thể đọc được bằng mắt thường
- Trên một số nền tảng, tệp Excel cũng được xếp vào flat file
- Có bao gồm metadata hay không
- Các tệp như CSV không có metadata
- JSON có thể tự chứa metadata và schema
Use case của Flat File
- Lưu trữ và trao đổi
- Trao đổi dữ liệu: CSV, JSON hữu ích cho việc trao đổi dữ liệu giữa các nền tảng khác nhau
- Tích hợp dữ liệu trong ETL: Flat file thường được dùng làm dữ liệu nguồn và đích trong ETL
- Lưu trữ lưu trữ lâu dài và sao lưu: Flat file có lợi thế cho lưu trữ dài hạn vì dựa trên văn bản
- Sử dụng tiện ích
- Quản lý cấu hình: YAML, JSON, INI... được dùng cho biến môi trường, kết nối cơ sở dữ liệu...
- Định nghĩa data pipeline: JSON, YAML... được dùng để định nghĩa cấu trúc pipeline
- Metadata cho dataset: JSON có thể định nghĩa việc chuyển đổi và kiểm tra tính hợp lệ của CSV
Ví dụ về Flat File
CSV (Comma-Separated Values)
- Phần mở rộng:
.csv - Ký tự phân tách: dấu phẩy
, - Cấu trúc: phẳng (Flat)
- Dễ đọc với con người
- Ví dụ:
name, country, age Alice, USA, 22 Bob, Canada, 34 Charlie, UK, 28 - Tiêu chí chọn dùng:
- Phù hợp với dữ liệu có cấu trúc dạng bảng
- Hữu ích khi xuất ra hệ thống BI, Excel/Google Sheets
- Khi nên tránh:
- Không phù hợp nếu cần cấu trúc phân cấp phức tạp
- Có thể phát sinh vấn đề khi xử lý dữ liệu chứa dấu phẩy
TSV (Tab-Separated Values)
- Phần mở rộng:
.tsv - Ký tự phân tách: tab
\t - Cấu trúc: phẳng (Flat)
- Dễ đọc với con người
- Ví dụ:
name country age Alice USA 22 Bob Canada 34 Charlie UK 28 - Tiêu chí chọn dùng:
- Hữu ích khi cần xử lý dữ liệu có chứa dấu phẩy
- Có thể xử lý dễ dàng bằng công cụ CLI trên Unix
- Khi nên tránh:
- Gặp vấn đề nếu dữ liệu chứa tab
JSON (JavaScript Object Notation)
- Phần mở rộng:
.json - Cấu trúc: phân cấp
- Dễ đọc với con người
- Ví dụ:
[ {"name": "Alice", "country": "USA", "age": 22}, {"name": "Bob", "country": "Canada", "age": 34}, {"name": "Charlie", "country": "UK", "age": 28} ] - Tiêu chí chọn dùng:
- Phù hợp khi cần cấu trúc dữ liệu phân cấp
- Khi nên tránh:
- Không phù hợp nếu ưu tiên tốc độ xử lý
YAML (YAML Ain’t Markup Language)
- Phần mở rộng:
.yaml - Cấu trúc: phân cấp
- Dễ đọc với con người
- Ví dụ:
name: Alice country: USA age: 22 - Tiêu chí chọn dùng:
- Phù hợp khi cần tệp cấu hình dễ đọc với con người
- Khi nên tránh:
- Không phù hợp để lưu trữ dữ liệu quy mô lớn
Tệp ENV
- Phần mở rộng:
.env - Cấu trúc: phẳng (Flat)
- Dễ đọc với con người
- Ví dụ:
APP_NAME=MyApp ENVIRONMENT=production - Tiêu chí chọn dùng:
- Phù hợp khi cần tệp cấu hình cho triển khai và môi trường local
- Khi nên tránh:
- Không phù hợp để lưu trữ cấu trúc dữ liệu phức tạp
So sánh Flat File vs Non-Flat File vs DBMS
Flat file thường được so sánh với cơ sở dữ liệu quan hệ (RDBMS), và cũng tồn tại các định dạng trung gian như Avro, Parquet, ORC. Sau đây là so sánh các đặc tính chính của những định dạng này:
-
Cách tổ chức bản ghi
- CSV: Lưu trữ dữ liệu theo hàng (Row)
- JSON: Lưu trữ dựa trên cặp khóa-giá trị
- Parquet: Lưu trữ theo cột (Column)
- DBMS quan hệ: Lưu trữ theo hàng (Row)
-
Có phải định dạng con người đọc được hay không
- CSV và JSON: Dựa trên văn bản → dễ đọc với con người
- Parquet và DBMS: Dựa trên nhị phân → khó đọc với con người
-
Tính di động (Portability)
- CSV, JSON, Parquet: Tương thích tốt giữa các nền tảng
- DBMS: Chỉ dùng được trong phần mềm cụ thể
-
Hỗ trợ cấu trúc phân cấp
- CSV: Không có cấu trúc phân cấp
- JSON: Hỗ trợ cấu trúc phân cấp
- Parquet: Hỗ trợ cấu trúc lồng nhau
- DBMS: Hỗ trợ nhiều bảng và cấu trúc quan hệ
-
Khả năng mở rộng (Scalability)
- CSV, JSON: Khả năng mở rộng thấp
- Parquet, DBMS: Khả năng mở rộng cao
-
Có hỗ trợ chỉ mục hay không
- CSV, JSON: Không có chỉ mục
- Parquet: Có thể tìm kiếm nhanh nhờ metadata ở cấp tệp và cấp cột
- DBMS: Hỗ trợ chỉ mục
-
Có hỗ trợ schema hay không
- CSV: Không có schema
- JSON: Có thể bao gồm schema
- Parquet, DBMS: Áp dụng schema bắt buộc
- Parquet không dùng chỉ mục B-Tree hay hash. Thay vào đó, nó tăng tốc việc truy xuất dữ liệu thông qua metadata ở cấp tệp, nhóm hàng và cột
Chọn đúng định dạng Flat File
- CSV, TSV → dùng cho trao đổi và lưu trữ dữ liệu đơn giản, chẳng hạn khi lưu trữ lâu dài hoặc di chuyển dữ liệu giữa các nền tảng
- JSON → dùng khi cần định dạng tệp tự mô tả có cấu trúc phân cấp
- YAML → phù hợp cho cấu hình và thiết lập pipeline
- Parquet → nên cân nhắc khi cần kích thước tệp nhỏ, truy vấn nhanh và hỗ trợ kiểu dữ liệu phức tạp
Chưa có bình luận nào.