기본 콘텐츠로 건너뛰기

Exists - 스크립트 함수

Exists()는 특정 필드 값이 데이터 로드 스크립트의 필드에 이미 로드되었는지 여부를 판단합니다. 이 함수는 TRUE 또는 FALSE를 반환하므로 LOAD 문의 where 절 또는 IF 문에서 사용할 수 있습니다.

참고: Not Exists()를 사용하여 필드 값이 로드되었는지 확인할 수도 있지만 where 절에서 Not Exists()를 사용할 때는 주의해야 합니다. Exists() 함수는 이전에 로드한 테이블과 현재 테이블에서 이전에 로드한 값을 둘 다 테스트합니다. 따라서 처음 발견되는 값이 로드됩니다. 두 번째 값이 발견될 때 값은 이미 로드되어 있습니다. 자세한 내용은 예제를 참조하십시오.

Syntax:  

Exists(field_name [, expr])

Return data type: 부울

Arguments:  

인수
인수 설명
field_name

값을 검색할 필드의 이름입니다. 따옴표 없이 명시적 필드 이름을 사용할 수 있습니다.

스크립트에서 필드가 이미 로드되어 있어야 합니다. 즉, 스크립트에서 나중 절에 로드된 필드를 참조할 수 없습니다.

expr

존재하는지 확인하려는 값입니다. 현재 load 문에서 하나 또는 여러 개의 필드를 참조하는 명시적 값 또는 표현식을 사용할 수 있습니다.

참고: 현재 load 문에 포함되지 않은 필드는 참조할 수 없습니다.

이 인수는 선택 사항입니다. 이 인수를 생략하면 함수는 현재 레코드에 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')

필드 값 'Bill'Employee 필드의 현재 내용에서 발견되는 경우 -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;

 

이 결과는 EmployeeAddress 차원을 사용하여 테이블 시각화에서 사용할 수 있는 테이블에 표시됩니다.

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 주소
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;

 

Lucy에 대한 모든 값을 가져오려면 두 가지를 변경해야 합니다.

  • Employee의 이름을 Name으로 바꾸는 Employees에 선행 load를 추가합니다.

    Load Employee As Name, ID, Salary;

  • Citizens에서 Where 조건을 다음으로 변경합니다.

    not Exists (Name, Employee)

이렇게 하면 NameEmployee에 대한 다른 기호 테이블이 생성됩니다. Lucy에 대한 두 번째 행을 확인하면 여전히 Name에 존재하지 않습니다.

결과
Employee 주소
Mary London
Lucy Madrid
Lucy Paris