Оператор find
Область применения: ✅Microsoft Fabric✅✅
Находит строки, соответствующие предикату в наборе таблиц.
Область действия оператора 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
[project
[:
ColumnType,
... ] [ ],
pack_all()
]find
Предикат [project-smart
|project
ColumnName[:
ColumnType,
... ] [ ]],
pack_all()
Дополнительные сведения о соглашениях синтаксиса.
Параметры
Имя (название) | Type | Обязательно | Описание |
---|---|---|---|
ColumnName | string |
По умолчанию выходные данные включают столбец с именем source_, значения которого указывают, какая исходная таблица способствовала каждой строке. Если задано, вместо source_используется columnName. После сопоставления подстановочных знаков, если запрос ссылается на таблицы из нескольких баз данных, включая базу данных по умолчанию, значение этого столбца имеет имя таблицы, указанное в базе данных. Аналогичным образом кластера и квалификации базы данных присутствуют в значении, если ссылается несколько кластеров. | |
Предикат | bool |
✔️ | Это логическое выражение вычисляется для каждой строки в каждой входной таблице. Дополнительные сведения см. в сведениях о синтаксисе предиката. |
Таблицы | string |
Ноль или несколько ссылок на таблицы с разделим запятыми. По умолчанию find будет выглядеть во всех таблицах текущей базы данных. Вы можете использовать:1. Имя таблицы, например Events 2. Выражение запроса, например (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
используется по умолчанию. Дополнительные сведения см. в разделе сведений о выходной схеме.
Возвраты
Преобразование строк в таблице [,
, ...], для которой true
. Строки преобразуются в соответствии с выходной схемой.
Выходная схема
столбец source_
Выходные данные оператора find
всегда содержат столбец source_ с именем исходной таблицы. Столбец можно переименовать с помощью withsource
параметра.
Столбцы результатов
Исходные таблицы, которые не содержат столбец, используемый вычислением предиката, отфильтровываются.
При использовании project-smart
столбцы, отображаемые в выходных данных:
- Столбцы, которые отображаются явно в предикате.
- Столбцы, общие для всех отфильтрованные таблицы.
Остальные столбцы упаковываются в контейнер свойств и отображаются в дополнительном pack
столбце.
Столбец, на который явно ссылается предикат и отображается в нескольких таблицах с несколькими типами, имеет другой столбец в схеме результатов для каждого такого типа. Каждое из имен столбцов создается из исходного имени столбца и типа, разделенного подчеркиванием.
При использовании project
ColumnName[:
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
выступает в качествеобъединения.
Примеры
Примеры, приведенные в этой статье, используют общедоступные таблицы в кластера, например таблицу
StormEvents
в базе данных Samples.
В примерах этой статьи используются общедоступные таблицы, такие как таблица
StormEvents
в аналитике погоды примеры данных.
Поиск терминов во всех таблицах
Запрос находит все строки из всех таблиц в текущей базе данных, в которой любой столбец содержит слово 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":"Сосредоточено"} |
... | ... |
Поиск терминов, соответствующий шаблону имен в кластере
Запрос находит все строки из всех таблиц, имя которых начинается со всех баз данных, имя которых начинается с K
B
и в котором любой столбец содержит слово 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":"Сосредоточено"} |
... | ... |
Поиск терминов в нескольких кластерах
Запрос находит все строки из всех таблиц, имя которых начинается со всех баз данных, имя которых начинается с K
B
и в котором любой столбец содержит слово Kusto
.
Полученные записи преобразуются в соответствии с выходной схемой.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Поиск терминов во всех таблицах
Запрос находит все строки из всех таблиц, в которых любой столбец содержит слово Kusto
.
Полученные записи преобразуются в соответствии с выходной схемой.
find "Kusto"
Примеры выходных find
результатов
В следующих примерах показано, как find
можно использовать в двух таблицах: EventsTable1 и EventsTable2.
Предположим, что у нас есть следующее содержимое этих двух таблиц:
EventsTable1
Session_Id | Уровень | EventText | Версия |
---|---|---|---|
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 | Уровень | EventText | EventName |
---|---|---|---|
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()
Выходные данные
источник_ | EventText | Версия | EventName | упаковывать_ |
---|---|---|---|---|
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"} |
Поиск в распространенных и необычных столбцах
Запрос выполняет поиск записей версии как "v1.0.0" или EventName как Event1, а затем проектирует четыре конкретных столбца: Session_Id, EventText, версиии Имя события из этих отфильтрованных результатов.
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 | Версия 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 | Уровень | EventText | упаковывать_ |
---|---|---|---|---|
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
выступает в качестве union
Оператор 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'
Ссылка на столбец, который отображается в нескольких таблицах и содержит несколько типов
В этом примере создайте две таблицы, выполнив следующие действия:
.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)