find 연산자

테이블 집합에서 조건자와 일치하는 행을 찾습니다.

find scope 데이터베이스 간 또는 클러스터 간일 수도 있습니다.

find in (Table1, Table2, Table3) where Fruit=="apple"

find in (database('*').*) where Fruit == "apple"

find in (cluster('cluster_name').database('MyDB*').*) where Fruit == "apple"
find in (Table1, Table2, Table3) where Fruit=="apple"

참고

find 연산자는 열별 텍스트 필터링보다 훨씬 덜 효율적입니다. 열을 알 수 있을 때마다 where 연산자를 사용하는 것이 좋습니다. find 는 작업 영역에 많은 수의 테이블과 열이 있고 검사 중인 데이터 볼륨이 높고 쿼리의 시간 범위가 높은 경우 제대로 작동하지 않습니다.

Syntax

  • find [withsource= ColumnName] [in(Tables)] where조건자 [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

  • find조건자 [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
ColumnName string 기본적으로 출력에는 각 행에 기여한 원본 테이블을 나타내는 값이 있는 source_ 라는 열이 포함됩니다. 지정한 경우 ColumnNamesource_ 대신 사용됩니다. 와일드카드 일치 후 쿼리가 기본 데이터베이스를 포함하여 둘 이상의 데이터베이스에서 테이블을 참조하는 경우 이 열의 값에는 데이터베이스로 한정된 테이블 이름이 포함됩니다. 마찬가지로 클러스터데이터베이스 자격은 둘 이상의 클러스터가 참조되는 경우 값에 존재합니다.
Predicate bool ✔️ 이 부울 식은 각 입력 테이블의 각 행에 대해 평가됩니다. 자세한 내용은 조건자 구문 세부 정보를 참조하세요.
테이블 string 쉼표로 구분된 테이블 참조가 0개 이상입니다. 기본적으로 는 find 현재 데이터베이스의 모든 테이블을 확인합니다. 다음을 사용할 수 있습니다.
1. 테이블의 이름(예: Events
2. 쿼리 식(예: ) (Events | where id==42)
3. 와일드카드로 지정된 테이블 집합입니다. 예를 들어 은 E* 이름이 로 시작하는 데이터베이스의 모든 테이블의 합집합을 E형성합니다.
project-smart 또는 project string 지정 project-smart 하지 않으면 는 기본적으로 사용됩니다. 자세한 내용은 출력 스키마 세부 정보를 참조하세요.
  • withsource=ColumnName: 선택 사항입니다. 기본적으로 출력에는 각 행에 기여한 원본 테이블을 나타내는 값이 있는 source_ 라는 열이 포함됩니다. 지정한 경우 ColumnNamesource_ 대신 사용됩니다.

  • 조건자: boolean 입력 테이블 [,테이블, ...]의 열에 대한 입니다. 각 입력 테이블의 각 행에 대해 평가됩니다. 자세한 내용은 조건자 구문 세부 정보를 참조하세요.

  • 테이블: 선택 사항입니다. 쉼표로 구분된 테이블 참조가 0개 이상입니다. 기본적으로 찾기 는 다음을 위해 모든 테이블을 검색합니다.

    • 테이블 이름입니다(예: Events).
    • (Events | where id==42)
    • 와일드 카드를 사용하여 지정한 테이블 집합입니다. 예를 들어 은 E* 이름이 로 시작하는 모든 테이블의 합집합을 E형성합니다.
  • project-smart | project: 지정 project-smart 하지 않으면 기본적으로 사용됩니다. 자세한 내용은 출력 스키마 세부 정보를 참조하세요.

반환

조건true자가 인 테이블 [,Table, ...]의 행 변환 행은 출력 스키마에 따라 변환됩니다.

출력 스키마입니다.

source_ 열

find 연산자 출력에는 항상 원본 테이블 이름이 있는 source_ 열이 포함됩니다. 매개 변수를 사용하여 열의 withsource 이름을 바꿀 수 있습니다.

결과 열

조건자 평가에서 사용하는 열이 포함되지 않은 원본 테이블이 필터링됩니다.

를 사용하는 project-smart경우 출력에 표시되는 열은 다음과 같습니다.

  • 조건자에서 명시적으로 표시되는 열입니다.
  • 필터링된 모든 테이블에 공통적인 열입니다.

나머지 열은 속성 모음에 압축되고 추가 pack 열에 표시됩니다. 조건자에서 명시적으로 참조되고 여러 형식의 여러 테이블에 표시되는 열은 이러한 각 형식에 대해 결과 스키마에 다른 열을 갖습니다. 각 열 이름은 밑줄로 구분된 원래 열 이름 및 형식에서 생성됩니다.

ColumnName[:ColumnType, ... ] [,pack_all()]을 사용하는 project 경우:

  • 결과 테이블에는 목록에 지정된 열이 포함됩니다. 원본 테이블에 특정 열이 없는 경우 해당 행의 값은 null이 됩니다.
  • ColumnName을 사용하여 ColumnType을 지정할 때 "result"의 이 열에는 지정된 형식이 있으며 필요한 경우 값이 해당 형식으로 캐스팅됩니다. 조건자를 평가할 때 캐스팅은 열 형식에 영향을 주지 않습니다.
  • 가 사용되면 pack_all() 프로젝트된 열을 포함한 모든 열이 속성 모음에 압축되어 기본적으로 'column1'인 추가 열에 표시됩니다. 속성 모음에서 원본 열 이름은 속성 이름으로 사용되고 열의 값은 속성 값으로 사용됩니다.

조건자 구문

find 연산자는 용어에 대한 * has 대체 구문을 지원하며, 용어만 사용하면 모든 입력 열에서 용어를 검색합니다.

일부 필터링 함수에 대한 요약은 where 연산자를 참조하세요.

참고

  • 절이 project 여러 테이블에 표시되고 여러 형식이 있는 열을 참조하는 경우 형식은 프로젝트 절에서 이 열 참조를 따라야 합니다.
  • 열이 여러 테이블에 표시되고 여러 형식이 있고 project-smart 사용 중인 경우 공용 구조체에 설명된 대로 결과의 각 형식에 find해당하는 열이 있습니다.
  • 프로젝트 스마트를 사용하는 경우 조건자, 원본 테이블 집합 또는 테이블 스키마의 변경으로 인해 출력 스키마가 변경 될 수 있습니다. 상수 결과 스키마가 필요한 경우 대신 프로젝트를 사용합니다.
  • findscope 함수를 포함할 수 없습니다. 찾기 scope 함수를 포함하려면 보기 키워드(keyword) 있는 let 문을 정의합니다.

성능 팁

  • 테이블 형식 식이 아닌 테이블을 사용합니다. 테이블 형식 식인 경우 find 연산자는 성능 저하를 union 초래할 수 있는 쿼리로 돌아갑니다.
  • 여러 테이블에 표시되고 여러 형식이 있는 열이 프로젝트 절의 일부인 경우 에 전달하기 전에 테이블 수정보다 Project 절에 ColumnType 을 추가하는 것이 find좋습니다.
  • 조건자에서 시간 기반 필터를 추가합니다. datetime 열 값 또는 ingestion_time()를 사용합니다.
  • 전체 텍스트 검색이 아닌 특정 열에서 검색합니다.
  • 여러 테이블에 표시되고 여러 형식이 있는 열을 참조하지 않는 것이 좋습니다. 둘 이상의 형식에 대해 이러한 열 형식을 확인할 때 조건자가 유효한 경우 쿼리는 공용 구조체로 대체됩니다. 예를 들어 find가 공용 구조체 역할을 하는 사례의 예를 참조하세요.

예제

현재 데이터베이스의 모든 테이블에서 용어 조회

쿼리는 모든 열에 단어가 Hernandez포함된 현재 데이터베이스의 모든 테이블에서 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다. 출력에는 테이블의 Customers 행과 데이터베이스 테이블이 SalesTableContosoSales 포함됩니다.

find "Hernandez"

현재 데이터베이스의 이름 패턴과 일치하는 모든 테이블에서 용어 조회

쿼리는 이름이 로 시작 C되고 열에 단어가 Hernandez포함된 현재 데이터베이스의 모든 테이블에서 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다. 이제 출력에는 테이블의 레코드 Customers 만 포함됩니다.

find in (C*) where * has "Hernandez"

클러스터의 모든 데이터베이스에 있는 모든 테이블에서 용어 조회

쿼리는 모든 열에 단어가 Kusto포함된 모든 데이터베이스의 모든 테이블에서 모든 행을 찾습니다. 이 쿼리는 데이터베이스 간 쿼리입니다. 결과 레코드는 출력 스키마에 따라 변환됩니다.

find in (database('*').*) where * has "Kusto"

클러스터의 이름 패턴과 일치하는 모든 테이블 및 데이터베이스의 용어 조회

쿼리는 이름이 로 시작되고 열에 단어가 Kusto포함된 모든 데이터베이스에서 이름이 로 시작하는 KB 모든 테이블의 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다.

find in (database("S*").C*) where * has "Kusto"

여러 클러스터의 용어 조회

쿼리는 이름이 로 시작되고 열에 단어가 Kusto포함된 모든 데이터베이스에서 이름이 로 시작하는 KB 모든 테이블의 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다.

find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"

모든 테이블의 용어 조회

쿼리는 열에 단어가 Kusto포함된 모든 테이블의 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다.

find "Kusto"

find 출력 결과의 예

다음 예제에서는 EventsTable1 및 EventsTable2라는 두 테이블에 사용할 수 있는 방법을 find 보여 줍니다. 다음 두 테이블의 내용이 있다고 가정합니다.

EventsTable1

Session_Id Level EventText 버전
acbd207d-51aa-4df7-bfa7-be70eb68f04e 정보 일부 텍스트1 v1.0.0
acbd207d-51aa-4df7-bfa7-be70eb68f04e 오류 일부 텍스트2 v1.0.0
28b8e46e-3c31-43cf-83cb-48921c3986fc 오류 일부 텍스트3 v1.0.1
8f057b11-3281-45c3-a856-05ebb18a3c59 정보 일부 텍스트4 v1.1.0

EventsTable2

Session_Id Level EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd 정보 기타 텍스트1 Event1
acbd207d-51aa-4df7-bfa7-be70eb68f04e 정보 기타 텍스트2 Event2
acbd207d-51aa-4df7-bfa7-be70eb68f04e 오류 기타 텍스트3 Event3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 오류 기타 텍스트4 Event4

공통 열에서 검색하고, 일반적이고 일반적이지 않은 열을 프로젝트하고, 나머지를 압축합니다.

find in (EventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' 
     project EventText, Version, EventName, pack_all()

출력

소스_ EventText 버전 EventName 팩_
EventsTable1 일부 텍스트2 v1.0.0 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}
EventsTable2 기타 텍스트3 Event3 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}

일반적이고 일반적이지 않은 열에서 검색

find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName

출력

소스_ Session_Id EventText 버전 EventName
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 일부 텍스트1 v1.0.0
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 일부 텍스트2 v1.0.0
EventsTable2 f7d5f95f-f580-4ea6-830b-5776c8d64fdd 기타 텍스트1 Event1

참고: 실제로 EventsTable1 행은 조건자를 사용하여 Version == 'v1.0.0' 필터링되고 EventsTable2 행은 조건자를 사용하여 EventName == 'Event1' 필터링됩니다.

약식 표기법을 사용하여 현재 데이터베이스의 모든 테이블 검색

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

출력

소스_ Session_Id Level EventText 팩_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 정보 일부 텍스트1 {"Version":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 오류 일부 텍스트2 {"Version":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e 정보 기타 텍스트2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e 오류 기타 텍스트3 {"EventName":"Event3"}

각 행의 결과를 속성 모음으로 반환합니다.

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()

출력

소스_ 팩_
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"}
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"}

가 역할을 하는 find 사례의 예 union

테이블 형식이 아닌 식을 찾기 피연산자로 사용

let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

여러 테이블에 표시되고 여러 형식이 있는 열 참조

다음을 실행하여 두 개의 테이블을 만들었다고 가정합니다.

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • 다음 쿼리는 로 union실행됩니다.
find in (Table1, Table2) where ProcessId == 1001

출력 결과 스키마는 (Level:string, Timestamp, ProcessId_string, ProcessId_int)입니다.

  • 다음 쿼리도 로 union실행되지만 다른 결과 스키마가 생성됩니다.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

출력 결과 스키마는 (Level:string, Timestamp, ProcessId_string)