Поделиться через


Оператор 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 столбце. Столбец, на который явно ссылается предикат и отображается в нескольких таблицах с несколькими типами, имеет другой столбец в схеме результатов для каждого такого типа. Каждое из имен столбцов создается из исходного имени столбца и типа, разделенного подчеркиванием.

При использовании 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 выступает в качествеобъединения.

Примеры

Примеры, приведенные в этой статье, используют общедоступные таблицы в кластера, например таблицу 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":"Сосредоточено"}
... ...

Поиск терминов, соответствующий шаблону имен в кластере

Запрос находит все строки из всех таблиц, имя которых начинается со всех баз данных, имя которых начинается с 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 результатов

В следующих примерах показано, как 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)