# QVD 文件

QVD (QlikView Data) 文件是包含从 Qlik Sense 或 QlikView 导出的数据表的文件。QVD 是原生的 Qlik 格式，只能由 Qlik Sense 或 QlikView 写入和读取。该文件格式针对从 Qlik Sense 脚本读取数据时的速度进行了优化，但仍然非常紧凑。从 QVD 文件读取数据通常比从其他数据源读取快 10-100 倍。

QVD 文件可以以两种模式读取：标准（快）和优化（更快）。所选模式由 Qlik Sense 脚本引擎自动确定。仅当读取所有加载的字段而没有任何转换（作用于字段的公式）时，才能使用优化模式，尽管允许重命名字段。导致 Qlik Sense 解包记录的 Where 子句也会禁用优化加载。

一个 QVD 文件仅包含一个数据表，由三个部分组成：

* 一个 XML 标头（采用 UTF-8 字符集），描述表中的字段、后续信息的布局以及一些其他元数据。
* 采用字节填充格式的符号表。
* 采用位填充格式的实际表数据。

QVD 文件可用于多种用途。可以轻松确定三个主要用途。在任何给定情况下，可能适用不止一种用途：

* 减少数据库服务器上的负载

  从外部数据源获取的数据量也可以大大减少。这减少了外部数据库的工作负载和网络流量。此外，当多个 Qlik Sense 脚本共享相同数据时，只需将其从源数据库加载到 QVD 文件中一次即可。其他应用程序可以通过此 QVD 文件利用相同的数据。
* 合并来自多个 Qlik Sense 应用程序的数据。

  使用 Binary 脚本语句，只能将数据从一个 Qlik Sense 应用程序加载到另一个应用程序中，但使用 QVD 文件，Qlik Sense 脚本可以组合来自任意数量的 Qlik Sense 应用程序的数据。这为应用程序合并来自不同业务部门等的类似数据开辟了可能性。
* 增量加载

  在许多常见情况下，QVD 功能可用于通过专门从不断增长的数据库中加载新记录来促进增量加载。

信息注释

要了解 Qlik 社区如何使用 Qlik Automate 来缩短 QVD 加载时间，请参阅 [如何使用自动化拆分 QVD 以改进重新加载](https://community.qlik.com/t5/Official-Support-Articles/How-to-split-QVDs-using-an-automation-to-improve-reloads/ta-p/1997153)。

## 创建 QVD 文件

可以使用脚本中的 store 命令创建和命名 QVD 文件。在脚本中声明，要将先前读取的表或其一部分导出到您选择的位置的显式命名文件中。

### Store

此脚本语句创建一个显式命名的 QVD、Parquet、CSV 或 TXT 文件。

```
Store[ *fieldlist from] table into filename [ format-spec ];
```

该语句只能从一个数据表导出字段。如果要导出多个表中的字段，则必须事先在脚本中进行显式连接，以创建应导出的数据表。

文本值以 UTF-8 格式导出到 CSV 文件。可以指定分隔符，请参阅 LOAD。到 CSV 文件的 store 语句不支持 BIFF 导出。

示例：

```
Store mytable into [lib://DataFiles/xyz.qvd]; 
Store * from mytable into [lib://DataFiles/xyz.qvd]; 
Store myfield from mytable into [lib://DataFiles/xyz.qvd]; 
Store myfield as renamedfield, myfield2 as renamedfield2 from mytable into [lib://DataFiles/xyz.qvd]; 
Store mytable into [lib://DataFiles/myfile1.txt]; 
Store mytable into [lib://DataFiles/myfile2.csv]; 
```

执行以下操作：

1. 打开高级脚本教程应用程序。
2. 单击 Product 脚本段。
3. 将以下内容添加到脚本的末尾：
   ```
   Store * from Product into [lib://DataFiles/ProductData.qvd](qvd);
   ```

   您的脚本应如下所示：
   ```
   CrossTable(Month, Sales)
   LOAD
       Product,
       "Jan 2014",
       "Feb 2014",
       "Mar 2014",
       "Apr 2014",
       "May 2014"
   FROM [lib://DataFiles/Product.xlsx] 
   (ooxml, embedded labels, table is Product);

   Store * from Product into [lib://DataFiles/ProductData.qvd](qvd);
   ```
4. 单击加载数据。

   Product.qvd 文件现在应该在文件列表中。

   此数据文件是 Crosstable 脚本的结果，是一个三列表，每个类别一列（Product, Month, Sales）。现在可以使用此数据文件替换整个 Product 脚本段。

## 从 QVD 文件读取数据

可以通过以下方法将 QVD 文件读取或访问到 Qlik Sense 中：

* 将 QVD 文件作为显式数据源加载。QVD 文件可以由 Qlik Sense 脚本中的 load 语句引用，就像任何其他类型的文本文件（csv、fix、dif、biff 等）一样。

  示例：

  LOAD \* from [lib://DataFiles/xyz.qvd] (qvd); LOAD fieldname1, fieldname2 from [lib://DataFiles/xyz.qvd] (qvd); LOAD fieldname1 as newfieldname1, fieldname2 as newfieldname2 from [lib://DataFiles/xyz.qvd](qvd);

* 从脚本访问 QVD 文件。可以使用许多脚本函数（均以 QVD 开头）来检索有关在 QVD 文件的 XML 标头中找到的数据的各种信息。

执行以下操作：

1. 注释掉 Product 脚本段中的整个脚本。
2. 输入以下脚本：
   ```
   Load * from [lib://DataFiles/ProductData.qvd](qvd);			
   ```
3. 单击加载数据。

   数据从 QVD 文件加载。

   数据加载进度窗口

   数据加载进度窗口

   数据加载进度窗口 ![数据加载进度窗口。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-load-qvd.png)

信息注释要了解如何使用 QVD 文件进行增量加载，请参阅 Qlik Community 中的这篇博客文章：[Qlik 增量加载概述](https://community.qlik.com/t5/Qlik-Design-Blog/Overview-of-Qlik-Incremental-Loading/ba-p/1466780)

## 谢谢！

现在您已经完成了本教程，希望您获得了更多有关在 Qlik Sense 中编写脚本的知识。请访问我们的网站以获取有关可用进一步培训的更多信息。