表格資料#
雖然陣列和分塊陣列表示同質值的一維序列,但資料通常以異質資料的二維集合形式出現(例如資料庫表格、CSV 檔案...)。Arrow 提供了數種抽象概念來方便且有效率地處理此類資料。
欄位#
欄位用於表示表格的特定欄(以及巢狀資料類型(例如 arrow::StructType
)的特定成員)。一個欄位,即 arrow::Field
的實例,將資料類型、欄位名稱和一些可選的中繼資料組合在一起。
建立欄位的建議方式是呼叫 arrow::field()
工廠函式。
綱要#
綱要描述二維資料集(例如表格)的整體結構。它包含一系列欄位以及一些可選的全綱要中繼資料(除了每個欄位的中繼資料之外)。建立綱要的建議方式是呼叫 arrow::schema()
工廠函式多載之一
// Create a schema describing datasets with two columns:
// a int32 column "A" and a utf8-encoded string column "B"
std::shared_ptr<arrow::Field> field_a, field_b;
std::shared_ptr<arrow::Schema> schema;
field_a = arrow::field("A", arrow::int32());
field_b = arrow::field("B", arrow::utf8());
schema = arrow::schema({field_a, field_b});
表格#
arrow::Table
是一個二維資料集,其欄使用分塊陣列,並帶有一個提供欄位名稱的綱要。此外,每個分塊欄在元素數量上必須具有相同的邏輯長度(儘管每個欄可以以不同的方式分塊)。
記錄批次#
arrow::RecordBatch
是一個二維資料集,由多個連續陣列組成,每個陣列的長度相同。與表格類似,記錄批次也具有一個綱要,該綱要必須與其陣列的資料類型相符。
記錄批次是各種序列化和運算函式的方便工作單位,可能是漸進式的。
記錄批次可以在實作之間傳送,例如透過 IPC 或透過 C Data Interface。另一方面,表格和分塊陣列是 C++ 實作中的概念,而不是 Arrow 格式本身的概念,因此它們不是直接可攜式的。
但是,表格可以輕鬆地從記錄批次的序列轉換和建立,而無需複製底層陣列緩衝區。表格可以使用 arrow::TableBatchReader
作為任意數量的記錄批次進行串流傳輸。相反地,可以使用 arrow::Table::FromRecordBatches()
工廠函式多載之一,將邏輯記錄批次序列組合成表格。