Store
Store 语句创建 QVD、Parquet、CSV 或 TXT 文件。
语法:
Store [ fieldlist from] table into filename [ format-spec ];
该语句将创建一个明确命名的 QVD、Parquet 或文本文件。
该语句仅会从一个数据表格中导出字段,除非您正存储到 Parquet。如果要从多个表格中导出字段为 QVD、CSV 或 TXT 文件,必须明确命名之前在脚本中生成的 join 以创建应导出的数据表。通过在 Parquet 文件中嵌套数据,可以将多个表存储在一个 Parquet 中。
文本值将在 UTF-8 中以 BOM 格式导出至 CSV 文件。可以指定一个分隔符,请参阅 LOAD。store 语句不支持将 CSV 导出至 BIFF 文件。
您可指定将自己的文件存储在个人空间还是有写入权限的共享空间。如果存储在共享空间,成员可使用该数据以在空间中创建应用程序。参阅:管理共享空间中的权限。
参数:
参数 | 说明 |
---|---|
fieldlist::= ( * | field) { , field } ) |
要选择的字段列表。使用 * 作为字段列表,则其表示全部字段。 field::= fieldname [as aliasname ] fieldname是指与table中的字段名完全相同的文本。(请注意,如果字段名包含空格或其他非标准字符,则必须使用双引号或方括号括起来。) aliasname 是指生成的 QVD 或 CSV 文件中所用字段的替代名称。 |
table | 脚本标签表示要用作数据源的已加载表格。 |
filename |
目标文件的名称,包括现有文件夹数据连接的有效路径。关于什么可被认为是有效路径的细节,请参阅有效空间文件夹路径的规则 。 在Qlik Cloud 分析 中,支持分层文件夹结构,可以在语句中引用。 示例:
有关更多信息和示例,请参阅将文件存储到 Qlik Cloud 分析 中的空间。 |
format-spec ::=( ( txt | qvd | parquet),压缩为编码解码器) |
您可以将格式规范设置为这些文件格式之一。如果省略格式规范,则假定为 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 是一种强类型文件格式,其中每个字段都包含一种特定类型的数据(如 32、double、timestamp 或 text)。Qlik Sense 将内部数据存储为松散类型的 dual 数据,其中来自不同源的数据可以混合到相同的字段中。由于 Parquet 中的每个字段中只能存储 dual 数据的一部分,因此了解每个字段包含的内容很重要。默认情况下,Qlik Sense 使用字段类型来确定字段的存储方式。以特定格式将数据存储在 Parquet 文件中时,必须指定加载字段时的数据类型。如果您试图将数据存储到 Parquet 文件中不兼容的字段中,例如文本字段中的数字或时间戳字段中的文本,则最终会得到 null 值。
加载要存储在 Parquet 中的数据时,可以更改默认行为。您可以格式化它以更改数据类型,也可以标记它以强制执行 Parquet 中的特定列类型。
格式化数据以存储在 Parquet 中
您可以使用 Qlik Sense 格式化功能对数据进行分类。例如, Text()、Num()、Interval() 或 Timestamp() 可以在 Parquet 中存储数据时强制执行数据格式。Qlik Sense 可以根据字段属性和自动字段标签将数据存储为近 20 种数据类型。有关更多信息,请参阅解释函数。
示例: 使用 Num() 和 Text() 进行格式设定
以下示例演示了准备数据以存储在 Parquet 中。Num() 应用于 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 标记对数据进行标记,以强制使用特定的列类型。每种数据类型都可以通过添加相应的控制标签来强制执行。例如,要在 Parquet 中将字段存储为 INT32,请在加载脚本中将其标记为 $parquet-int32。根据数据类型,将存储字符串或 dual 数据的数字表示。
以下 Parqout 控制标记可用于标记存储在 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 中
在本例中,使用了两个标记来定义 Parquet 的数据。该字段 num 被标记为 $parquet-int32,以将其定义为一个数字字段,该字段将在 Parquet 中设置为 INT32。
将嵌套数据存储在 Parquet 文件中
通过将多个表嵌套到结构化数据中,可以将它们存储在一个 Parquet 文件中。Store 支持星形模式中的结构化节点和列表节点。也可以使用分隔符为说明符以嵌套模式存储单个表。
存储表时,请指定要包含的表,用逗号分隔。例如: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 或使用说明符分隔符为来更改分隔符。说明符将覆盖系统变量。有关更多信息,请参阅在数据加载编辑器中使用变量。
字段名由分隔符分隔,这些部分用于创建具有嵌套组的架构。例如,STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); 将创建两个组(Group1 和 Group2),其中具有 Fields1、Field2 和 Field3、Field4。
在 Parquet 中存储嵌套数据时,表之间的键将转换为模式中的链接节点。表被转换为模式中的结构化节点。可以使用字段名称覆盖默认转换。
示例: 将嵌套数据存储在 Parquet 文件中
生成的 Parquet 文件具有以下架构:
限制
在 Parquet 中存储嵌套数据有以下限制:
存储不支持映射节点。
存储不包括加载嵌套 parquet 文件而生成的关键字段。
不能将未与键字段链接的表中的数据存储在一起。
嵌套文件将取消数据模型的规范化。未引用的值将不会被保存,多次引用的值也将被复制。
将文件存储到 Qlik Cloud 分析 中的空间
在 Qlik Cloud 中的加载脚本中使用 Store 语句时,可以在要存储创建的文件的空间中引用确切的文件夹。遵循有效空间文件夹路径的规则。此外,以下行为也适用于 Store 语句,并且是该语句所特有的:
如果空间存在,但指定的文件夹路径不存在,则将在空间中创建路径。根据定义的文件夹结构,可能会创建一个或多个文件夹。文件在该处生成并存储。
如果空间存在,但指定的文件夹路径使用了无效的文件夹分隔符(例如 \、\\、//、/./ 或 /../),则仍将执行 Store 语句。输出文件将保存在目标空间的顶级路径,其名称将包含其完整路径,而不仅仅是指定的名称。
如果控件不存在,则无法执行 Store 语句并返回错误。
以下示例演示了如何在 Store 语句中引用空间中的特定文件夹路径。
示例: 将文件存储在空间的顶级路径
在这个例子中,整个表 mytable 作为名为 myfile.qvd 的文件被导出至 Qlik Cloud 分析。文件将添加到共享空间 TeamSharedSpace。该文件不位于任何特定文件夹中,而是位于空间中的顶级路径。
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
示例: 将文件存储到空间内的特定文件夹路径
在这个例子中,整个表 mytable 作为名为 myfile.qvd 的文件被导出至 Qlik Cloud 分析。文件添加到空间 TeamSharedSpace 内的文件夹 SalesData 中。
Store * from mytable into [lib://TeamSharedSpace:DataFiles/SalesData/myfile.qvd];
有关在加载脚本中引用空间文件夹结构的详细信息,请参阅在应用程序和脚本开发中引用空间文件夹结构。