Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ 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 оператор значительно менее эффективен, чем фильтрация текста для определенных столбцов. Каждый раз, когда известны столбцы, рекомендуется использовать оператор where.
find не работает хорошо, если рабочая область содержит большое количество таблиц и столбцов, а объем данных, который сканируется, высок, а диапазон времени запроса высок.
Синтаксис
find[ColumnName] [withsource= [in(... ] [ ])where]findПредикат [project-smart|projectColumnName[:ColumnType,... ] [ ]],pack_all()
Дополнительные сведения о соглашениях синтаксиса.
Параметры
| Имя (название) | Тип | Обязательно | Описание |
|---|---|---|---|
| ColumnName | string |
По умолчанию выходные данные включают столбец с именем source_, значения которого указывают, какая исходная таблица способствовала каждой строке. Если задано, вместо source_используется columnName. После сопоставления подстановочных знаков, если запрос ссылается на таблицы из нескольких баз данных, включая базу данных по умолчанию, значение этого столбца имеет имя таблицы, указанное в базе данных. Аналогичным образом кластера и квалификации базы данных присутствуют в значении, если ссылается несколько кластеров. | |
| Предикат | bool |
✔️ | Это логическое выражение вычисляется для каждой строки в каждой входной таблице. Дополнительные сведения см. в сведениях о синтаксисе предиката. |
| Таблицы | string |
Ноль или несколько ссылок на таблицы с разделим запятыми. По умолчанию find будет выглядеть во всех таблицах текущей базы данных. Вы можете использовать:1. Имя таблицы, например Events2. Выражение запроса, например (Events | where id==42)3. Набор таблиц, указанных подстановочным знаком. Например, E* будет формироваться объединение всех таблиц в базе данных, имена которых начинаются с E. |
|
project-smart или project |
string |
Если это не указано, project-smart используется по умолчанию. Дополнительные сведения см. в разделе сведений о выходной схеме. |
withsource=ColumnName: необязательно. По умолчанию выходные данные включают столбец с именем source_, значения которых указывают, какая исходная таблица способствовала каждой строке. Если задано, вместо source_используется columnName.Предикат:
booleanвыражение по столбцам входных таблиц [ Таблица,,...]. Он вычисляется для каждой строки в каждой входной таблице. Дополнительные сведения см. в сведениях о синтаксисе предиката.Таблицы: необязательно. Ноль или несколько ссылок на таблицы с разделим запятыми. По умолчанию найти выполняет поиск всех таблиц:
- имя таблицы, например
Events. - Выражение запроса, например
(Events | where id==42) - Набор таблиц, указанных с помощью подстановочного знака. Например,
E*будет формировать объединение всех таблиц, имена которых начинаются сE.
- имя таблицы, например
project-smart|project: если не указаноproject-smartиспользуется по умолчанию. Дополнительные сведения см. в разделе сведений о выходной схеме.
Возвраты
Преобразование строк в таблице [,, ...], для которой . Строки преобразуются в соответствии с выходной схемой.
Выходная схема
столбец source_
Выходные данные оператора find всегда содержат столбец source_ с именем исходной таблицы. Столбец можно переименовать с помощью withsource параметра.
Столбцы результатов
Исходные таблицы, которые не содержат столбец, используемый вычислением предиката, отфильтровываются.
При использовании project-smartстолбцы, отображаемые в выходных данных:
- Столбцы, которые отображаются явно в предикате.
- Столбцы, общие для всех отфильтрованные таблицы.
Остальные столбцы упаковываются в контейнер свойств и отображаются в дополнительном pack столбце.
Столбец, на который явно ссылается предикат и отображается в нескольких таблицах с несколькими типами, имеет другой столбец в схеме результатов для каждого такого типа. Каждое из имен столбцов создается из исходного имени столбца и типа, разделенного подчеркиванием.
При использовании projectColumnName[:ColumnType, ... ] [,pack_all()]:
- Таблица результатов содержит столбцы, указанные в списке. Если исходная таблица не содержит определенный столбец, значения в соответствующих строках имеют значение NULL.
- При указании ColumnType с ColumnName, этот столбец в "result" имеет заданный тип, и значения при необходимости приведение к этому типу. Приведение не влияет на тип столбца при оценке предиката.
- При использовании
pack_all()все столбцы, включая проецируемые столбцы, упаковываются в контейнер свойств и отображаются в дополнительном столбце по умолчанию "column1". В контейнере свойств имя исходного столбца служит именем свойства, а значение столбца служит значением свойства.
Синтаксис предиката
Оператор find поддерживает альтернативный синтаксис для термина * has и использует только термин, выполняет поиск термина во всех входных столбцах.
Сводка по некоторым функциям фильтрации см. в разделе о том, где оператор.
Соображения
-
projectЕсли предложение ссылается на столбец, который отображается в нескольких таблицах и содержит несколько типов, тип должен соответствовать ссылке на этот столбец в предложении проекта. - Если столбец отображается в нескольких таблицах и имеет несколько типов и
project-smartиспользуется, для каждого типа в результатахfindесть соответствующий столбец, как описано в объединения - Если вы используете проекта, изменения в предикате, в наборе исходных таблиц или в схеме таблиц могут привести к изменению выходной схемы. Если требуется константная схема результата, используйте проект вместо него.
-
findобласть не может включать функции. Чтобы включить функцию в областьfind, определите инструкцию let с ключевым словом представления.
Советы по производительности
- Используйте таблицы в отличие от табличных выражений.
Если табличное выражение, оператор поиска возвращается к запросу
union, который может привести к снижению производительности. - Если столбец, который отображается в нескольких таблицах и имеет несколько типов, является частью предложения проекта, предпочитайте добавить ColumnType в предложение проекта, прежде чем изменять таблицу перед передачей в нее
find. - Добавьте фильтры на основе времени в предикат. Используйте значение столбца datetime или ingestion_time().
- Поиск в определенных столбцах, а не полнотекстовый поиск.
- Лучше не ссылаться на столбцы, которые отображаются в нескольких таблицах и имеют несколько типов. Если предикат действителен при разрешении такого типа столбцов для нескольких типов, запрос возвращается в объединение.
Например, см. примеры случаев, когда
findвыступает в качествеобъединения.
Примеры
Общие примеры
Следующий пример находит все строки из всех таблиц в текущей базе данных, в которой любой столбец содержит слово Hernandez. Полученные записи преобразуются в соответствии с выходной схемой. Выходные данные включают строки из Customers таблицы и SalesTable таблицу ContosoSales базы данных.
find "Hernandez"
Выходные данные
В этой таблице показаны первые три строки выходных данных.
| источник_ | упаковывать_ |
|---|---|
| Клиентов | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Северная Америка","CustomerKey":5023,"Education":"Частичная средняя школа","FirstName":"Devin","Gender";:"M","LastName":"Hernandez","MaritalStatus":"S","Оккупация":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| Клиентов | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Северная Америка","CustomerKey":7814,"Education":"Частичный колледж","FirstName":"Кристи", "Пол" ":"F","LastName":"Hernandez","MaritalStatus":"S","Оккупация":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| Клиентов | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Северная Америка","CustomerKey":7888,"Education":"Частичная средняя школа","FirstName":"Kari", "Gender";:"F","LastName":"Hernandez","MaritalStatus":"S", "Оккупация":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| ... | ... |
Следующий пример находит все строки из всех таблиц в текущей базе данных, имя которой начинается с C, и в котором любой столбец содержит слово Hernandez. Полученные записи преобразуются в соответствии с выходной схемой. Теперь выходные данные содержат только записи из Customers таблицы.
find in (C*) where * has "Hernandez"
Выходные данные
В этой таблице показаны первые три строки выходных данных.
| источник_ | упаковывать_ |
|---|---|
| Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| Конференции | {"конференция":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: подробное представление о языке запросов Azure Kusto. ","session_type":"Театр","владелец":"Джин Франсуа Беренгуер","участники":","URL:"URL:"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Фокус"} |
| Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| ... | ... |
Следующий пример находит все строки из всех таблиц во всех базах данных в кластере, в котором любой столбец содержит слово Kusto.
Этот запрос представляет собой межбазовый запрос.
Полученные записи преобразуются в соответствии с выходной схемой.
find in (database('*').*) where * has "Kusto"
Выходные данные
В этой таблице показаны первые три строки выходных данных.
| источник_ | упаковывать_ |
|---|---|
| database("Samples"). Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| database("Samples"). Конференции | {"конференция":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: подробное представление о языке запросов Azure Kusto. ","session_type":"Театр","владелец":"Джин Франсуа Беренгуер","участники":","URL:"URL:"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Фокус"} |
| database("Samples"). Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| ... | ... |
В следующем примере обнаруживаются все строки из всех таблиц, имя которых начинается со всех баз данных, имя которых начинается с KB и в котором любой столбец содержит слово Kusto.
Полученные записи преобразуются в соответствии с выходной схемой.
find in (database("S*").C*) where * has "Kusto"
Выходные данные
В этой таблице показаны первые три строки выходных данных.
| источник_ | упаковывать_ |
|---|---|
| Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| Конференции | {"конференция":"Сборка 2021","sessionid":"CON-PRT103", "session_title":"Круглый стол: расширенные темы языка запросов Kusto", "session_type":"Круглый стол","владелец":"Avner Aharoni", "участники":"Александр 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.000000Z","duration":60,"time_and_duration":"среда", 26 мая\n8:30 – 9:30 GMT", "kusto_affinity":"Сосредоточено"} |
| ... | ... |
В следующем примере обнаруживаются все строки из всех таблиц, имя которых начинается со всех баз данных, имя которых начинается с KB и в котором любой столбец содержит слово Kusto.
Полученные записи преобразуются в соответствии с выходной схемой.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Следующий пример находит все строки из всех таблиц, в которых любой столбец содержит слово Kusto.
Полученные записи преобразуются в соответствии с выходной схемой.
find "Kusto"
Примеры выходных find результатов
Предположим, что у нас есть следующее содержимое этих двух таблиц:
EventsTable1
| Session_Id | Уровень | Текст мероприятия | Версия |
|---|---|---|---|
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Информация | Некоторые текст1 | Версия 1.0.0 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Ошибка | Некоторые текст2 | Версия 1.0.0 |
| 28b8e46e-3c31-43cf-83cb-48921c3986fc | Ошибка | Некоторые текст3 | v1.0.1 |
| 8f057b11-3281-45c3-a856-05ebb18a3c59 | Информация | Некоторые текст4 | v1.1.0 |
EventsTable2
| Session_Id | Уровень | Текст мероприятия | Название события |
|---|---|---|---|
| f7d5f95f-f580-4ea6-830b-5776c8d64fd | Информация | Другой текст1 | Событие1 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Информация | Некоторые другие текст2 | Событие2 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Ошибка | Некоторые другие текст3 | Событие3 |
| 15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Ошибка | Некоторые другие текст4 | Событие4 |
В следующем примере выполняется поиск определенных записей в EventsTable1 и EventsTable2 на основе заданного Session_Id и уровня ошибок . Затем он проектирует три конкретных столбца: EventText, версиии EventNameи упаковывает все остальные столбцы в динамический объект.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Выходные данные
| источник_ | Текст мероприятия | Версия | Название события | упаковывать_ |
|---|---|---|---|---|
| EventsTable1 | Некоторые текст2 | Версия 1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
| EventsTable2 | Некоторые другие текст3 | Событие3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
В следующем примере выполняется поиск записей, имеющих версию "версии 1.0.0.0" или EventName как Event1, а затем она проектирует четыре конкретных столбца: Session_Id, EventText, Version и EventName из этих отфильтрованных результатов.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Выходные данные
| источник_ | Session_Id | Текст мероприятия | Версия | Название события |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Некоторые текст1 | Версия 1.0.0 | |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Некоторые текст2 | Версия 1.0.0 | |
| EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fd | Другой текст1 | Событие1 |
Примечание.
На практике строки EventsTable1 фильтруются с предикатом Version == 'v1.0.0', а строки EventsTable2 фильтруются с помощью предиката EventName == 'Event1'.
В следующем примере выполняется поиск базы данных для любых записей с Session_Id , которая соответствует acbd207d-51aa-4df7-bfa7-be70eb68f04e. Он извлекает записи из всех таблиц и столбцов, содержащих этот конкретный Session_Id.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Выходные данные
| источник_ | Session_Id | Уровень | Текст мероприятия | упаковывать_ |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Информация | Некоторые текст1 | {"Версия":"v1.0.0"} |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Ошибка | Некоторые текст2 | {"Версия":"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 выступает в качестве объединения
Оператор find в Kusto иногда может выступать как оператор union, главным образом при использовании для поиска по нескольким таблицам.
В следующем примере сначала создается представление, которое фильтрует EventsTable1 только для включения записей уровня ошибок. Затем он выполняет поиск в этом отфильтрованном представлении и таблице EventsTable2 для записей с определенным Session_Id.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
В следующих примерах показано, как find оператор может выступать в качестве union столбца, отображаемого в нескольких таблицах с разными типами. В этом случае ProcessId столбец присутствует как в table1 , так и table2, но с различными типами.
В этом примере создайте две таблицы, выполнив следующие действия:
.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)