Ir para conteúdo principal

Exists - função de script

Exists() determina se um valor de campo específico já foi carregado no campo no script de carga de dados. A função retorna TRUE ou FALSE, de forma que pode ser usada na cláusula where de um comando LOAD ou um comando IF.

Nota: Também é possível usar Not Exists() para determinar se um valor de campo não foi carregado, mas recomenda-se cuidado se você usar Not Exists() em uma cláusula where. A função Exists() testa tanto as tabelas quanto os valores carregados anteriormente na tabela atual. Então, apenas a primeira ocorrência será carregada. Quando a segunda ocorrência é encontrada, o valor já está carregado. Veja os exemplos para mais informações.

Syntax:  

Exists(field_name [, expr])

Return data type: Booleano

Arguments:  

Argumentos
Argumento Descrição
field_name

O nome do campo onde você deseja procurar um valor. Você pode usar um nome de campo explícito sem aspas.

O campo já deve estar carregado pelo script. Isso significa que você não pode se referir a um campo que seja carregado em uma cláusula mais abaixo no script.

expr

O valor que você deseja verificar se existe. Você pode usar um valor ou uma expressão explícita que se refira a um ou vários campos no comando load atual.

Nota: Você não pode se referir a campos que não estão incluídos no comando load atual.

Esse argumento é opcional. Se você omiti-lo, a função verificará se o valor de field_name no registro atual já existe.

Dados usados no exemplo:

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)

Retorna -1 (True) se o valor do campo Employee no registro atual já existir em qualquer registro lido anteriormente que contenha esse campo.

Os comandos Exists (Employee, Employee) e Exists (Employee) são equivalentes.

Example:  

Exists(Employee, 'Bill')

Retorna -1 (True) se o valor de campo 'Bill' for encontrado no conteúdo atual do campo Employee.

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;

 

Isso resulta em uma tabela que pode ser visualizada em visualização de tabela usando as dimensões Employee e Address.

A cláusula where: where Exists (Employee) significa que apenas os nomes da tabelaCitizens que também estão em Employees são carregados para a nova tabela. O comando Drop remove a tabela Employees para evitar confusão.

Resultados
   
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;

 

A cláusula where inclui not: where not Exists (Employee, Name).

Isso significa que apenas os nomes da tabela Citizens que não estão em Employees são carregados para a nova tabela.

Observe que há dois valores para Lucy na tabela Citizens, mas apenas um é incluído na tabela de resultados. Quando você carrega a primeira linha, o valor é incluído na tabela de símbolos de Employee. Portanto, quando a segunda linha é verificada, o valor agora existe.

O próximo exemplo mostra como carregar todos os valores.

Resultados
Funcionário Endereço
Mary London
Lucy Madrid

Example:  

Funcionários: 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;

 

Para conseguir obter todos os valores para Lucy, você precisa alterar duas coisas:

  • Adicione uma carga precedente a Employees, em que você renomeia Employee para Name.

    Load Employee As Name, ID, Salary;

  • Altere a condição Where em Citizens para:

    not Exists (Name, Employee).

Isso criará diferentes tabelas de símbolos para Name e Employee. Quando a segunda linha para Lucy é marcada, ela ainda não existe em Name.

Resultados
Funcionário Endereço
Mary London
Lucy Madrid
Lucy Paris