跳到主要内容

QVD 文件

QVD (QlikView Data) 文件是包含从 Qlik SenseQlikView 中所导出数据的表格的文件。QVD 是本地 Qlik 格式,只能由 Qlik SenseQlikView 写入和读取。当从 Qlik Sense 脚本中读取数据时,该文件格式可提升速度,同时又非常紧凑。从 QVD 文件读取数据通常比从其他数据源读取快 10 到 100 倍。

QVD 文件可以用两种模式读取:标准(快速)和优化(超快)。所选模式由 Qlik Sense 脚本引擎自动确定。尽管字段可以重命名,但仅当全部加载字段在无任何转换的形式下读取(操作字段公式)时才可以使用优化模式。导致 Qlik Sense 解压记录的 Where 子句也将禁用优化加载。

QVD 文件正好包含一个数据表,由三个部分组成:

  • 在表格中描述字段的 XML 标题(UTF-8 字符集)、后续信息的布局以及一部分其他元数据。
  • 字节填充格式符号表。
  • 位填充格式实际表。

QVD 文件具有许多用途。可轻易识别四种主要的用途。在任何给定的情况下都可以应用不只一个:

  • 提高数据加载速度
  • 通过缓冲 QVD 文件中输入数据的不改变或缓慢改变部分,执行大型数据集脚本可变得相当快。

  • 降低数据库服务器上的加载量
  • 从外部数据源提取的数据量也可大幅度降低。这可减少外部数据库的工作量和网络流量。而且,当几个 Qlik Sense 脚本共享相同的数据时,只需要将这些数据从源数据库加载到 QVD 文件一次即可。其他应用程序可以利用此 QVD 文件中相同的数据。

  • 合并多个 Qlik Sense 应用程序数据。
  • 使用 Binary 脚本语句,可能只能从单个 Qlik Sense 应用程序将数据加载到另一个应用程序,但使用 QVD 文件,Qlik Sense 脚本可以合并任何数量的 Qlik Sense 应用程序数据。这使在一个应用程序中合并不同企业单位的相似数据等成为可能。

  • 增量加载
  • 在许多常见情况下,QVD 功能可用于简化增量加载,通过独家从不断扩大的数据库中加载新记录。

创建 QVD 文件

可通过两种方法创建 QVD 文件:

  • Qlik Sense 脚本中使用 Store 命令可进行显式创建并命名。
  • 在脚本中说明要将先前读取的表格或其部分导出到您选定位置上的一个明确命名文件。

  • 从脚本中自动创建并维护。
  • 通过为 load 或 select 语句加入 Buffer 前缀,Qlik Sense 将自动创建 QVD 文件,但重新加载数据时需使用某些条件代替初始数据源。

在结果 QVD 文件之间没有不同,如在读取速度方面。

Store

该脚本创建显式命名的 QVDCSVtxt 文件。

Syntax:  

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

该语句仅会从一个数据表格中导出字段。如果要从多个表格中导出字段,必须明确命名之前在脚本中生成的联接以创建应导出的数据表。

文本值将以 UTF-8 格式导出至 CSV 文件。可以指定一个分隔符,请参阅 LOAD。store 语句不支持将 BIFF 导出至 CSV 文件。

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. 将以下内容添加至脚本的末尾:
  4. 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);

  5. 单击加载数据
  6. Product.qvd 文件现在将会出现在文件列表中。

    此数据文件是 Crosstable 脚本的结果且也是一个包含三列的表格,每个类别都拥有一列 (Product, Month, Sales)。此数据文件现在可用于替换整个 Product 脚本部分。

QVD 文件读取数据

可以通过以下方法由 Qlik Sense 读入或访问 QVD 文件:

  • 加载 QVD 文件作为显式数据源。QVD 文件可由 Qlik Sense 脚本中的 load 语句引用,与任何其他类型的文本文件一样(csvfixdifbiff 等)。
  • 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 文件。当在 load 或 select 语句上使用 buffer 前缀时,无需明确说明读取的语句。Qlik Sense 将自行确定使用 QVD 文件数据的程度这一点同通过原始 LOADSELECT 语句获取数据相反。
  • 通过脚本访问 QVD 文件。许多脚本函数(都以 QVD 开头)都可用于检索在 QVD 文件的 XML 标题中发现的数据的不同信息。

执行以下操作:

  1. Product 脚本段中注释掉整个脚本。
  2. 输入以下脚本:
  3. Load * from [lib://DataFiles/ProductData.qvd](qvd); 

  4. 单击加载数据
  5. 将数据从 QVD 文件加载。

    数据加载进度窗口
    Data load progress window.

信息注释要了解有关将 QVD 文件用于增量加载的信息,请参阅Qlik Community中的该文章:Qlik 增量加载的概览

Buffer

QVD 文件可通过 Buffer 前缀自动创建和维护。该前缀可用于脚本中大多数 LOADSELECT 语句。这表示 QVD 文件可用于缓存/缓冲该语句产生的结果。

Syntax:  

Buffer [ (option [ , option])] ( loadstatement | selectstatement ) option::= incremental | stale [after] amount [(days | hours)]

如果未使用任何选项,则首次执行脚本时创建的 QVD 缓冲将无限期使用。

Example:  

Buffer load * from MyTable;

stale [after] amount [(days | hours)]

Amount 即指定时间周期的数字。可能要使用 Decimals。如果省略,则假定单位为天数。

stale after 选项通常与数据库源一起使用,数据库源在初始数据上并无简单的时间戳。stale after 子句仅陈述自 QVD 缓冲创建时间计起的时间周期,此后其即被视为无效。QVD 缓冲在此之前会被用作数据源,在此之后则使用原始数据源。QVD 缓冲文件随后会自动更新,同时新周期开始。

Example:  

Buffer (stale after 7 days) load * from MyTable;

Incremental

incremental 选项可实现仅读取基础文件的一部分。文件先前大小存储在 QVD 文件中的 XML 标题中。这对日志文件特别有用。上一步载入的全部记录都可从 QVD 文件读取,而后续新记录可从原始数据源读取,这样就可创建一个更新的 QVD 文件。

注意,incremental 选项只能与 LOAD 语句和文本文件,以及旧数据发生更改或被删除而导致无法使用增量加载的地方。

Example:  

Buffer (incremental) LOAD * from MyLog.log;

QVD 缓冲通常在创建脚本的应用程序内整个脚本执行过程不再引用时移除,或者在创建脚本的应用程序不再存在时移除。如果您希望保留缓冲区的内容作为 QVDCSV 文件,则应使用 Store 语句。

执行以下操作:

  1. 创建一个新应用程序并为其指定一个名称。
  2. 数据加载编辑器中新增脚本段。
  3. 在右菜单的 DataFiles 下,单击选择数据

  4. 上传然后选择 Cutlery.xlsx
  5. 选择数据自窗口中,单击插入脚本
  6. 注释掉 load 语句中的字段,并将 load 语句更改为以下内容:
  7. Buffer LOAD *

    您的脚本应如下所示:

    Buffer LOAD * // "date", // item, // quantity FROM [lib://DataFiles/Cutlery.xlsx] (ooxml, embedded labels, table is Sheet1);

  8. 单击加载数据
  9. 第一次加载数据时,将从 Cutlery.xlsx 进行加载。

    数据加载进度窗口
    Data load progress window.

    Buffer 语句还创建 QVD 文件并将其存储在 Qlik Sense 中。在云部署中,它存储在云中的目录中。

  10. 再次单击加载数据
  11. 这次是从第一次加载数据时由 Buffer 语句创建的 QVD 文件中加载数据。
  12. 数据加载进度窗口
    Data load progress window.

谢谢!

现在,您已完成本教程的学习,希望您已获得有关 Qlik Sense 的脚本编译的更多知识。请访问我们的网站,了解有关提供进一步培训的更多信息。