find 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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
[withsource
= ColumnName] [in
(
Tables)
]where
조건자 [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
조건자 [project-smart
|project
ColumnName[:
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
사용됩니다. 자세한 내용은 출력 스키마 세부 정보참조하세요.
반환
조건자true
Table [,
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"
find
출력 결과의 예
다음 예제에서는 두 테이블에서 find
사용하는 방법을 보여 줍니다. EventsTable1 및 EventsTable2.
다음 두 테이블의 다음 내용이 있다고 가정합니다.
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 및 오류 수준에 따라 EventsTable1 및 EventsTable2 특정 레코드를 검색합니다. 그런 다음, EventText , Version및 EventName세 개의 특정 열을 투영하고 나머지 열을 모두 동적 개체로 압축합니다.
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)