Przeskocz do zawartości głównej

Exists — funkcja skryptu

Funkcja Exists() określa, czy podana wartość pola została już załadowana w polu w skrypcie ładowania danych. Funkcja zwraca wartość TRUE lub FALSE, dzięki czemu może zostać użyta w klauzuli where instrukcji LOAD lub instrukcji IF.

Uwaga: Można również użyć funkcji Not Exists() w celu określenia, czy wartość pola nie została załadowana, ale zalecana jest ostrożność w przypadku używania funkcji Not Exists() w klauzuli where. Funkcja Exists() sprawdza zarówno poprzednio załadowane tabele, jak i poprzednio załadowane wartości w bieżącej tabeli. Z tego powodu zostanie załadowane tylko pierwsze wystąpienie. W momencie napotkania drugiego wystąpienia wartość jest już załadowana. Więcej informacji można znaleźć w przedstawionych przykładach.

Syntax:  

Exists(field_name [, expr])

Return data type: wartość logiczna

Arguments:  

Argumenty
Argument Opis
field_name

Nazwa pola, w którym ma być wyszukiwana wartość. Można użyć jawnej nazwy pola bez cudzysłowów.

Pole musi być już załadowane przez skrypt. Oznacza to, że nie można odwoływać się do pola, które jest ładowane przez klauzulę znajdującą się w dalszej części skryptu.

expr

Wartość, która ma zostać sprawdzona pod kątem tego, czy istnieje. Można użyć wartości jawnej albo wyrażenia, które odwołuje się do jednego lub wielu pól w bieżącej instrukcji LOAD.

Uwaga: Nie można odwoływać się do pól, które nie są uwzględnione w bieżącej instrukcji LOAD.

Ten argument jest opcjonalny. Jeśli zostanie pominięty, funkcja będzie sprawdzać, czy wartość field_name w bieżącym rekordzie już istnieje.

Dane zastosowane w przykładzie:

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)

Zwraca –1 (True), jeśli wartość pola Employee w bieżącym rekordzie już istnieje w jakimkolwiek wcześniej wczytanym rekordzie zawierającym to pole.

Instrukcje Exists (Employee, Employee) i Exists (Employee) są równoważne.

Example:  

Exists(Employee, 'Bill')

Zwraca –1 (True), jeśli wartość pola 'Bill' występuje w bieżącej zawartości pola 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;

 

W efekcie otrzymuje się tabelę, której można użyć w wizualizacji tabeli przy użyciu wymiarów Employee i Address.

Klauzula where: where Exists (Employee) oznacza, że tylko nazwy z tabeliCitizens, które znajdują się także w tabeli Employees, są ładowane do nowej tabeli. Instrukcja Drop usuwa tabelę Employees w celu uniknięcia pomyłek.

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

 

Klauzula where zawiera not: where not Exists (Employee, Name).

To oznacza, że tylko te nazwy z tabeli Citizens, które nie znajdują się w tabeli Employees, są ładowane do nowej tabeli.

Zwróć uwagę, że istnieją dwie wartości dla Lucy w tabeli Citizens, ale tylko jedna jest uwzględniana w tabeli wynikowej. W momencie ładowania pierwszego wiersza wartość jest zawarta w tabeli symboli Employee. Z tego powodu w momencie sprawdzania drugiego wiersza ta wartość już istnieje.

W następnym przykładzie pokazano, w jaki sposób załadować wszystkie wartości.

Wyniki
Pracownik Adres
Mary London
Lucy Madrid

Example:  

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;

 

Aby można było pobrać wszystkie wartości dla Lucy, należy zmienić dwie rzeczy:

  • Dodać wcześniejszą instrukcję load do tabeli Employees, w której nastąpi zmiana nazwy pola z Employee na Name.

    Load Employee As Name, ID, Salary;

  • Zmienić warunek Where w Citizens na:

    not Exists (Name, Employee).

W ten sposób zostaną utworzone różne tabele symboli dla Name i Employee. W momencie sprawdzania drugiego wiersza pod kątem wartości Lucy nadal nie istnieje ona w tabeli Name.

Wyniki
Pracownik Adres
Mary London
Lucy Madrid
Lucy Paris