Đường ống Lakehouse
Các module phía ghi của src/engine/: ingest.rs, splitter.rs, formats/core/parquet.rs (bộ ghi lake + gold), partition.rs và memory.rs.
Nạp dữ liệu (br.lake.ingest)
Sao chép thư mục nguồn vào đích lake, giữ nguyên bố cục tương đối:
- Các định dạng theo dòng (
csv, tsv, psv, txt, json, jsonl, ndjson, msgpack, xlsx) được chuyển đổi sang Parquet khi bật chuẩn hóa, quaauto_normalize=Truehoặc biến môi trườngBR_INGEST_NORMALIZE=1. - Còn lại được sao chép nguyên byte.
Trả về (files_ingested, rows_ingested).
Chia tệp (br.lake.split_file)
split_file_native() stream một tệp và ghi các phần cố định số dòng:
n = br.lake.split_file("big.csv", max_rows_per_file=100_000,
output_dir="./parts", format="parquet") # → số phần đã ghi
Định dạng đầu ra là mọi extension ghi được (ví dụ parquet, csv). Các phần đặt tên <stem>_part_NNN.<format>.
Ghi lake Sạch/Rác (br.lake.process_and_write_lake)
Đọc song song mọi tệp Parquet dưới input_dir (tuỳ chọn thu hẹp bằng partition_filter kiểu Hive), áp ngưỡng chất lượng tĩnh cho từng batch, rồi ghi hai cây Parquet phản chiếu bố cục tương đối của input:
sequenceDiagram
autonumber
participant IN as input_dir (tệp Parquet)
participant FL as bộ lọc ngưỡng tĩnh
participant CL as clean_output_dir/
participant TR as trash_output_dir/
IN->>FL: từng RecordBatch (Rayon song song)
FL->>CL: dòng đạt ngưỡng (Parquet ZSTD)
FL->>TR: dòng vi phạm + audit_error_code
FL-->>IN: (total_files, total_rows, clean_rows, trash_rows)
Trả về (total_files, total_rows, clean_rows, trash_rows). Tệp Trash mang cột audit_error_code giống lọc động. Toàn bộ phần ghi nén ZSTD; kích thước batch tự điều chỉnh theo số tệp chạy đồng thời.
Bảng Gold (br.lake.generate_gold_table)
Đọc lại thư mục clean Parquet và xuất bản lại thành bảng có phiên bản:
- Đường dẫn đầu ra phản chiếu cấu trúc tương đối của
clean/dướigold/(nén ZSTD). - Ghi
_gold_metadata.jsoncạnh dữ liệu: tên bảng, phiên bản, epoch tạo, tổng tệp/dòng. - Trả về
(total_files_read, gold_rows_written, manifest_path).
Ngân sách bộ nhớ & Runtime
Mọi luồng đọc/ghi streaming dùng chung một ngân sách từ src/engine/memory.rs:
| Cơ chế | Giá trị |
|---|---|
| Trần số dòng mỗi luồng | BUDGET_BATCH_ROWS = 1 << 20 |
| Mở rộng song song | mỗi luồng trong N luồng nhận budget_batch_rows(N) dòng |
| Trần RAM tổng | biến môi trường BASALTIC_RED_MAX_RAM_GB, mặc định 2 GB |
| Hệ số an toàn | ×3.5 cho buffer tạm mask/clean/trash |
Hai runtime cấp tiến trình được tạo lười: runtime tokio đa luồng (global_runtime(), dùng cho luồng DataFusion) và pool Rayon có kích thước (global_rayon_pool(threads)). Về mặt nội bộ, budget_batch_rows(parallel_streams) tự động tính toán kích thước buffer cho từng stream nhằm luôn bám sát tổng ngân sách bộ nhớ quy định.