Zu Hauptinhalt springen

Exists - Skriptfunktion

Exists() bestimmt, ob ein spezifischer Feldwert bereits in das Feld im Datenladeskript geladen wurde. Die Funktion gibt TRUE oder FALSE zurück, und kann deshalb in der where-Bedingung eines LOAD-Befehls oder eines IF-Befehls verwendet werden.

Hinweis: Sie können auch Not Exists() verwenden, um zu bestimmen, ob ein Feldwert nicht geladen wurde. Bei der Verwendung von Not Exists() in einer where-Bedingung wird allerdings zu Vorsicht geraten. Mit der Exists()-Funktion werden sowohl zuvor geladene Tabellen als auch zuvor geladene Werte in der aktuellen Tabelle geprüft. Daher wird nur das erste Vorkommen geladen. Wenn das zweite Vorkommen gefunden wird, ist der Wert bereits geladen. In den Beispielen finden Sie weitere Informationen.

Syntax:  

Exists(field_name [, expr])

Return data type: Boolesch

Arguments:  

Argumente
Argument Beschreibung
field_name

Der Name des Felds, in dem Sie nach einem Wert suchen möchten. Sie können einen expliziten Feldnamen ohne Anführungszeichen verwenden.

Das Feld muss bereits vom Skript geladen worden sein. Das bedeutet, dass Sie sich nicht auf ein Feld beziehen können, das von einer Bedingung an späterer Stelle im Skript geladen wird.

expr

Der Wert, dessen Vorhandensein Sie prüfen möchten. Sie können einen expliziten Wert oder eine Formel verwenden, die sich auf ein oder mehrere Felder in der aktuellen load-Anweisung bezieht.

Hinweis: Sie können sich nicht auf Felder beziehen, die nicht in der aktuellen load-Anweisung enthalten sind.

Dieses Argument ist optional. Wenn Sie es auslassen, wird mit der Funktion geprüft, ob der Wert von field_name im aktuellen Datensatz bereits vorhanden ist.

Im Beispiel verwendete Daten:

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)

Liefert -1 (True), wenn der Feldwert Employee im aktuellen Datensatz bereits in einem anderen Datensatz in diesem Feld vorkommt.

Die Befehle Exists (Employee, Employee) und Exists (Employee) sind gleichwertig.

Example:  

Exists(Employee, 'Bill')

Liefert -1 (True), wenn der Feldwert 'Bill' im aktuellen Inhalt von Feld Employee gefunden wird.

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;

 

Dies führt zu einer Tabelle, die Sie in einer Tabellenvisualisierung mit den Dimensionen Employee und Address verwenden können.

Die Bedingung where: where Exists (Employee), bedeutet, dass nur Namen aus der Tabelle Citizens, die sich ebenfalls in Employees befinden, in die neue Tabelle geladen werden. Der Drop-Befehl entfernt die Tabelle Employees, um Verwechslungen zu vermeiden.

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

 

Die Bedingung where beinhaltet not: where not Exists (Employee, Name).

Das bedeutet, dass nur Namen aus der Tabelle Citizens, die sich nicht in Employees befinden, in die neue Tabelle geladen werden.

Beachten Sie, dass für Lucy zwei Werte in der Tabelle Citizens vorhanden sind, jedoch nur einer davon in der Ergebnistabelle enthalten ist. Wenn Sie die erste Zeile laden, wird der Wert in die Symboltabelle Employee aufgenommen. Wenn die zweite Zeile geprüft wird, ist daher der Wert bereits vorhanden.

Im nächsten Beispiel wird gezeigt, wie Sie alle Werte laden.

Results
Employee Adresse
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;

 

Damit alle Werte für Lucy abgerufen werden, müssen Sie zwei Einstellungen ändern:

  • Ein vorheriges load zu Employees hinzufügen, wo Sie Employee zu Name umbenennen.

    Load Employee As Name, ID, Salary;

  • Die Where-Bedingung in Citizens zu

    „not Exists (Name, Employee)“ umbenennen.

Damit werden verschiedene Symboltabellen für Name und Employee erstellt. Wenn die zweite Zeile für Lucy geprüft wird, ist sie in Name noch nicht vorhanden.

Results
Employee Adresse
Mary London
Lucy Madrid
Lucy Paris