# 使用 Apache Parquet 文件

Apache Parquet 是一种列式存储格式，可高效存储和查询大型数据集。在 Qlik Sense 中，您可以从 Parquet 文件中读取数据，并将表存储为 Parquet 文件。

Parquet 允许有效查询表中的特定列，而不是读取整个表。这使得它非常适合用于大数据处理。此外，Parquet 支持数据的高效压缩和编码。这可以进一步减少存储空间并提高查询性能。

信息注释必须手动更新 August 2023 之前 Qlik Sense 版本中创建的所有现有应用程序，以启用 Parquet 支持。这对于升级到 August 2023 的部署以及将现有应用程序导入新部署时都是必需的。有关更新应用程序的更多信息，请参阅[在 Qlik Sense上对现有应用程序启用 Parquet 文件支持](https://community.qlik.com/t5/Official-Support-Articles/Enable-parquet-file-support-for-existing-Apps-in-Qlik-Sense/ta-p/2083285)。

## 创建 Parquet 文件

可以使用脚本中的 Store 命令创建 Parquet 文件。在脚本中说明要将先前读取的表格或其部分导出到您选定位置上的一个明确命名文件。您可以将存储的数据嵌套在 Parquet 文件中的数据中。

有关更多信息，请参阅[Store](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Store.htm)。

## 从 Parquet 文件读取数据

您可以像 Qlik Sense 支持的任何其他数据文件一样从 Parquet 文件中读取数据。这包括数据管理器、数据加载编辑器，或者当您将数据添加到新应用程序时。

有关更多信息，请参阅[从文件中加载数据](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/DataSource/load-data-from-files.htm)。

也可以使用 LOAD 命令从数据加载脚本中的 Parquet 文件加载数据。例如：

```
LOAD  * from xyz.parquet (parquet);
```

有关更多信息，请参阅[Load](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)。

### 从嵌套 Parquet 文件加载数据

如果一个 Parquet 文件包含嵌套数据，则需要在多个 LOAD 语句中加载该文件，每个 LOAD 语句指定应将哪个子集加载到每个表中。Table is 说明符用于证明要加载的架构中的组节点的路径。

仅加载与 Table is 路径匹配的节点。

数据节点在没有嵌套的情况下加载到文件中。

组节点将通过将字段名称添加到字段名称中来对组中的字段进行分组。例如，具有 field1 和 field2 的组被加载为 group.field1 和 group.field2。

列表节点将生成用于链接表的关键字段。例如 %Key\_group.list。列表中的任何组或数据节点都需要在单独的 LOAD 语句中加载。还将向父列表添加一个关键字段。

以下示例显示了相同的嵌套 Parquet 文件，该文件在 [将嵌套数据存储在 Parquet 文件中](https://help.qlik.com/zh-CN/sense/May2025/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, and company:headquarter.headquarter.city:region.region](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-script-dm-dmv.png)

示例： 数据加载编辑器（选择数据）

如果在 数据加载编辑器 中使用选择数据加载数据，则最终会出现以下脚本：

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

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

LOAD
salesrep,
"%Key_company:salesrep"

FROM [lib://AttachedFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);
```

数据模型在 数据模型查看器 中如下所示：

用于在 数据加载编辑器 中通过 Select data 加载 company.parquet 的数据模型

用于在 数据加载编辑器 中通过 Select data 加载 company.parquet 的数据模型

用于在 数据加载编辑器数据加载编辑器 中通过 Select dataSelect data 加载 company.parquet 的数据模型 ![显示销售代表、公司、总部和地区表的数据模型。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-select-dmv.png)

示例： 数据加载编辑器（自定义加载脚本）

如果使用自定义加载脚本，则可以更好地控制如何从 customer.parquet 加载字段和表。以下加载脚本从 company.parquet 加载表和字段：

```
LOAD * FROM [lib://AttachedFiles/company.parquet] (parquet);
LOAD *, Lookup('company', '%Key_company:salesrepo', [%Key_company:salesrep], 'company') as company;
LOAD * FROM [lib://AttachedFiles/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://AttachedFiles/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://AttachedFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]);
DROP FIELD [%Key_city:region]; 
```

这将产生以下数据模型，该模型与数据存储在 Parquet 文件中之前的原始数据模型相同。

在 数据加载编辑器 中用于使用自定义脚本加载 company.parquet 的数据模型

在 数据加载编辑器 中用于使用自定义脚本加载 company.parquet 的数据模型

在 数据加载编辑器数据加载编辑器 中用于使用自定义脚本加载 company.parquetcompany.parquet 的数据模型 ![包含总部、地区、销售代表和公司表的数据模型，反映源应用程序中的确切数据模型。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/ex_parquet-load-script-dmv.png)

## 限制

Parquet 文件存在以下限制：

* 可能无法正确加载包含 int96 时间戳字段的 Parquet 文件。

  Int96 是一种不推荐使用的数据类型，它包含没有时区信息的时间戳。将尝试将字段读取为 UTC，但由于存在不同的供应商实现，因此无法保证成功。

  验证加载的数据，并在需要时使用偏移量将其调整到正确的时区。