Saltar al contenido principal

Exists - función de script

Exists() determina si un valor de campo específico ya se ha cargado en el campo en el script de carga. La función devuelve TRUE o FALSE, por lo que se puede usar en la cláusula where de una sentencia LOAD o una función IF.

Nota: También puede usar Not Exists() para determinar si un valor de campo no se ha cargado, pero se recomienda precaución si utiliza Not Exists() en una cláusula where. La función Exists() prueba tanto las tablas cargadas previamente como los valores cargados previamente en la tabla actual. Por lo tanto, únicamente se cargará la primera instancia. Cuando se encuentra la segunda instancia, el valor ya está cargado. Vea los ejemplos para más información.

Syntax:  

Exists(field_name [, expr] )

Tipo de datos que devuelve: Booleano

Arguments:  

Argumentos de Exists
Argumento Descripción
field_name

El nombre del campo donde desea buscar un valor. Puede usar un nombre de campo explícito sin comillas.

El campo ya debe estar cargado por el script. Eso significa que no puede hacer referencia a un campo que se cargue en una cláusula más abajo en el script.

expr

El valor que desea verificar si existe. Puede usar un valor explícito o una expresión que se refiera a uno o varios campos en la sentencia load de carga actual.

Nota: No puede hacer referencia a campos que no estén incluidos en la sentencia load de carga actual.

Este argumento es opcional. Si lo omite, la función verificará si el valor de field_name en el registro actual ya existe.

Example 1:  

Exists (Employee)

Devuelve -1 (True) si el valor del campo Employee en el registro actual ya existe en cualquier registro previamente leído que contenga ese campo.

Example 2:  

Exists(Employee, 'Bill')

Devuelve -1 (True) si se encuentra el valor 'Bill' en el contenido actual del campo Employee.

Las sentencias Exists (Employee, Employee) y Exists (Employee) son equivalentes.

Example 3:  

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;
 

Esto da como resultado una tabla denominada EmployeeAddresses en el modelo de datos, que puede visualizarse como un gráfico de tabla utilizando las dimensiones Employee y Address.

La cláusula where: where Exists (Employee, Name), significa que en la tabla nueva solo se cargan los nombres de la tabla Citizens que también estén en Employees. La sentencia Drop elimina las tablas temporales Employees y Citizens para evitar confusiones.

Resultados del ejemplo 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Example 4:  

Reemplazando la sentencia en los datos de muestra del ejemplo anterior que crea la tabla EmployeeAddresses con lo siguiente, usando where not Exists.

NonEmployee:

Load Name as Employee, Address Resident Citizens where not Exists (Employee, Name);

 

La cláusula where incluye not: where not Exists (Employee, Name).

Esto significa que solo los nombres de la tabla Citizens que no estén incluidos en Employees se cargarán en la nueva tabla.

Observe que hay dos valores para Lucy en la tabla Citizens, pero solo uno está incluido en la tabla de resultados. Cuando carga la primera fila, el valor se incluye en la tabla de símbolos Employee. De ahí que cuando se marca la segunda línea, el valor ahora existe.

El ejemplo siguiente muestra cómo cargar todos los valores.

Resultados del ejemplo 4
EmployeeAddress
MaryLondon
LucyMadrid

Example 5:  

Employees: 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 poder obtener todos los valores de Lucy, debe cambiar dos cosas:

  • Agregue una sentencia load precedente a Employees donde renombrará Employee como Name.

    Load Employee As Name, ID, Salary;

  • Cambie la condición Where en Citizens a:

    not Exists (Name, Employee).

Esto creará diferentes tablas de símbolos para Name y Employee. Cuando se marca la segunda fila de Lucy, todavía no existe en Name.

Resultados del ejemplo 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Datos utilizados en el ejemplo:

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 '|');