# 使用 Apache Parquet 檔案

Apache Parquet 是單欄式儲存格式，對於儲存和查詢大量資料集的效率很高。在 Qlik Sense 中，您可以從 Parquet 檔案讀取資料，並將表格儲存為 Parquet 檔案。

Parquet 允許有效率地查詢表格中的特定欄，而非讀取整個表格。因此這很適合搭配大量資料處理使用。此外，Parquet 支援有效率的資料壓縮和編碼。這可以進一步減少儲存空間並改善查詢效能。

## 建立 Parquet 檔案

您可以在指令碼中使用 Store 命令建立 Parquet 檔案。在指令碼中陳述要將先前讀取的表格或部分匯出到您所選位置中明確命名的檔案。您可以在 Parquet 檔案中內嵌儲存在資料中的資料。

如需詳細資訊，請參閱[Store](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Store.htm)。

## 從 Parquet 檔案讀取資料

您可以從 Parquet 檔案讀取資料，就像 Qlik Sense 支援的任何其他資料檔案。這包括資料管理員、資料載入編輯器或在您將資料新增至新的應用程式時。

如需詳細資訊，請參閱[從檔案載入資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/load-data-from-files.htm)。

您也可以透過 LOAD 命令在資料載入指令碼中從 Parquet 檔案載入資料。例如︰

```
LOAD  * from [lib://DataFiles/xyz.parquet] (parquet);
```

如需詳細資訊，請參閱[Load](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)。

### 從巢狀 Parquet 檔案載入資料

若 Parquet 檔案包含巢狀資料，需要在多個 LOAD 陳述式中載入，每一個陳述式指定哪個子集應載入到每個表格中。Table is 規範用來證明結構描述中要載入的群組節點路徑。

您可以使用說明符 Delimiter is 指定應如何合併節點。LOAD 陳述式載入具有巢狀資料且不包括 delimiter is 的檔案，並使用指令碼變數 `FieldNameDelimiter` 指定的該值。若未提供分隔符號且未設定 `FieldNameDelimiter`，預設分隔符號將會是 `'.'`。

只會載入符合 Table is 路徑的節點。

資料節點在沒有內嵌的情況下載入到檔案中。

群組節點會將名稱新增至欄位名稱，以將欄位分組。例如，具有 field1 和 field2 的群組會載入為 group.field1 和 group.field2。

清單節點將會產生用來連結表格的索引鍵欄位。例如 %Key\_group.list。需要在獨立的 LOAD 陳述式中載入清單內部的任何群組或資料節點。也會新增對於父清單的索引鍵欄位。

以下範例顯示相同的巢狀 Parquet 檔案，這在 [在 Parquet 檔案中儲存巢狀資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Store.htm#Storing) 的範例中建立，載入到應用程式中，並使用 資料管理員 和 資料載入編輯器 (透過來自選取資料的預設指令碼和自訂指令碼)。

範例： 資料管理員

若您在 資料管理員 載入 customer.parquet，並套用所有建議的關聯，您最後會有下列資料模型：

用於透過 資料管理員 載入 company.parquet 的資料模型

用於透過 資料管理員 載入 company.parquet 的資料模型

用於透過 資料管理員資料管理員 載入 company.parquetcompany.parquet 的資料模型 ![資料模型顯示表格 company:salesrep.salesrep、company、company:headquarter.headquarter 和 company:headquarter.headquarter.city:region.region](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-script-dm-dmv.png)

範例： 資料載入編輯器 (選取資料)

若您在 資料載入編輯器 使用選取資料載入資料，您最後會有下列指令碼：

```
LOAD
company,
contact,
"%Key_company:headquarter",
"%Key_company:salesrep"
FROM [lib://DataFiles/company.parquet] (parquet);
			
LOAD
country,
city,
"%Key_city:region",
"%Key_company:headquarter"
FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]);

LOAD
region,
"%Key_city:region"
FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]);

LOAD
salesrep,
"%Key_company:salesrep"
FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);
```

資料模型檢視器 中的資料模型如下所示。

用於在 資料載入編輯器 透過選取資料載入 company.parquet 的資料模型

用於在 資料載入編輯器 透過選取資料載入 company.parquet 的資料模型

用於在 資料載入編輯器資料載入編輯器 透過選取資料選取資料載入 company.parquet 的資料模型 ![資料模型顯示表格 salesrep、company、headquarter 和 region。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-select-dmv.png)

範例： 資料載入編輯器 (自訂載入指令碼)

若您使用自訂載入指令碼，您更能控制如何從 customer.parquet 載入欄位和表格。下列載入指令碼從 company.parquet 載入表格和欄位：

```
LOAD * FROM [lib://DataFiles/company.parquet] (parquet);
LOAD *, Lookup('company', '%Key_company:salesrepo', [%Key_company:salesrep], 'company') as company;
LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);
DROP FIELD [%Key_company:salesrep];

LOAD *, Lookup('company', '%Key_company:headquarter', [%Key_company:headquarter], 'company') as company;
LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]);
DROP FIELD [%Key_company:headquarter];
LOAD *, Lookup('city', '%Key_city:region', [%Key_city:region], 'headquarter') as city;
LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]);
DROP FIELD [%Key_city:region]; 
```

這會產生下列資料模型，在資料儲存於 Parquet 檔案之前，這與原始資料模型相同。

用於透過 資料載入編輯器 中的自訂指令碼載入 company.parquet 的資料模型

用於透過 資料載入編輯器 中的自訂指令碼載入 company.parquet 的資料模型

用於透過 資料載入編輯器資料載入編輯器 中的自訂指令碼載入 company.parquetcompany.parquet 的資料模型 ![具有表格 headquarter、region、salesrep 和 company 的資料模型鏡射來自來源應用程式的確切資料模型。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-script-dmv.png)

## 限制

Parquet 檔案有下列限制：

* 包含 int96 時間戳記欄位的 Parquet 檔案可能無法正確載入。

  Int96 是已過時的資料類型，其中包含時間戳記而沒有時區資訊。將會嘗試以 UTC 讀取欄位，但由於有不同的廠商實作，不保證會成功。

  如有需要，驗證載入的資料並透過位移調整為正確時區。