Load
LOAD 语句可以加载以下来源的字段:文件、脚本中定义的数据、预先载入的输入表格、网页、后续 SELECT 语句产生的结果或自动生成的数据。还可从分析连接加载数据。
语法:
LOAD [ distinct ] fieldlist
[( from file [ format-spec ] |
from_field fieldassource [format-spec]|
inline data [ format-spec ] |
resident table-label |
autogenerate size ) |extension pluginname.functionname([script] tabledescription)]
[
where criterion | while criterion
]
[
group by groupbyfieldlist
]
[order by orderbyfieldlist ]
参数distinct | 如果您只希望加载唯一的记录,您可将 distinct 用作谓语。如果存在重复的记录,则将加载第一个实例。 如果您使用前置 Load,需要将 distinct 置于第一加载语句,因为 distinct 仅影响目标表格。 前置 Load |
fieldlist | fieldlist ::= ( * | field{, * | field } ) 要加载的字段列表。使用 * 作为字段列表,表示表格中全部字段。 field ::= ( fieldref | expression ) [as aliasname ]字段定义必须总是包含精确的对现存字段或表达式的引用。 fieldref ::= ( fieldname |@fieldnumber |@startpos:endpos [ I | U | R | B | T] )fieldname 是指与表格中的字段名完全相同的文本。注意,如果包含空格,则字段名必须使用双引号或方括号括起来。有时字段名不会显示可用。这时使用另外的符号: @fieldnumber 表示字段数字在带分隔符的表格文件中。它必须是前面带“@”的正整数。编号通常从 1 开始至字段数字。 @startpos:endpos 代表在拥有固定长度记录的文件中字段的开始和结束位置。这两个位置必须都是正整数。这两个数字前都必须加上“@”并用冒号隔开。编号通常从 1 开始至位置数字。在最后一个字段中,将 n 用作结束位置。 - 如果 @startpos:endpos 后紧随字符 I 或U,字节读取将分别解释为二进制带符号 (I) 或不带符号 (U) 整数(Intel 字节序)。数字读取位置必须是 1,2 或 4。
- 如果 @startpos:endpos 后紧随字符 R,字节读取将解释成二进制实数(IEEE 32-bit 或 64 位浮点)。数字读取位置必须是4 或 8。
- 如果 @startpos:endpos 后紧随字符 B,字节读取将根据 COMP-3 标准解释成 BCD (Binary Coded Decimal) 数字。任何字节数可以是指定的。
expression 可以是数学函数或基于同一表格中一个或多个其他字段的字符串函数。有关详细信息,请参阅表达式的语法。 as 用于为字段设定新名称。 |
from | 如果使用文件夹从文件加载数据,可使用 from。 从 Qlik Cloud 分析 空间中的文件加载时,必须使用有效路径。请参阅有效空间文件夹路径的规则。 file ::= [ path ] filename 在Qlik Cloud 分析 中,支持分层文件夹结构,可以在语句中引用。 示例: 个人空间(顶级路径): [lib://DataFiles/abc.qvd] 个人空间(嵌套文件夹): [lib://DataFiles/MyFolder/abc.qvd] 共享空间(顶级路径): [lib://TeamSharedSpace:DataFiles/xyz.qvd] 共享空间(嵌套文件夹): [lib://TeamSharedSpace:DataFiles/MyFolder/abc.qvd]
有关更多信息和示例,请参阅从 Qlik Cloud 分析 中的空间加载文件。 |
from_field | 如果需要从之前加载的字段加载数据,则使用 from_field 语句。 fieldassource::=(tablename, fieldname) 该字段是之前加载过的 tablename 和 fieldname 的名称。 format-spec ::= ( fspec-item {, fspec-item } )格式规格包含数个格式规格项目的列表(在括号中)。有关更多信息,请参阅格式规格项目。 信息注释from_field 在分隔表中的字段时,仅支持将逗号作为列表分隔符。 |
inline | inline 当数据需要输入脚本而不是从文件中加载时使用该符号。 data ::= [ text ] 通过 inline 子句输入的数据必须用特定字符括起来 - 方括号、引号或反引号。括号之间的文本以同一方式被解释为文件的内容。因此,当您需要在文本文件中插入新的一行时,您应该在 inline 子句文本中重复该操作:键入脚本时按压输入键。 在简单的内联加载中,列的数量由第一行定义。 format-spec ::= ( fspec-item {, fspec-item } )您可以使用许多可用于其他已加载表的相同格式规范项来自定义内联加载。括号中列出了这些项目。有关更多信息,请参阅格式规格项目。 有关内联加载的详细信息,请参阅使用内联加载来加载数据。 |
resident | 如果需要从之前加载的表格加载数据,则使用 resident 语句。 table label 是加在创建于原始表格的 LOAD 或 SELECT 语句之前的标签。该标签需要在末尾加上冒号。 从之前加载的表格中加载数据 表格标签 |
autogenerate | autogenerate 是数据需要 Qlik Sense 自动生成时使用。 size ::= number Number 是用来指示生成记录数字的整数。 字段列表不得包含需要外部数据源或之前加载表格中数据的表达式,除非您引用之前使用 Peek 函数加载的表格中的单个字段值。 |
where | where 是一个子句,用于陈述一个记录是否应该包括在选择项内。如果 criterion 为 True,则将其包括在选择项内。 criterion 是一个逻辑表达式。 |
while | while 是用于显示记录是否应该反复读取的子句。只要 criterion 为 True,则同一记录被读取。为了能发挥作用,while 子句通常应包含 IterNo( ) 函数。 criterion 是一个逻辑表达式。 |
group by | group by 是用于定义应聚合(组合)的字段的子句。 聚合字段应该以某种方式包含在加载表达式中。除了聚合字段没有其他字段可被用于加载表达式中的聚合函数之外。 groupbyfieldlist ::= (fieldname { ,fieldname } ) |
order by | order by 是用于被加于 load 语句之前的驻留表记录排序的子句。驻留表可以被一个或多个字段以升序或降序的顺序排序。排序主要由数值决定,其次由国家校对顺序决定。此子句仅在数据源为驻留表时可用。 排序字段用于指定驻留表按哪些字段排序。驻留表中的字段可以由其名称或其数字指定(第一个字段为 1)。 orderbyfieldlist ::= fieldname [ sortorder ] { , fieldname [ sortorder ] } sortorder 要么是 asc(对于升序),要么是 desc(对于降序)。如果未指定任何 sortorder,将假设 asc。 fieldname、path、filename 和 aliasname 都是表示他们各自名称的字符串。源表格中的任何字段都可用作 fieldname。但是,通过子句 (aliasname) 创建的字段不在此范围之内,且不能用于相同的 load 语句内。 |
如果 from、inline、resident、 from_field、extension或 autogenerate 子句都无法给出数据源,则数据将从 SELECT 或 LOAD 语句随后得出的结果中加载。接下来的语句不应包含前缀。
从之前加载的表格中加载数据
信息注释DataFiles 连接的文件扩展要区分大小写。例如:.qvd。
示例:
仅从分隔符分隔的文件加载三个特定字段:
LOAD FirstName, LastName, Number from [lib://DataFiles/data1.csv];
加载没有标签的文件时,将第一个字段重命名为 A,将第二个字段重命名为 B:
LOAD @1 as A, @2 as B from [lib://DataFiles/data3.txt] (ansi,
txt, delimiter is '\t', no labels);
以 FirstName、空格字符和 LastName 的串联形式加载 Name:
LOAD FirstName&' '&LastName as Name
from [lib://DataFiles/data1.csv];
加载 Quantity、Price 和 Value(有 Quantity 和 Price 的产品):
LOAD Quantity, Price, Quantity*Price as Value
from [lib://DataFiles/data1.csv];
仅加载唯一记录,重复记录会被丢弃:
LOAD distinct FirstName, LastName, Number from [lib://DataFiles/data1.csv];
仅加载字段 Litres 值大于零的记录:
LOAD * from [lib://DataFiles/Consumption.csv] where Litres>0;
加载一个包含内联数据的表格、两个名为 CatID 和 Category 的字段:
LOAD * Inline
[CatID, Category
0,Regular
1,Occasional
2,Permanent];
加载一个包含内联数据的表格、三个名为 UserID、Password 和 Access 的字段:
LOAD * Inline [UserID, Password, Access
A, ABC456, User
B, VIP789, Admin];
加载一个有 10000 行的表格。字段 A 将包含读取记录 (1,2,3,4,5...) 的数量,字段 B 将包含一个介于 0 和 1 之间的随机数字:
LOAD RecNo( ) as A, rand( ) as B autogenerate(10000);
信息注释autogenerate 后的括号虽允许使用,但不是必须的。
首先,加载一个分隔符分隔的表格文件,并将其命名为 tab1:
tab1:
SELECT A,B,C,D from [lib://DataFiles/data1.csv];
从已加载的 tab1 表格中加载字段作为 tab2:
tab2:
LOAD A,B,month(C),A*B+D as E resident tab1;
从已加载的 tab1 表格中加载字段,但仅加载 A 大于 B 的记录:
tab3:
LOAD A,A+B+C resident tab1 where A>B;
从已加载的 tab1 表格中加载按 A 排序的字段:
LOAD A,B*C as E resident tab1 order by A;
从已加载的 tab1 表格中加载先按第一个字段,然后按第二个字段排序的字段:
LOAD A,B*C as E resident tab1 order by 1,2;
从已加载的 tab1 表格中加载依次按 C 降序,B 升序,第一个字段降序排序的字段:
LOAD A,B*C as E resident
tab1 order by C desc, B asc, 1 desc;
从之前加载的表格 Characters 中加载字段 Types 作为 A:
LOAD A from_field (Characters,
Types);
从随后的 SELECT 语句中加载的 Table1 加载 A、B 以及已计算字段 X 和 Y:
LOAD A, B, if(C>0,'positive','negative')
as X, weekday(D) as Y;
SELECT A,B,C,D from Table1;
加载按 ArtNo 分组(聚合)的字段:
LOAD ArtNo, round(Sum(TransAmount),0.05) as
ArtNoTotal from table.csv group by ArtNo;
加载按 Week 和 ArtNo 分组(聚合)的字段:
LOAD Week, ArtNo, round(Avg(TransAmount),0.05)
as WeekArtNoAverages from table.csv group by Week, ArtNo;
在本例中,输入文件 Grades.csv 包含合并在一个字段中的每个学生的分数:
Student,Grades
Mike,5234
John,3345
Pete,1234
Paul,3352
分数(1-5 分)分别代表科目 Math、English、Science 和 History。通过使用 while 子句(使用 IterNo( ) 函数作为一个计数器)多次读取每一条记录,我们可以将分数划分为单独的值。在每一次读取中,分数使用 Mid 函数进行提取,使用 Grade 进行存储,而科目则使用 pick 函数进行选择,使用 Subject 进行存储。最后一个 while 子句包含检查是否所有分数均已读取的测试(本例中每个学生四个分数),这表示应该读取下一个学生记录。
MyTab:
LOAD
Student,
mid(Grades,IterNo(
),1) as Grade,
pick(IterNo(
), 'Math', 'English', 'Science', 'History') as Subject from [lib://DataFiles/Grades.csv]
while IsNum(mid(Grades,IterNo(),1));
结果是包含以下数据的表格:
使用了以下示例数据。
Values:
Load
Rand() as A,
Rand() as B,
Rand() as C
AutoGenerate(50);
使用函数加载数据
在这些实例中,我们假设具有名为 P 的分析连接插件,该插件包含自定义函数 Calculate(Parameter1, Parameter2)。函数返回表格 Results,该表格包含字段 Field1 和 Field2。
Load * Extension P.Calculate( Values{A, C} );
加载将字段 A 和 C 发送至函数时返回的所有字段。
Load Field1 Extension P.Calculate( Values{A, C} );
当把字段 A 和 C 发送至函数时仅加载 Field1 字段。
Load * Extension P.Calculate( Values );
加载将字段 A 和 B 发送至函数时返回的所有字段。由于未指定字段,在表格中以第一顺序使用 A 和 B。
Load * Extension P.Calculate( Values {C, C});
加载将字段 C 发送至函数的两个参数时返回的所有字段。
Load * Extension P.Calculate( Values {String(A), Mixed(B)});
加载将强制规定为字符串的字段 A 和强制规定为数字的 B 发送至函数时返回的所有字段。
通过运算脚本来加载数据
Load A as A_echo, B as B_echo Extension R.ScriptEval( 'q;', Values{A, B} );
加载发送 A 和 B 的值时由脚本 q 返回的表格。
Load * Extension R.ScriptEval( '$(My_R_Script)', Values{A, B} );
加载发送 A 和 B 的值时由 My_R_Script 变量中存储的脚本返回的表格。
Load * Extension R.ScriptEval( '$(My_R_Script)', Values{B as D, *} );
加载发送重命名为 D、A、C 的 B 的值时由 My_R_Script 变量中存储的脚本返回的表格。使用 * 发送剩余未参考的字段。
从 Qlik Cloud 分析 中的空间加载文件
在 Qlik Cloud 分析 中,当加载脚本中从数据文件加载数据时,可以使用 LOAD 语句或插入 QVS 代码。在这两种情况下,都可以在脚本语句中引用分层空间文件夹结构。遵循有效空间文件夹路径的规则。此外,文件和所有引用的文件夹需要已存在于指定位置。否则,重新加载失败。
示例: 引用空间顶级路径中的文件
此示例从个人空间加载文件 orders.csv。该文件不位于任何特定文件夹中,而是位于空间中的顶级路径。
LOAD * FROM [lib://DataFiles/orders.csv];
此示例从共享、托管或数据空间加载文件 orders.csv。空间的名称为 TeamSharedSpace。该文件不位于任何特定文件夹中,而是位于空间中的顶级路径。
LOAD * FROM [lib://TeamSharedSpace:DataFiles/orders.csv];
示例: 对空间内特定文件夹路径的引用
此示例从个人空间中的文件夹 Orders By Region 加载文件 orders_Europe.csv。
LOAD * FROM [lib://DataFiles/Orders By Region/orders_Europe.csv];
此示例从共享、托管或数据空间中的文件夹 Orders By Region 加载文件 orders_Europe.csv。空间的名称为 SalesSpace。
LOAD * FROM [lib://SalesSpace:DataFiles/Orders By Region/orders_Europe.csv];
有关在加载脚本中引用空间文件夹结构的详细信息,请参阅在应用程序和脚本开发中引用空间文件夹结构。