跳到主要內容 跳至補充內容

Store

Store 陳述式建立 QVDParquetCSVTXT 檔案。

語法:  

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

該陳述式將建立明確命名的 QVDParquet 或文字檔案。

陳述式只能從一個資料表格匯出欄位,除非您儲存至 Parquet。如果要將數個表格中的欄位匯出至 QVD、CSV 或 TXT 檔案,則必須在指令碼中提前進行明確 join,以建立應該匯出的資料表格。您可以在 Parquet 檔案中內嵌資料,以在單一 Parquet 中儲存多個表格。

文字值會以 BOM 格式匯出到 UTF-8 中的 CSV 檔案中。可指定分隔符號,請參閱 LOAD。在 CSV 檔案中使用 store 陳述式不支援 BIFF 匯出。

資訊備註在某些資料格式不正確的情況下,將會以雙引號括起欄位,以確保正確解譯資料。例如,若欄位包含引號、逗號、空格或分行符號等字元,就可能發生此情況。

引數:  

儲存命令引數
引數 描述
fieldlist::= ( * | field) { , field } )

要選取的欄位清單。使用 * 做為欄位清單表示所有欄位。 

field::= fieldname [as aliasname ]

fieldname 是與 table 中欄位名稱相同的文字。(請注意,欄位名稱如果包含空格或其他非標準字元,則必須以一般雙引號或方括弧括住。)

aliasname 是在所產生 QVDCSV 檔案中要使用之欄位的替代名稱。

table 代表已經載入的表格 (用作資料來源) 的指令碼標籤。
filename

包括通向現有資料夾資料連線的有效路徑的目標檔案的名稱。

範例: 'lib://Table Files/target.qvd'

在舊式指令碼模式下,還支援下列路徑格式:

  • 絕對路徑

    範例: c:\data\sales.qvd

  • Qlik Sense 應用程式工作目錄相關。

    範例: data\sales.qvd

    如果省略路徑,Qlik Sense 將在 Directory 陳述式指定的目錄中儲存該檔案。如果沒有 Directory 陳述式,則 Qlik Sense 會在工作目錄 (C:\Users\{user}\Documents\Qlik\Sense\Apps) 中儲存該檔案。

format-spec ::=( ( txt | qvd | parquet),compression is 轉碼器)

您可以將格式規格設定為其中任一個檔案格式。若省略格式規格,會採用 qvd

  • CSVTXT 檔案的 txt

  • qvd 適用於 QVD 檔案。

  • parquet 適用於 Parquet 檔案。

若您使用 parquet,您也可以設定要搭配 compression is 使用哪個壓縮轉碼器。若您沒有透過 compression is 指定壓縮轉碼器,則會使用 snappy。提供下列壓縮設定:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

範例:

Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4);

範例:

Store mytable into xyz.qvd (qvd);

Store * from mytable into 'lib://FolderConnection/myfile.qvd';

Store Name, RegNo from mytable into xyz.qvd;

Store Name as a, RegNo as b from mytable into 'lib://FolderConnection/myfile.qvd';

Store mytable into myfile.txt (txt);

Store mytable into [lib://FolderConnection/myfile.csv] (txt);

Store mytable into myfile.parquet (parquet);

Store * from mytable into 'lib://FolderConnection/myfile.qvd';

儲存在 Parquet 檔案中

Parquet 是強力輸入的檔案格式,其中每個欄位包含單一特定資料類型 (例如 in32、雙重、時間戳記或文字)。Qlik Sense 將內部資料儲存為鬆散輸入的雙重內容,其中來自不同來源的資料可以混合到相同的欄位中。由於 Parquet 的每個欄位中只能儲存一個雙重部分,知道每個欄位包含的內容很重要。依照預設,Qlik Sense 使用欄位類型決定應如何儲存欄位。以特定格式在 Parquet 檔案中儲存資料時,您必須指定欄位在載入時是什麼資料類型。若您嘗試以 Parquet 檔案將資料儲存到不相容的欄位中,例如在文字欄位中儲存數字或在時間戳記欄位中儲存文字,結果會是 Null 值。

載入您打算以 Parquet 儲存的資料時,可以變更預設行為。您可以格式化以變更資料類型,或標記以在 Parquet 強制特定欄類型。

格式化資料以儲存於 Parquet

您可以使用 Qlik Sense 格式化功能以分類資料。例如,Text()Num()Interval()Timestamp() 可以在以 Parquet 儲存資料時強制資料格式。Qlik Sense 可以將資料儲存到將近 20 個資料類型,視欄位屬性和自動欄位標記而定。如需詳細資訊,請參閱解譯函數

範例: Num()Text() 格式化資料

下列範例展示準備資料以儲存於 Parquet。Num() 套用至數字欄位。Text() 套用至文字和混合欄位。在混合情況下,Text() 可防止像 Parquet 中的數字欄位那樣來處理,並有變更為 Null 值的文字值。

Data: LOAD * INLINE [ num, text, mixed 123.321, abc, 123 456.654, def, xyz 789.987, ghi, 321 ]; Format:
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);

標記資料以儲存於 Parquet

您使用 $parquet 標記來標記資料,以便在以 Parquet 儲存資料時強制特定欄類型。新增對應的控制標記以強制每個資料類型。例如,若要在 Parquet 將欄位儲存為 INT32,在載入指令碼中以 $parquet-int32 標記。根據資料類型,將會儲存雙重資料的字串或數字呈現。

下列 Parquet 控制標記可用來標記欄位,以儲存於 Parquet 檔案。

Parquet 控制標記
控制標記雙值實際類型邏輯類型轉換類型
$parquet-boolean數字布林
$parquet-int32數字INT32
$parquet-int64數字INT64
$parquet-float數字浮動
$parquet-double數字雙重
$parquet-bytearray字串BYTE_ARRAYUTF8
$parquet-bytearrayfix數字FIXED_LEN_BYTE_ARRAY小數
$parquet-decimal數字INT64小數小數
$parquet-date數字INT32日期日期
$parquet-time數字INT64時間TIME_MICROS
$parquet-timestamp數字INT64時間戳記TIMESTAMP_MICROS
$parquet-string字串BYTE_ARRAY字串UTF8
$parquet-enum字串BYTE_ARRAYENUMENUM
$parquet-interval數字FIXED_LEN_BYTE_ARRAY間隔間隔
$parquet-json字串BYTE_ARRAYJSONJSON
$parquet-bson字串BYTE_ARRAYBSONBSON
$parquet-uuid字串FIXED_LEN_BYTE_ARRAYUUID

範例: 標記資料以儲存於 Parquet

在此範例中,兩個標記用來定義 Parquet 的資料。欄位 num$parquet-int32 標記,以定義為將會在 Parquet 設定為 INT32 的數字欄位。

Data: LOAD * INLINE [ num, text, 123.321, abc 456.654, def 789.987, ghi ]; TAG num WITH '$parquet-int32'; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);

Parquet 檔案中儲存巢狀資料

您可以將表格內嵌至結構化資料中,以在 Parquet 檔案中儲存多個表格。Store 支援結構化節點並以星狀結構描述列出節點。也可以使用 Delimiter is 說明符,以巢狀模式儲存單一表格。

儲存表格時,指定您要納入的表格並以逗號分隔。例如:STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);。您可以在 Store 陳述式使用欄位清單,以控制儲存哪些欄位。例如 STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);。欄位清單中的所有欄位必須位於一個或多個列出的表格。Store 陳述式中的第一個表格將會作為星狀結構描述中的事實資料表使用。

欄位名稱用來控制如何建立和內嵌群組。依照預設,欄位名稱會以句號 (.) 分為節點。可以設定系統變數 FieldNameDelimiter 或使用說明符 Delimiter is,以變更分隔符號。說明符將會覆寫系統變數。如需詳細資訊,請參閱 在資料載入編輯器中使用變數

欄位名稱透過分隔符號分割,部分用來透過巢狀群組建立結構描述。例如,STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); 將會透過 Fields1, Field2Field3, Field4 建立兩個群組 (Group1Group2)。

資訊備註群組和欄位在結構描述的節點中可能不會有相同的名稱。例如,STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); 將會因為地址模糊且同時為資料欄位和群組而失敗。

Parquet 儲存巢狀資料時,表格之間的金鑰會轉換為結構描述中的連結節點。表格會轉換為結構描述中的結構化節點。您可以使用欄位名稱覆寫預設轉換。

範例: Parquet 檔案中儲存巢狀資料

company: LOAD * INLINE [ company, contact A&G, Amanda Honda Cabro, Cary Frank Fenwick, Dennis Fisher Camros, Molly McKenzie ]; salesrep: LOAD * INLINE [ company, salesrep A&G, Bob Park Cabro, Cezar Sandu Fenwick, Ken Roberts Camros, Max Smith ]; headquarter: LOAD * INLINE [ company, country, city A&G, USA, Los Angeles Cabro, USA, Albuquerque Fenwick, USA, Baltimore Camros, USA, Omaha ]; region: LOAD * INLINE [ region, city West, Los Angeles Southwest, Albuquerque East, Baltimore Central, Omaha ]; STORE company, salesrep, headquarter, region INTO [lib://AttachedFiles/company.parquet] (parquet) DROP TABLES company, salesrep, headquarter, region;

產生的 Parquet 檔案有下列結構描述:

company (String) contact (String) company:salesrep (List) salesrep (Group) salesrep (String) company:headquarter (List) headquarter (Group) country (String) city (String) city:region (List) region (Group) region (String)

限制

Parquet 中儲存巢狀資料有下列限制:

  • 儲存不支援地圖節點。

  • 儲存不包括從載入中的巢狀 parquet 檔案產生的索引鍵欄位。

  • 您無法從表格一同儲存未與索引鍵欄位連結的資料。

  • 巢狀檔案反正規化資料模型。不會儲存非參考的值,將會複製參考多次的值。

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!