Parquet là gì? Lưu trữ cột, sơ đồ và các trường hợp sử dụng

Parquet là gì? Lưu trữ cột, sơ đồ và các trường hợp sử dụng

API Scraping không scrap trả về dữ liệu web có cấu trúc dưới dạng JSON hoặc CSV mà các đường ống phân tích có thể xác thực và chuyển đổi thành Apache Parquet cho các truy vấn theo cột lặp lại.

TL;DR

  • Apache Parquet là một định dạng tệp theo cột. Các giá trị từ cùng một cột được lưu trữ cùng nhau trong một cấu trúc nhị phân được thiết kế cho việc đọc phân tích.
  • Parquet mang theo một sơ đồ và thống kê. Các trình đọc có thể hiểu các kiểu vật lý và logic và có thể bỏ qua các cột, nhóm hàng hoặc trang không liên quan.
  • Lưu trữ theo cột cải thiện khả năng nén. Các giá trị lân cận tương tự thường mã hóa hiệu quả, giảm lưu trữ và I/O cho các khối lượng công việc nặng về quét.
  • Parquet là một định dạng tệp, không phải là một hệ thống quản lý bảng hoàn chỉnh. Giao dịch, ảnh chụp nhanh, siêu dữ liệu phân vùng và sự phát triển đa tệp yêu cầu một danh mục, quy ước hoặc một lớp bảng.
  • Parquet phù hợp với phân tích ghi một lần, đọc nhiều lần. Nó kém thuận tiện hơn cho việc chỉnh sửa thủ công, cập nhật bản ghi đơn, tệp nhỏ hoặc tra cứu điểm độ trễ thấp.

Apache Parquet là gì?

Apache Parquet là một định dạng tệp dữ liệu theo cột mã nguồn mở, cho phép lưu trữ và truy xuất hiệu quả. Thay vì viết mọi trường của một bản ghi cùng nhau, Parquet tổ chức các giá trị theo cột trong các nhóm hàng có giới hạn. Các động cơ phân tích chỉ có thể đọc các cột cần thiết cho một truy vấn thay vì quét mọi trường trong mọi bản ghi.

Tài liệu Apache Parquet tài liệu liên kết đến thông số định dạng, khái niệm, chi tiết định dạng tệp và tài nguyên triển khai. Định dạng này được hỗ trợ trên các động cơ và ngôn ngữ xử lý dữ liệu, làm cho nó trở thành ranh giới lưu trữ chung cho hồ chứa dữ liệu, kho dữ liệu, đường ống tính năng và tập dữ liệu phân tích lưu trữ.

Parquet là nhị phân. Nó không được thiết kế để mở và chỉnh sửa trong một trình soạn thảo văn bản. Một thư viện đọc sử dụng siêu dữ liệu lưu trữ trong tệp để xác định vị trí các chunk cột, giải mã các trang, áp dụng codec nén và tái tạo các hàng hoặc vectơ cột.

Tại sao lưu trữ theo cột lại quan trọng

Hãy xem xét một tập dữ liệu với ID khách hàng, quốc gia, loại, mô tả, giá và thời gian sự kiện. Một truy vấn tính toán giá trung bình theo quốc gia chỉ cần ba cột. Trong một tệp văn bản theo hàng, động cơ vẫn đọc qua mô tả và các trường không sử dụng khác. Trong Parquet, động cơ có thể chọn các chunk cột cần thiết.

Các giá trị cột cũng có xu hướng giống nhau với hàng xóm của chúng. Một cột quốc gia có thể lặp lại một tập hợp mã nhỏ, một cột boolean có độ không cao rất thấp, và các dấu thời gian đã sắp xếp có thể có các deltas nhỏ. Việc mã hóa và nén có thể tận dụng những mẫu đó hiệu quả hơn so với một cấu trúc nơi các loại trường không liên quan thay đổi nhau qua mỗi hàng.

Lưu trữ theo cột không làm cho mọi thao tác nhanh hơn. Tái tạo một bản ghi cá nhân hoàn chỉnh có thể chạm đến nhiều chunk cột. Cập nhật một bản ghi thường có nghĩa là viết lại dữ liệu tệp thay vì thay đổi một dòng ở chỗ. Parquet ưa chuộng quét, tổng hợp, lọc và các phép chiếu chọn lọc hơn là cập nhật hàng giao dịch.

Cách một tệp Parquet được tổ chức

Một tệp Parquet chứa siêu dữ liệu và dữ liệu đã mã hóa được tổ chức thông qua một vài lớp:

  • Siêu dữ liệu tệp. Chân trang ghi lại sơ đồ, nhóm hàng, vị trí cột, mã hóa, thông tin nén và siêu dữ liệu khóa-giá trị tùy chọn.
  • Nhóm hàng. Một nhóm hàng là một phân vùng ngang của các hàng. Mỗi cột trong phạm vi hàng đó được lưu trữ dưới dạng một chunk cột.
  • Các chunk cột. Một chunk chứa các giá trị cho một cột trong một nhóm hàng và được chia thành các trang.
  • Các trang. Các trang là đơn vị nơi mã hóa, nén và một số thống kê được áp dụng và đọc.
  • Chân trang. Siêu dữ liệu ở cuối tệp cho phép một trình đọc khám phá cấu trúc trước khi chọn các khoảng dữ liệu nào để truy xuất.

Các cấu trúc và mã hóa chi tiết nằm trong kho lưu trữ thông số định dạng Apache Parquet. Các triển khai có thể hỗ trợ các tập hợp con khác nhau hoặc các tính năng tùy chọn, vì vậy một đường ống nên thử nghiệm tính tương thích giữa các trình viết và trình đọc của nó.

Các loại Vật lý và Logic

Parquet định nghĩa các loại vật lý kiểm soát lưu trữ cấp thấp, bao gồm số nguyên, giá trị số thực, mảng byte và mảng byte có độ dài cố định. Các chú thích loại logic thêm ý nghĩa miền như chuỗi, thập phân, ngày, giờ, dấu thời gian, UUID, danh sách, bản đồ và độ rộng số nguyên.

Một giá trị thập phân minh họa tại sao sự phân biệt lại quan trọng. Các byte vật lý của nó có thể được lưu trữ dưới dạng một số nguyên hoặc mảng byte, trong khi chú thích logic cung cấp độ chính xác và quy mô. Các trình đọc cần cả hai lớp để tái tạo giá trị mong muốn một cách chính xác.

Thiết kế sơ đồ nên bảo tồn ngữ nghĩa kinh doanh. Dấu thời gian cần một diễn giải vùng thời gian được tài liệu hóa. Độ chính xác thập phân phải bao trùm các giá trị mong đợi. Các định danh trông có vẻ số có thể thuộc về loại chuỗi. Một trình viết không nên suy luận ra một loại hẹp từ một mẫu nhỏ nếu các tệp sau này có thể chứa các giá trị lớn hơn.

Dữ liệu lồng ghép trong Parquet

Parquet có thể đại diện cho các bản ghi lồng ghép, danh sách và bản đồ thay vì ép buộc mọi tập dữ liệu thành một bảng phẳng. Nó sử dụng định nghĩa và mức độ lặp lại để mã hóa liệu các trường lồng ghép có tồn tại hay không và vị trí của các giá trị lặp lại trong cấu trúc tái tạo.

Khả năng này làm cho Parquet trở thành điểm đến tự nhiên cho các bản ghi JSON đã xác thực chứa mảng hoặc đối tượng con. Việc chuyển đổi vẫn cần một sơ đồ ổn định. Nếu một bản ghi lưu trữ một trường dưới dạng chuỗi và bản ghi khác lưu trữ một đối tượng cùng tên, trình viết phải giải quyết sự xung đột đó trước khi tạo ra một tập dữ liệu đáng tin cậy.

Các cột lồng ghép có thể giảm thiểu dữ liệu cha lặp lại so với việc làm phẳng mọi con cái thành một hàng. Chúng cũng có thể làm phức tạp các truy vấn và khả năng tương tác khi các động cơ thể hiện cấu trúc lồng ghép khác nhau. Kiểm tra danh sách và hình dạng bản đồ chính xác được sử dụng bởi đường ống.

Parquet vs CSV và JSON

Kích thướcParquetCSVJSON
Bố cụcCột nhị phânDòng và trường văn bảnĐối tượng văn bản, mảng và giá trị
Lược đồCác loại vật lý và logic nhúngBên ngoài hoặc suy diễnCác loại giá trị cơ bản; lược đồ miền là bên ngoài
Đọc dễ dàng cho con ngườiCần công cụDễ dàng kiểm tra dưới dạng văn bản hoặc bảngDễ dàng kiểm tra cho tài liệu vừa phải
Dữ liệu lồng nhauĐược hỗ trợCần làm phẳng hoặc liên quan đến tệpHỗ trợ trực tiếp
Đọc chọn lọcCắt tỉa cột và nhóm hàngThường quét bản ghiThường quét tài liệu hoặc luồng
Cập nhậtTệp thường được viết lại hoặc thay thếCó thể thêm vào, khó cập nhật an toànThay thế tài liệu hoặc luồng là phổ biến
Ranh giới tốt nhấtLưu trữ và trao đổi phân tíchChuyển giao dữ liệu phẳngAPI, sự kiện và xử lý ứng dụng

Nén, Mã hóa và Thống kê

Parquet tách mã hóa khỏi nén. Mã hóa đại diện cho các giá trị một cách hiệu quả trước khi codec nén xử lý các byte trang. Các triển khai có thể chọn mã hóa từ điển, kỹ thuật chạy dài, đóng gói bit, mã hóa delta, hoặc đại diện thông thường dựa trên loại và dữ liệu.

Thống kê siêu dữ liệu có thể bao gồm giá trị tối thiểu và tối đa, số lượng null, và các chỉ mục khác. Một động cơ truy vấn có thể sử dụng chúng để bỏ qua một nhóm hàng mà phạm vi giá trị không thỏa mãn một bộ lọc. Đây là đẩy xuống điều kiện hoặc cắt tỉa ở lớp lưu trữ. Nó giảm thiểu I/O khi tổ chức dữ liệu và thống kê phù hợp với các điều kiện truy vấn.

Thống kê không thể thay thế cho kiểm soát truy cập và có thể tiết lộ phạm vi giá trị hoặc số lượng cho bất kỳ ai có thể đọc siêu dữ liệu tệp. Các tập dữ liệu nhạy cảm cần quyền lưu trữ, kiểm soát mã hóa, và quản lý ở các lớp đối tượng và danh mục.

Phân vùng, Tệp và Vấn đề Tệp Nhỏ

Các tập dữ liệu thường đặt các tệp Parquet trong các thư mục được phân vùng theo một giá trị thường xuyên được lọc, chẳng hạn như ngày hoặc khu vực. Một động cơ truy vấn có thể bỏ qua toàn bộ đường dẫn trước khi mở siêu dữ liệu tệp. Các trường phân vùng nên có độ bổ sung được kiểm soát; việc tạo một thư mục cho mỗi người dùng hoặc yêu cầu có thể tạo ra một số lượng nhỏ phân vùng không thể quản lý được.

Nhiều tệp nhỏ thêm chi phí lập kế hoạch, liệt kê, kết nối và thông tin siêu dữ liệu. Chúng cũng giảm lượng dữ liệu có sẵn cho nén hiệu quả bên trong mỗi tệp. Các đường ống thường nén những đầu ra nhỏ thành các tệp có kích thước cho động cơ truy vấn và kho đối tượng của chúng, đồng thời bảo toàn các ranh giới phân vùng hỗ trợ cắt tỉa.

Không có kích thước tệp phổ quát nào phù hợp cho mọi hệ thống. Chọn dựa trên hành vi của kho đối tượng, đồng thời truy vấn, chiều rộng hàng, giới hạn bộ nhớ, nhịp độ ghi và hướng dẫn của động cơ. Đo thời gian lập kế hoạch cũng như thông lượng quét.

Parquet Không Phải Là Định Dạng Bảng

Một tệp Parquet mô tả dữ liệu bên trong tệp đó. Nó không tự mình cung cấp nhật ký giao dịch qua hàng ngàn tệp, cách ly ảnh chụp, cam kết nhiều tệp nguyên tử, thay đổi theo hàng, hoặc danh mục về tệp nào thuộc về trạng thái bảng hiện tại.

Một nền tảng dữ liệu có thể quản lý những lo ngại đó thông qua danh mục và lớp bảng của nó. Sự phân biệt này quan trọng trong quá trình cập nhật và thay đổi lược đồ. Liệt kê mọi đối tượng trong một thư mục và coi nó như dữ liệu hiện tại có thể bao gồm các tệp lỗi thời hoặc chưa được ghi hoàn toàn trừ khi hệ thống xung quanh xác định các ngữ nghĩa cam kết.

Sự phát triển của lược đồ

Thêm một cột tùy chọn thường dễ quản lý vì các tệp cũ chỉ đơn giản là thiếu nó và người đọc có thể cung cấp giá trị null. Đổi tên một cột khó hơn vì một người đọc dựa trên tên có thể thấy hai trường khác nhau. Một số hệ sinh thái theo dõi các mã định danh trường ổn định, nhưng hỗ trợ phải nhất quán giữa các người viết, người đọc và lớp bảng.

Thay đổi một kiểu vật lý hoặc logic yêu cầu một kế hoạch tương thích. Mở rộng một số nguyên có thể hoạt động trong một số trình đọc; thay đổi một chuỗi thành một bản ghi lồng ghép là một sự đứt gãy ngữ nghĩa. Lưu trữ các phiên bản lược đồ, xác thực các tệp mới trước khi xuất bản và kiểm tra các đọc phiên bản hỗn hợp.

Đừng dựa vào lược đồ của một tệp làm hợp đồng dữ liệu toàn bộ. Một thư mục có thể chứa các tệp được viết bởi những công việc khác nhau hoặc vào những thời điểm khác nhau. Lược đồ catalog và xác thực đưa vào nên định nghĩa những gì được chấp nhận.

Các trường hợp sử dụng Parquet thông dụng

Lưu trữ Data Lake

Các tập dữ liệu lớn đã được xác thực được lưu trữ trong lưu trữ đối tượng để quét chọn lọc bởi các công cụ truy vấn phân tán.

Đổi chỗ kho

Các tải lên và tải xuống số lượng lớn sử dụng các tệp cột có kiểu để giảm công việc chuyển giao và phân tích.

Các tính năng Machine Learning

Các công việc đào tạo và chấm điểm lô đọc các cột tính năng đã chọn qua nhiều bản ghi mà không cần phân tích các trường văn bản không liên quan.

Dữ liệu web lịch sử

Các quan sát sản phẩm, tìm kiếm, thị trường hoặc nội dung đã được chuẩn hóa có thể được phân vùng theo thời gian thu thập và truy vấn theo các chiều đã chọn.

Khi nào không nên sử dụng Parquet

Parquet không phù hợp cho một tài liệu mà mọi người cần chỉnh sửa thủ công, phản hồi API công cộng, hoặc một luồng các thông điệp độc lập nhỏ. Nó cũng không thoải mái cho các cập nhật hàng đơn lẻ thường xuyên và tra cứu giá trị khóa trực tiếp mà không có chỉ mục hoặc động cơ bảng.

CSV có thể tốt hơn cho một chuyển giao cho nhà phân tích đơn giản. JSON hoặc NDJSON có thể tốt hơn cho các dịch vụ và xử lý sự kiện. Một cơ sở dữ liệu giao dịch có thể tốt hơn cho trạng thái vận hành có thể thay đổi. Cùng một ống dẫn có thể đưa đầu vào thô ở một định dạng và xuất bản một lớp phân tích có chọn lọc trong Parquet.

Cách tạo dữ liệu Parquet đáng tin cậy

  1. Xác định lược đồ chuẩn. Chỉ định tính khả dụng, kiểu logic, ngữ nghĩa dấu thời gian, độ chính xác thập phân và các cấu trúc lồng ghép.
  2. Xác thực các bản ghi đến. Giải quyết các xung đột kiểu và giá trị sai trước khi viết tệp.
  3. Chọn nhóm hàng và tệp đích theo đo lường. Cân bằng bộ nhớ, nén, song song và chi phí thông tin siêu dữ liệu.
  4. Phân vùng cho các bộ lọc thực sự. Tránh các đường dẫn có độ đa dạng cao và các phân vùng trống.
  5. Kiểm tra mỗi trình đọc. Xác nhận các kiểu lồng ghép, chú thích logic, codec nén và sự phát triển của lược đồ trên toàn bộ tập hợp động cơ đã triển khai.
  6. Xuất bản theo cách nguyên tử qua lớp dữ liệu. Làm cho tệp chưa hoàn thành vô hình cho đến khi xác thực và cập nhật catalog thành công.

Kết luận

Apache Parquet biến các bản ghi có kiểu thành một tệp cột mà các hệ thống phân tích có thể đọc một cách có chọn lọc. Lược đồ, mã hóa, nén, thống kê và hỗ trợ dữ liệu lồng ghép của nó giảm thiểu I/O không cần thiết cho nhiều khối lượng công việc nặng về quét. Những lợi ích đó phụ thuộc vào thiết kế dữ liệu tốt: các lược đồ kiểm soát, các tệp và nhóm hàng hợp lý, các phân vùng hữu ích, các trình đọc tương thích và một lớp bảng khi các giao dịch hoặc các ảnh chụp quan trọng.

Sẵn sàng xây dựng một ống dẫn dữ liệu dạng cột?

Thu thập dữ liệu web có cấu trúc với Scrapeless Scraping API, xác thực các bản ghi và xuất bản các tập dữ liệu Parquet có kiểu để phân tích.

Đăng ký hôm nay và nhận $5 tín dụng miễn phíkhông yêu cầu thẻ tín dụng.

Đòi $5 tín dụng của bạn →

Câu hỏi thường gặp

Parquet có phải là một cơ sở dữ liệu không?

Không, Parquet là một định dạng tệp. Các động cơ truy vấn, catalog, lưu trữ đối tượng và lớp bảng cung cấp quản lý và quyền truy cập giống như cơ sở dữ liệu quanh các tệp Parquet.

Tại sao Parquet nhanh hơn CSV cho phân tích?

Parquet có thể đọc các cột đã chọn, bỏ qua các phạm vi dữ liệu không liên quan bằng cách sử dụng siêu dữ liệu và giải mã các giá trị nhị phân có kiểu. Các trình đọc CSV thường quét và phân tích văn bản của mỗi bản ghi.

Parquet có thể lưu trữ dữ liệu JSON lồng ghép không?

Có, Parquet hỗ trợ các bản ghi lồng ghép, danh sách và bản đồ, nhưng ống dẫn phải giải quyết các hình dạng JSON không đồng nhất thành một lược đồ ổn định.

Mọi người có thể mở Parquet trong trình soạn thảo văn bản không?

Không, Parquet là nhị phân và cần một công cụ đọc hoặc truy vấn. Xuất khẩu một kết quả đã chọn sang CSV khi một người cần truy cập bảng tính trực tiếp.

Parquet có hỗ trợ sự phát triển của lược đồ không?

Các tập dữ liệu Parquet có thể phát triển, đặc biệt thông qua việc bổ sung cột tùy chọn, nhưng tính tương thích phụ thuộc vào kiểu, danh tính trường, trình đọc và lớp bảng xung quanh. Kiểm tra các đọc lược đồ hỗn hợp trước khi xuất bản.

Tài liệu tham khảo