Store
Store 语句创建 QVD、Parquet、CSV 或 TXT 文件。
语法:
Store [ fieldlist from] table into filename [ format-spec ];
该语句将创建一个明确命名的 QVD、Parquet 或文本文件。
该语句仅会从一个数据表格中导出字段。如果要从多个表格中导出字段,必须明确命名之前在脚本中生成的 join 以创建应导出的数据表。
文本值将以 UTF-8 格式导出至 CSV 文件。可以指定一个分隔符,请参阅 LOAD。store 语句不支持将 CSV 导出至 BIFF 文件。
参数:
参数 | 说明 |
---|---|
fieldlist::= ( * | field) { , field } ) |
要选择的字段列表。使用 * 作为字段列表,则其表示全部字段。 field::= fieldname [as aliasname ] fieldname是指与table中的字段名完全相同的文本。(请注意,如果字段名包含空格或其他非标准字符,则必须使用双引号或方括号括起来。) aliasname 是指生成的 QVD 或 CSV 文件中所用字段的替代名称。 |
table | 脚本标签表示要用作数据源的已加载表格。 |
filename |
目标文件的名称,包括现有文件夹数据连接的有效路径。 示例: 'lib://Table Files/target.qvd' 在传统脚本模式下,同时支持以下路径格式:
|
format-spec ::=( ( txt | qvd | parquet),压缩为编码解码器) |
您可以将格式规范设置为这些文件格式之一。如果省略格式规范,则假定为 qvd。
如果使用 parquet,还可以设置用于压缩为的压缩编解码器。如果不是用压缩为指定压缩编解码器,则使用 snappy。有以下压缩设置可用:
示例: Store mytable into [lib://DataFiles/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 myfile.parquet (parquet);
Store * from mytable into 'lib://FolderConnection/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。