다음을 통해 공유


find 연산자

적용 대상: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

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

find 연산자의 범위는 데이터베이스 간 또는 클러스터 간일 수도 있습니다.

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 연산자는 열별 텍스트 필터링보다 효율성이 훨씬 낮습니다. 열을 알 때마다 연산자가 사용하는 것이 좋습니다. 작업 영역에 많은 수의 테이블과 열이 있고 검사 중인 데이터 볼륨이 높고 쿼리의 시간 범위가 높으면 find 제대로 작동하지 않습니다.

통사론

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

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

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

매개 변수

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

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

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

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

반환

조건자trueTable [,Table, ...]의 행 변환입니다. 행은 출력 스키마따라 변환됩니다.

출력 스키마

source_ 열

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

결과 열

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

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

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

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

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

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

조건자 구문

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

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

고려 사항

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

성능 팁

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

예제

이 문서의 예제에서는 샘플 데이터베이스의 StormEvents 테이블과 같은 도움말 클러스터공개적으로 사용할 수 있는 테이블을 사용합니다.

이 문서의 예제에서는 날씨 분석 샘플 데이터StormEvents 테이블과 같이 공개적으로 사용 가능한 테이블을 사용합니다.

모든 테이블의 용어 조회

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

쿼리 실행

find "Hernandez"

출력

이 표에서는 출력의 처음 세 행을 보여 줍니다.

근원_ 팩_
고객 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin","Gender":"M","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName","StateProvinceName"}
고객 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"}
고객 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName","StateProvinceName"}
... ...

이름 패턴과 일치하는 모든 테이블의 용어 조회

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

쿼리 실행

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

출력

이 표에서는 출력의 처음 세 행을 보여 줍니다.

근원_ 팩_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Azure Kusto 쿼리 언어에 대해 자세히 설명합니다. ","session_type":"극장","소유자":"장 프랑수아 베렌게르","참가자":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","수준":300,"session_location":"","starttime":null,"기간":null,"time_and_duration":"","kusto_affinity":"집중"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
... ...

클러스터 전체에서 용어 조회

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

쿼리 실행

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

출력

이 표에서는 출력의 처음 세 행을 보여 줍니다.

근원_ 팩_
database("Samples"). ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
database("Samples"). ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Azure Kusto 쿼리 언어에 대해 자세히 설명합니다. ","session_type":"극장","소유자":"장 프랑수아 베렌게르","참가자":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","수준":300,"session_location":"","starttime":null,"기간":null,"time_and_duration":"","kusto_affinity":"집중"}
database("Samples"). ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
... ...

클러스터의 이름 패턴과 일치하는 용어 조회

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

쿼리 실행

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

출력

이 표에서는 출력의 처음 세 행을 보여 줍니다.

근원_ 팩_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.0000000Z","duration":60,"time_and_duration":"Wednesday, 5월 26일\n오전 8:30~ 오전 9:30 GMT","kusto_affinity":"집중"}
... ...

여러 클러스터의 용어 조회

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

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

모든 테이블의 용어 조회

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

find "Kusto"

find 출력 결과의 예

다음 예제에서는 두 테이블에서 find 사용하는 방법을 보여 줍니다. EventsTable1EventsTable2. 다음 두 테이블의 다음 내용이 있다고 가정합니다.

EventsTable1

Session_Id 수준 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 수준 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

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

쿼리는 지정된 Session_Id오류 수준에 따라 EventsTable1EventsTable2 특정 레코드를 검색합니다. 그런 다음, EventText , VersionEventName세 개의 특정 열을 투영하고 나머지 열을 모두 동적 개체로 압축합니다.

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"}

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

쿼리는 버전 'v1.0.0'으로 있거나 EventName 'Event1'으로 레코드를 검색한 다음, 필터링된 결과에서 Session_Id, EventText, 버전EventName 네 개의 특정 열을 프로젝트(선택)합니다.

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' 조건자를 사용하여 필터링됩니다.

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

이 쿼리는 데이터베이스에서 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'와 일치하는 Session_Id 있는 레코드를 검색합니다. 이 특정 Session_Id포함하는 모든 테이블 및 열에서 레코드를 검색합니다.

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

출력

근원_ Session_Id 수준 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"}

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

이 쿼리는 데이터베이스에서 지정된 Session_Id 있는 레코드를 검색하고 해당 레코드의 모든 열을 단일 동적 개체로 반환합니다.

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 역할을 하는 사례의 예

Kusto의 find 연산자는 주로 여러 테이블을 검색하는 데 사용되는 경우 union 연산자처럼 작동할 수 있습니다.

비타블 형식 식을 찾기 피연산자로 사용

쿼리는 먼저 EventsTable1 필터링하여 오류 수준 레코드만 포함하는 뷰를 만듭니다. 그런 다음 이 필터링된 뷰 및 EventsTable2 테이블 내에서 특정 Session_Id있는 레코드를 검색합니다.

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)