跳到主要内容

Exists - 脚本函数

Exists() 用于确定是否已经将特定字段值加载到数据加载脚本中的字段。此函数用于返回 TRUEFALSE,这样它可以用于 LOAD 语句或 IF 语句中的 where 子句。

备注: 您也可使用 Not Exists() 来确定是否尚未加载字段值,但是如果要在 where 子句中使用 Not Exists(),建议您小心。Exists() 函数在当前表格中测试之前加载的表格和之前加载的值。因此,仅加载第一次出现的值。如果遇到第二次出现的值,值已经被加载。有关更多信息,请查看示例。

Syntax:  

Exists(field_name [, expr])

Return data type: 布尔值

Arguments:  

参数
参数 说明
field_name

您希望在其中搜索值的字段的名称。您可使用没有引号的确切字段名称。

字段必须已经由脚本加载。这意味着您无法在脚本中进一步往下引用在子句中加载的字段。

expr

您希望检查值是否存在。您可使用引用当前加载语句中一个或数个字段的确切值或表达式。

备注: 您无法引用未包含在当前加载语句中的字段。

该参数为可选。如果您忽略它,函数将检查当前记录中的 field_name 的值是否已存在。

示例中所使用的数据:

LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|');   Drop Tables Employees;

Example:  

Exists (Employee)

如果当前记录中的字段值 Employee 已存在于任何以前已读入的包含该字段的记录,则返回 -1 (True)。

语句 Exists (Employee, Employee)Exists (Employee) 功能相同。

Example:  

Exists(Employee, 'Bill')

如果在字段 Employee(员工)的当前内容中发现字段值 'Bill',则返回 -1 (True)。

Example:  

Employees:
LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where Exists (Employee);   Drop Tables Employees;

 

由此得到表格,您可在借助维度 Employee(员工)和 Address(地址)在表格可视化中使用该表格。

where 子句:where Exists (Employee),是指只能从表格 Citizens(市民)将同时位于 Employees(员工)中的姓名加载到新表格。Drop 语句删除表格 Employees(员工)以避免混淆。

结果
   
Employee Address
Bill New York
John Miami
Steve Chicago

Example:  

Employees: Load * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami22222222223
+0 ] (delimiter is '|') where not Exists (Employee);   Drop Tables Employees;

 

where 子句包括 not: where not Exists (Employee, Name)

这意味着只能从表格 Citizens(市民)将不在 Employees(员工)中的姓名加载到新表格。

请注意在 Citizens(市民)中对于 Lucy 有两个值,但是在结果表格中仅包含了一个。当您加载第一行时,值包含在 Employee(员工)符号表格中。因此,当检查第二行时,现在已存在值。

下个示例示出如何加载所有值。

结果
Employee Address
Mary London
Lucy Madrid

Example:  

员工Load Employee As Name, ID, Salary; LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where not Exists (Name, Employee);   Drop Tables Employees;

 

要得到 Lucy 的所有值,您需要进行两项更改:

  • 将前置 Load 添加到您在其中将 Employee(员工)重命名为 Name(名称)的 Employees(员工)。

    Load Employee As Name, ID, Salary;

  • Citizens(市民)中将 Where 条件更改为:

    not Exists (Name, Employee)。

由此将为 Name(名称)和 Employee(员工)创建不同的符号表格。如果检查 Lucy 的第二行,它仍未存在于 Name(名称)中。

结果
Employee Address
Mary London
Lucy Madrid
Lucy Paris