探索檔案儲存體
將資料儲存在檔案中的能力是任何運算系統的核心元素。 檔案可以儲存在個人電腦硬碟上的本機檔案系統,以及 USB 隨身碟抽取式媒體上;但在多數組織中,重要資料檔會集中儲存在某些類型的共用檔案儲存系統中。 中央儲存位置會逐漸裝載至雲端,為大量資料提供符合成本效益、安全且可靠的儲存空間。
用來儲存資料的特定檔案格式取決於許多因素,包括:
- 儲存的資料類型 (結構化、半結構化或非結構化)。
- 需要讀取、寫入及處理資料的應用程式與服務。
- 需要讓人類可讀的資料檔,或針對有效率的儲存和處理進行最佳化。
以下討論一些常見的檔案格式。
分隔的文字檔案
資料通常會以純文字格式儲存,並具有特定的欄位分隔符號和列結束字元。 分隔資料最常見的格式是逗點分隔值檔案 (CSV),其中的欄位會以逗號分隔,而列則以歸位字元/新行終止。 (選擇性) 第一行可能包括欄位名稱。 其他常用格式包括定位字元分隔值 (TSV) 和空格分隔 (使用索引標籤或空格來分隔欄位),以及將每個欄位配置固定字元數的固定寬度資料。 針對需要以一般人看得懂的格式存取、各種應用程式和服務的結構化資料,分隔符號文字是個好選擇。
下列範例顯示逗號分隔格式的客戶資料:
FirstName,LastName,Email
Joe,Jones,joe@litware.com
Samir,Nadoy,samir@northwind.com
JavaScript 物件標記法 (JSON)
JSON 是一種普遍的格式,階層式檔案結構描述可用來定義具有多個屬性的資料實體 (物件)。 每個屬性可能是物件 (或物件集合);讓 JSON 成為適合結構化及半結構化資料的彈性格式。
下列範例顯示包括客戶集合的 JSON 檔案。 每個客戶都有三個屬性 (firstName、lastName 和連絡人),而連絡人屬性包括一組物件,代表一或多個連絡方法 (電子郵件或電話)。 請注意,物件會以括弧括住 ({..}),集合會以方括弧括住 ([..])。 屬性以 name : value 組表示,並以逗號 (,) 分隔。
{
"customers":
[
{
"firstName": "Joe",
"lastName": "Jones",
"contact":
[
{
"type": "home",
"number": "555 123-1234"
},
{
"type": "email",
"address": "joe@litware.com"
}
]
},
{
"firstName": "Samir",
"lastName": "Nadoy",
"contact":
[
{
"type": "email",
"address": "samir@northwind.com"
}
]
}
]
}
可延伸標記語言 (XML)
XML 是一種一般人看得懂的資料格式,在 1990 和 2000 年代很受歡迎。 這主要是由較不詳細的 JSON 格式取代,但仍有一些系統使用 XML 來代表資料。 XML 使用以角括弧括住的標籤 (<../>),以定義元素和屬性,如下列範例所示:
<Customers>
<Customer name="Joe" lastName="Jones">
<ContactDetails>
<Contact type="home" number="555 123-1234"/>
<Contact type="email" address="joe@litware.com"/>
</ContactDetails>
</Customer>
<Customer name="Samir" lastName="Nadoy">
<ContactDetails>
<Contact type="email" address="samir@northwind.com"/>
</ContactDetails>
</Customer>
</Customers>
二進位大型物件 (BLOB)
最後,所有檔案都會儲存為二進位資料 (1 和 0),但在上述討論的人類可讀的格式中,二進位資料的位元組會對應至可列印的字元 (通常是透過如 ASCII 或 Unicode 等字元編碼配置)。 不過某些檔案格式 (尤其是非結構化資料) 會將資料儲存為原始二進位,而這些二進位檔案必須由應用程式轉譯並呈現。 儲存為二進位檔案的常見資料類型包括影像、視訊、音訊和應用程式特定的文件。
使用這類資料時,資料專業人員通常會將資料檔案稱為 BLOB (二進位大型物件)。
最佳化檔案格式
雖然結構化及半結構化資料的人類可讀格式很有用,但通常不會針對儲存空間或處理進行最佳化。 經過一段時間,我們開發了一些特殊的檔案格式,可進行壓縮、編編製索引,以及有效儲存和處理。
您可能會看到一些常見的最佳化檔案格式,包括 Avro、ORC 和 Parquet:
Avro 是資料列型格式。 其是由 Apache 所建立。 每一筆記錄都包含一個標頭,描述記錄中資料的結構。 此標頭會儲存為 JSON。 資料會儲存為二進位資訊。 應用程式會使用標頭中的資訊來剖析二進位資料,並擷取其包含的欄位。 Avro 是非常適合用來壓縮資料,並將儲存體和網路頻寬需求降至最低的格式。
ORC (最佳化的資料列單欄式格式) 可將資料組織成資料行,而不是資料列。 它是由 HortonWorks 開發,用於最佳化 Apache Hive 的讀取和寫入作業 (Apache Hive 是一種資料倉儲系統,可支援對大型資料集進行快速的資料摘要和查詢)。 ORC 檔案包含許多帶狀的資料。 每個等量都會保留一個或一組資料行的資料。 等量包含等量中資料列的索引、每個資料列的資料,以及一個頁尾,其中保留每個資料行的統計資訊 (計數、總和、最大值、最小值等)。
Parquet 是另一個單欄式資料格式。 它是由 Cloudera 和 X 所建立。Parquet 檔案包含資料列群組。 每個資料行的資料會一起儲存在同一資料列群組中。 每個資料列群組都包含一或多個資料區塊。 Parquet 檔案包含中繼資料,描述在每個區塊中找到的一組資料列。 應用程式可以使用此中繼資料來快速找出一組指定資料列的正確區塊,並針對這些資料列擷取指定資料行中的資料。 Parquet 專門用來有效率地儲存和處理巢狀資料類型。 其支援非常有效率的壓縮和編碼配置。