Store
Store ステートメントは、QVD、Parquet、CSV、または TXT ファイルを作成します。
構文:
Store [ fieldlist from] table into filename [ format-spec ];
このステートメントにより、明示的に命名された QVD、Parquet、またはテキスト ファイルが作成されます。
Parquet に保存する場合を除き、ステートメントは 1 つのデータ テーブルからのみ項目をエクスポートできます。複数のテーブルの項目を QVD、CSV、または TXT ファイルにエクスポートする場合は、エクスポートするデータ テーブルを作成するスクリプトで事前に明示的な join を作成する必要があります。Parquet ファイルにデータをネストすることで、複数のテーブルを 1 つの Parquet に保存できます。
テキスト値は、BOM 形式の UTF-8 で CSV ファイルにエクスポートされます。区切り文字を指定できます (LOAD を参照)。CSV ファイルへの store ステートメントでは、BIFF エクスポートを行えません。
自分のファイルの保存場所は、自分の個人スペースにするか、権限を持つ共有スペースにするかを選択できます。共有スペースに保存した場合、メンバーはそのデータを使用してスペース内にアプリを作成できます。「共有スペースでの権限の管理」を参照してください。
引数:
引数 | 説明 |
---|---|
fieldlist::= ( * | field) { , field } ) |
選択する項目のリスト。項目リストとして * を使用すると、すべての項目が指定されます。 field::= fieldname [as aliasname ] fieldname は、table の項目名と同じテキストです。(項目名にスペースや非標準的な文字などが含まれる場合、ストレート二重引用符または角括弧で囲む必要があります。) aliasname は、結果の QVD ファイルまたは CSV ファイルで使用される項目の別名です。 |
table | データ ソースとして使用するロード済みテーブルを表すスクリプト ラベル。 |
filename |
既存のフォルダ データ接続への有効なパスを含むターゲット ファイルの名前。 有効なパスの詳細については、「有効なスペース フォルダー パスのルール」を参照してください。 Qlik Cloud Analytics では、階層的なフォルダー構造がサポートされており、ステートメント内で参照できます。
詳細および例については、「Qlik Cloud Analytics のスペースにファイルを保存する」を参照してください。 |
format-spec ::=( ( txt | qvd | parquet), compression is codec) |
これらのファイル形式のいずれかに書式指定を設定できます。書式指定が省略されている場合は、qvd で処理されます。
parquet を使用する場合、[圧縮は] で使用する圧縮コーデックを設定することもできます。[圧縮は] で圧縮コーデックを指定しない場合、snappy が使用されます。次の圧縮設定を使用できます。
例: Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4); |
Store mytable into [lib://DataFiles/xyz.qvd];
Store * from mytable into [lib://DataFiles/myfile.qvd];
Store Name, RegNo from mytable into [lib://DataFiles/xyz.qvd];
Store Name as a, RegNo as b from mytable into [lib://DataFiles/myfile.qvd];
Store mytable into [lib://DataFiles/myfile.txt] (txt);
Store mytable into [lib://DataFiles/myfile.parquet] (parquet);
Store * from mytable into [lib://DataFiles/myfile.csv] (txt);
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
Parquet ファイルでの保存
Parquet は強く型付けされたファイル フォーマットで、各フィールドには特定のデータ型(in32、ダブル、日付と時刻、テキストなど)が 1 つずつ保存されます。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 値に変更されるのを防ぎます。
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);
Parquet に保存するためのデータのタグ付け
Parquet にデータを保存する際、特定の列タイプを強制的に指定する $parquet タグをデータに付けます。各データ型は、対応するコントロール タグを追加することで強制できます。例えば、項目を INT32 としてParquet に保存するには、ロード スクリプトで $parquet-int32 のタグを付けます。データ型によって、文字列か数値表現のどちらかのデュアル データが保存されます。
以下の Parqeut コントロール タグは、Parquet ファイルに保存する項目のタグ付けに使用できます。
コントロール タグ | デュアル | 物理型 | 論理型 | 変換型 |
---|---|---|---|---|
$parquet-boolean | 数値 | BOOLEAN | NONE | NONE |
$parquet-int32 | 数値 | INT32 | NONE | NONE |
$parquet-int64 | 数値 | INT64 | NONE | NONE |
$parquet-float | 数値 | FLOAT | NONE | NONE |
$parquet-double | 数値 | DOUBLE | NONE | NONE |
$parquet-bytearray | 文字列 | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | 数値 | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | 数値 | INT64 | DECIMAL | DECIMAL |
$parquet-date | 数値 | INT32 | DATE | DATE |
$parquet-time | 数値 | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | 数値 | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | 文字列 | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | 文字列 | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | 数値 | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | 文字列 | BYTE_ARRAY | JSON | JSON |
$parquet-bson | 文字列 | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | 文字列 | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Parquet に保存するためのデータのタグ付け
この例では、2 つのタグを使って Parquet 用のデータを定義しています。フィールド num は $parquet-int32 とタグ付けされ、Parquet では INT32 として設定される数値フィールドとして定義されます。
ネストされたデータを 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); 。項目リスト内のすべての項目は、リストされている 1 つ以上のテーブルに存在する必要があります。Store ステートメントにある最初のテーブルは、スター スキーマのファクト テーブルとして使用されます。
項目名は、グループを作成してネストする方法を制御するために使用されます。既定では、項目名はピリオド (.) を使用してノードに分割されます。区切り記号は、システム変数 FieldNameDelimiter を設定するか、指定子 [Delimiter is] を使用して変更できます。指定子はシステム変数を上書きします。詳細については、「データ ロード エディタでの変数の使用」を参照してください。
項目名は区切り記号によって分割され、それらの部分はネストされたグループを使用したスキーマを作成するために使用されます。例えば、STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); により 2 つのグループ (Group1 と Group2) が、Fields1、Field2 そして Field3、Field4 を使用して作成されます。
ネストされたデータを Parquet に保存すると、テーブル間のキーがスキーマのリンク ノードに変換されます。テーブルはスキーマの構造化ノードに変換されます。 項目名を使用して、既定の変換を上書きできます。
ネストされたデータを Parquet ファイルに保存する
結果の Parquet ファイルには次のスキーマが含まれます。
制限事項
ネストされたデータを Parquet に保存するには、次の制限があります。
ストアはマップ ノードをサポートしません。
保存には、ネストされた Parquet ファイルのロードによって生成されるキー項目は含まれません。
キー項目にリンクされていないテーブルのデータを一緒に保存することはできません。
ネストされたファイルはデータ モデルを非正規化します。参照されていない値は保存されず、複数回参照された値はコピーされます。
Qlik Cloud Analytics のスペースにファイルを保存する
Qlik Cloud のロード スクリプトで Store ステートメントを使用すると、作成されたファイルを保存するスペース内の正確なフォルダーを参照できます。有効なスペース フォルダー パスのルールに従ってください。さらに、Store ステートメントに固有の次の動作も適用されます。
スペースは存在するが、指定されたフォルダー パスが存在しない場合は、スペース内にパスが作成されます。定義されたフォルダー構造に応じて、1 つ以上のフォルダーが作成される場合があります。ファイルが生成され、そこに保存されます。
スペースは存在するが、指定されたフォルダー パスに無効なフォルダー区切り文字 (例: \、\\、//、/./、/../) が使用されている場合でも、Store ステートメントは実行されます。代わりに、出力ファイルはターゲット スペースのトップレベル パスに保存され、指定された名前だけでなく、完全なパスを含む名前が付けられます。
スペースが存在しない場合は、Store ステートメントは実行できず、エラーが返されます。
次の例は、Store ステートメント内のスペースで特定のフォルダー パスを参照する方法を示しています。
スペースのトップレベル パスにファイルを保存する
この例では、テーブル mytable 全体が myfile.qvd という名前のファイルとして Qlik Cloud Analytics にエクスポートされます。ファイルが共有スペース TeamSharedSpace に追加されます。ファイルは特定のフォルダー内ではなく、スペース内のトップレベル パスに配置されます。
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
スペース内の特定のフォルダー パスにファイルを保存する
この例では、テーブル mytable 全体が myfile.qvd という名前のファイルとして Qlik Cloud Analytics にエクスポートされます。ファイルは TeamSharedSpace というスペース内の SalesData というフォルダーに追加されます。
Store * from mytable into [lib://TeamSharedSpace:DataFiles/SalesData/myfile.qvd];
ロード スクリプトでスペース フォルダー構造を参照する方法の詳細については、「アプリおよびスクリプト開発におけるスペース フォルダー構造の参照」を参照してください。