跳到主要內容

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 檔案而不使用原始資料來源。

在讀取速度方面,產生的 QVD 檔案之間不會有任何差異。

Store

此指令碼函數可建立明確命名的 QVDCSVtxt 檔案。

語法:  

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

陳述式只能從一個資料表格匯出欄位。如果要匯出數個表格中的欄位,則必須在指令碼中提前加入明確的 join 前置詞,以建立應該匯出的資料表格。

文字值會以 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. 將下列內容新增至指令碼結尾:
  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 檔案載入。

    資料載入進度視窗

    資料載入進度視窗。
資訊備註若要瞭解關於使用 QVD 檔案進行累加載入的資訊,請參閱 Qlik Community 中的此篇部落格貼文:Qlik 累加載入概述

Buffer

透過 Buffer 前置詞可以自動建立和維護 QVD 檔案。這個前置詞可以用於指令碼的大多數 LOADSELECT 陳述式。其表示 QVD 檔案會用於快取/緩衝陳述式的結果。

語法:  

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

如果不使用任何選項,則指令碼第一次執行所建立的 QVD 緩衝區就無使用期限。

範例:  

Buffer load * from MyTable;

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

Amount 是指定時間週期的數字。可能會使用 Decimals。如果未指定單位,一律假設單位為天數。

stale after 選項一般會用於其中原始資料沒有簡單時間戳記的資料庫來源。stale after 子句只是陳述從建立 QVD 緩衝區之後經過多久才會失效的時間週期。在這段時間之前,將使用 QVD 緩衝區做為資料的來源,過了這段時間之後,則將使用原始資料來源。此後 QVD 緩衝區檔案將自動更新,並且重啟新的週期。

範例:  

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

Incremental

incremental 選項能夠唯讀基礎檔案的一部分。先前的檔案大小儲存於 QVD 檔案的 XML 標頭中。這特別適用於記錄檔。先前載入的所有記錄都是從 QVD 檔案讀取的,而後續的新記錄則是從原始來源讀取的,最後會建立更新的 QVD 檔案。

請注意,incremental 選項只能用於 LOAD 陳述式和文字檔,只要變更或刪除舊檔案,就無法使用累加載入。

範例:  

Buffer (incremental) load * from MyLog.log;

建立 QVD 緩衝區的應用程式之中的完整指令碼執行完全不再參考該緩衝區時,或者建立該緩衝區的應用程式不再存在時,一般都會移除該緩衝區。如果您想將緩衝區的內容保留為 QVDCSV 檔案,應使用 Store 陳述式。

  1. 建立新的應用程式並命名。
  2. 資料載入編輯器中新增新的指令碼區段。
  3. 在右側功能表的 DataFiles 之下,按一下選取資料

  4. 上傳然後選取 Cutlery.xlsx
  5. 從以下項目選取資料視窗中,按一下插入指令碼
  6. 註解載入陳述式中的欄位,並將載入陳述式變更為下列內容:
  7. Buffer LOAD *

    您的指令碼應如下所示:

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

  8. 按一下載入資料
  9. 首次載入資料時,會從 Cutlery.xlsx 載入。

    資料載入進度視窗

    資料載入進度視窗。

    Buffer 陳述式也會建立 QVD 檔案並儲存在 Qlik Sense在雲端部署中,這儲存在雲端中的目錄。

  10. 再次按一下載入資料
  11. 這次會從首次載入資料時透過 Buffer 陳述式建立的 QVD 檔案載入資料。
  12. 資料載入進度視窗

    資料載入進度視窗。

謝謝您!

現在,您已完成此教學課程,希望您已獲得有關 Qlik Sense 中指令碼的更多知識。請瀏覽我們的網站,瞭解更多培訓詳情。