跳到主要内容 跳到补充内容

使用 Apache Parquet 文件

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

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

创建 Parquet 文件

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

有关详细信息,请参阅Store

Parquet 文件读取数据

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

有关详细信息,请参阅从文件中加载数据

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

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

有关详细信息,请参阅 Load

从嵌套 Parquet 文件加载数据

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

可以使用说明符分隔符为来指定节点的组合方式。加载包含不带“分隔符为”的嵌套数据的文件的 LOAD 语句使用脚本变量 FieldNameDelimiter 指定的该值。如果未提供任何分隔符且未设置 FieldNameDelimiter,则默认分隔符将为 '.'

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

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

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

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

以下示例显示了相同的嵌套 Parquet 文件,该文件在 将嵌套数据存储在 Parquet 文件中 中的示例中创建,并使用 数据管理器数据加载编辑器 加载到应用程序中(使用选择数据和自定义脚本中的默认脚本)。

示例: 数据管理器

如果加载 数据管理器 中的 customer.parquet 并应用所有推荐的关联,则最终会得到以下数据模型:

用于通过 数据管理器 加载 company.parquet 的数据模型

显示表格的数据模型  company:salesrep.salesrep, company, company:headquarter.headquarter, and company:headquarter.headquarter.city:region.region

示例: 数据加载编辑器选择数据

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

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]);

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

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

显示销售代表、公司、总部和地区表的数据模型。

示例: 数据加载编辑器(自定义加载脚本)

如果使用自定义加载脚本,则可以更好地控制如何从 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 的数据模型

包含总部、地区、销售代表和公司表的数据模型,反映源应用程序中的确切数据模型。

限制

Parquet 文件存在以下限制:

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

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

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

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!