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
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
조건자 [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | 형식 | 필수 | Description |
---|---|---|---|
ColumnName | string |
기본적으로 출력에는 각 행에 기여한 원본 테이블을 나타내는 값이 있는 source_ 라는 열이 포함됩니다. 지정한 경우 ColumnName 은 source_ 대신 사용됩니다. 와일드카드 일치 후 쿼리가 기본 데이터베이스를 포함하여 둘 이상의 데이터베이스에서 테이블을 참조하는 경우 이 열의 값에는 데이터베이스로 한정된 테이블 이름이 포함됩니다. 마찬가지로 클러스터 및 데이터베이스 자격은 둘 이상의 클러스터가 참조되는 경우 값에 존재합니다. | |
Predicate | bool |
✔️ | 이 부울 식은 각 입력 테이블의 각 행에 대해 평가됩니다. 자세한 내용은 조건자 구문 세부 정보를 참조하세요. |
테이블 | string |
쉼표로 구분된 테이블 참조가 0개 이상입니다. 기본적으로 는 find 현재 데이터베이스의 모든 테이블을 확인합니다. 다음을 사용할 수 있습니다.1. 테이블의 이름(예: Events 2. 쿼리 식(예: ) (Events | where id==42) 3. 와일드카드로 지정된 테이블 집합입니다. 예를 들어 은 E* 이름이 로 시작하는 데이터베이스의 모든 테이블의 합집합을 E 형성합니다. |
|
project-smart 또는 project |
string |
지정 project-smart 하지 않으면 는 기본적으로 사용됩니다. 자세한 내용은 출력 스키마 세부 정보를 참조하세요. |
withsource=
ColumnName: 선택 사항입니다. 기본적으로 출력에는 각 행에 기여한 원본 테이블을 나타내는 값이 있는 source_ 라는 열이 포함됩니다. 지정한 경우 ColumnName 은 source_ 대신 사용됩니다.조건자:
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
해당하는 열이 있습니다. - 프로젝트 스마트를 사용하는 경우 조건자, 원본 테이블 집합 또는 테이블 스키마의 변경으로 인해 출력 스키마가 변경 될 수 있습니다. 상수 결과 스키마가 필요한 경우 대신 프로젝트를 사용합니다.
find
scope 함수를 포함할 수 없습니다. 찾기 scope 함수를 포함하려면 보기 키워드(keyword) 있는 let 문을 정의합니다.
성능 팁
- 테이블 형식 식이 아닌 테이블을 사용합니다.
테이블 형식 식인 경우 find 연산자는 성능 저하를
union
초래할 수 있는 쿼리로 돌아갑니다. - 여러 테이블에 표시되고 여러 형식이 있는 열이 프로젝트 절의 일부인 경우 에 전달하기 전에 테이블 수정보다 Project 절에 ColumnType 을 추가하는 것이
find
좋습니다. - 조건자에서 시간 기반 필터를 추가합니다. datetime 열 값 또는 ingestion_time()를 사용합니다.
- 전체 텍스트 검색이 아닌 특정 열에서 검색합니다.
- 여러 테이블에 표시되고 여러 형식이 있는 열을 참조하지 않는 것이 좋습니다. 둘 이상의 형식에 대해 이러한 열 형식을 확인할 때 조건자가 유효한 경우 쿼리는 공용 구조체로 대체됩니다. 예를 들어 find가 공용 구조체 역할을 하는 사례의 예를 참조하세요.
예제
현재 데이터베이스의 모든 테이블에서 용어 조회
쿼리는 모든 열에 단어가 Hernandez
포함된 현재 데이터베이스의 모든 테이블에서 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다. 출력에는 테이블의 Customers
행과 데이터베이스 테이블이 SalesTable
ContosoSales
포함됩니다.
find "Hernandez"
현재 데이터베이스의 이름 패턴과 일치하는 모든 테이블에서 용어 조회
쿼리는 이름이 로 시작 C
되고 열에 단어가 Hernandez
포함된 현재 데이터베이스의 모든 테이블에서 모든 행을 찾습니다. 결과 레코드는 출력 스키마에 따라 변환됩니다. 이제 출력에는 테이블의 레코드 Customers
만 포함됩니다.
find in (C*) where * has "Hernandez"
클러스터의 모든 데이터베이스에 있는 모든 테이블에서 용어 조회
쿼리는 모든 열에 단어가 Kusto
포함된 모든 데이터베이스의 모든 테이블에서 모든 행을 찾습니다.
이 쿼리는 데이터베이스 간 쿼리입니다.
결과 레코드는 출력 스키마에 따라 변환됩니다.
find in (database('*').*) where * has "Kusto"
클러스터의 이름 패턴과 일치하는 모든 테이블 및 데이터베이스의 용어 조회
쿼리는 이름이 로 시작되고 열에 단어가 Kusto
포함된 모든 데이터베이스에서 이름이 로 시작하는 K
B
모든 테이블의 모든 행을 찾습니다.
결과 레코드는 출력 스키마에 따라 변환됩니다.
find in (database("S*").C*) where * has "Kusto"
여러 클러스터의 용어 조회
쿼리는 이름이 로 시작되고 열에 단어가 Kusto
포함된 모든 데이터베이스에서 이름이 로 시작하는 K
B
모든 테이블의 모든 행을 찾습니다.
결과 레코드는 출력 스키마에 따라 변환됩니다.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "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)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기