Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Recherche des lignes qui correspondent à un prédicat sur un ensemble de tables.
L’étendue de l’opérateur find peut également être inter-bases de données ou inter-clusters.
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"
Remarque
find l’opérateur est sensiblement moins efficace que le filtrage de texte spécifique à une colonne. Chaque fois que les colonnes sont connues, nous vous recommandons d’utiliser l’opérateur where.
find ne fonctionne pas correctement lorsque l’espace de travail contient un grand nombre de tables et de colonnes et que le volume de données analysé est élevé et que l’intervalle de temps de la requête est élevé.
Syntaxe
find[withsource= ColumnName] [in(Tables)]wherePredicate [project-smart|projectColumnName[:ColumnType,... ] [,pack_all()]]findPrédicat [project-smart|projectColumnName[:ColumnType,... ] [,pack_all()]]
En savoir plus sur les conventions de syntaxe.
Paramètres
| Nom | Catégorie | Requise | Descriptif |
|---|---|---|---|
| ColumnName | string |
Par défaut, la sortie inclut une colonne appelée source_ dont les valeurs indiquent la table source qui a contribué à chaque ligne. Si spécifié, ColumnName est utilisé au lieu de source_. Après la mise en correspondance de caractères génériques, si la requête fait référence à des tables de plusieurs bases de données, y compris la base de données par défaut, la valeur de cette colonne a un nom de table qualifié avec la base de données. De même, les qualifications de cluster et de base de données sont présentes dans la valeur si plusieurs clusters sont référencés. | |
| Prédicat | bool |
✔️ | Cette expression booléenne est évaluée pour chaque ligne de chaque table d’entrée. Pour plus d’informations, consultez les détails de la syntaxe des prédicats. |
| Tables | string |
Zéro ou plusieurs références de table séparées par des virgules. Par défaut, find examine toutes les tables de la base de données active. Vous pouvez utiliser :1. Nom d’une table, par exemple Events2. Expression de requête, telle que (Events | where id==42)3. Ensemble de tables spécifiées avec un caractère générique. Par exemple, E* formerait l’union de toutes les tables de la base de données dont les noms commencent par E. |
|
project-smart ou project |
string |
S’il n’est pas spécifié, project-smart est utilisé par défaut. Pour plus d’informations, consultez les détails du schéma de sortie. |
withsource=ColumnName : facultatif. Par défaut, la sortie inclut une colonne appelée source_ dont les valeurs indiquent la table source qui a contribué à chaque ligne. Si spécifié, ColumnName est utilisé au lieu de source_.Prédicat : expression
booleansur les colonnes de la table des tables d’entrée [,Table, ...]. Elle est évaluée pour chaque ligne de chaque table d’entrée. Pour plus d’informations, consultez les détails de la syntaxe des prédicats.Tables : facultatif. Zéro ou plusieurs références de table séparées par des virgules. Par défaut , recherchez toutes les tables pour :
- Nom d’une table, par exemple,
Events - Expression de requête, telle que
(Events | where id==42) - Ensemble de tables spécifié par un caractère générique. Par exemple,
E*formerait l’union de toutes les tables dont les noms commencent parE.
- Nom d’une table, par exemple,
project-smart|project: s’il n’est pas spécifiéproject-smart, il est utilisé par défaut. Pour plus d’informations, consultez les détails du schéma de sortie.
Retours
Transformation des lignes dans la table [,Table, ...] pour laquelle le prédicat est true. Les lignes sont transformées en fonction du schéma de sortie.
Schéma de sortie
colonne source_
La find sortie de l’opérateur inclut toujours une colonne source_ avec le nom de la table source. La colonne peut être renommée à l’aide du withsource paramètre.
colonnes de résultats
Les tables sources qui ne contiennent aucune colonne utilisée par l’évaluation du prédicat sont filtrées.
Lorsque vous utilisez project-smart, les colonnes qui apparaissent dans la sortie sont les suivantes :
- Colonnes qui apparaissent explicitement dans le prédicat.
- Colonnes communes à toutes les tables filtrées.
Les autres colonnes sont empaquetées dans un conteneur de propriétés et apparaissent dans une colonne supplémentaire pack .
Une colonne référencée explicitement par le prédicat et qui apparaît dans plusieurs tables avec plusieurs types a une colonne différente dans le schéma de résultat pour chaque type de ce type. Chacun des noms de colonnes est construit à partir du nom et du type de colonne d’origine, séparés par un trait de soulignement.
Lors de l’utilisation de ColumnNameproject
- La table de résultats inclut les colonnes spécifiées dans la liste. Si une table source ne contient pas de colonne spécifique, les valeurs des lignes correspondantes sont null.
- Lorsque vous spécifiez un ColumnType avec un ColumnName, cette colonne du « résultat » a le type donné et les valeurs sont converties en ce type si nécessaire. Le cast n’a pas d’effet sur le type de colonne lors de l’évaluation du prédicat.
- Quand
pack_all()elle est utilisée, toutes les colonnes, y compris les colonnes projetées, sont regroupées dans un conteneur de propriétés et apparaissent dans une colonne supplémentaire, par défaut « column1 ». Dans le conteneur de propriétés, le nom de colonne source sert de nom de propriété et la valeur de la colonne sert de valeur de propriété.
Syntaxe de prédicat
L’opérateur find prend en charge une autre syntaxe pour le * has terme, et en utilisant simplement un terme, recherche un terme dans toutes les colonnes d’entrée.
Pour obtenir un résumé de certaines fonctions de filtrage, voir où l’opérateur.
Considérations
- Si la
projectclause fait référence à une colonne qui apparaît dans plusieurs tables et a plusieurs types, un type doit suivre cette référence de colonne dans la clause projet - Si une colonne apparaît dans plusieurs tables et a plusieurs types et
project-smartest en cours d’utilisation, il existe une colonne correspondante pour chaque type dufindrésultat, comme décrit dans union - Lorsque vous utilisez project-smart, les modifications apportées au prédicat, dans le jeu de tables sources ou dans le schéma des tables peuvent entraîner une modification du schéma de sortie. Si un schéma de résultat constant est nécessaire, utilisez le projet à la place
-
findl’étendue ne peut pas inclure de fonctions. Pour inclure une fonction dans l’étenduefind, définissez une instruction let avec le mot clé View.
Astuces pour les performances
- Utilisez des tables plutôt que des expressions tabulaires.
Si l’expression tabulaire, l’opérateur de recherche revient à une
unionrequête qui peut entraîner une dégradation des performances. - Si une colonne qui apparaît dans plusieurs tables et comporte plusieurs types, fait partie de la clause projet, préférez ajouter un ColumnType à la clause de projet par rapport à la modification de la table avant de la passer.
find - Ajoutez des filtres basés sur le temps au prédicat. Utilisez une valeur de colonne datetime ou ingestion_time().
- Recherchez dans des colonnes spécifiques plutôt qu’une recherche en texte intégral.
- Il est préférable de ne pas référencer les colonnes qui apparaissent dans plusieurs tables et qui ont plusieurs types. Si le prédicat est valide lors de la résolution de ce type de colonnes pour plusieurs types, la requête revient à union.
Par exemple, consultez des exemples de cas où
findagit en tant qu’union.
Exemples
Exemples généraux
L’exemple suivant recherche toutes les lignes de toutes les tables de la base de données active dans laquelle n’importe quelle colonne inclut le mot Hernandez. Les enregistrements résultants sont transformés en fonction du schéma de sortie. La sortie inclut des lignes de la Customers table et de SalesTable la table de la ContosoSales base de données.
find "Hernandez"
Sortie
Ce tableau affiche les trois premières lignes de la sortie.
| source_ | emballer_ |
|---|---|
| Clientèle | {"CityName » :"Ballard »,"CompanyName » :"NULL »,"ContinentName » :"Amérique du Nord »,"CustomerKey » :5023,"Education » :"Partial High School »,"FirstName » :"Devin »,"Gender » :"M »,"LastName » :"Hernandez »,"MaritalStatus » :"S »,"Occupation » :"Clerical »,"RegionCountryName » :"United States »,"StateProvinceName » :"Washington"} |
| Clientèle | {"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"} |
| Clientèle | {"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 » :"Washington"} |
| ... | ... |
L’exemple suivant recherche toutes les lignes de toutes les tables de la base de données active dont le nom commence par C, et dans lequel n’importe quelle colonne inclut le mot Hernandez. Les enregistrements résultants sont transformés en fonction du schéma de sortie. À présent, la sortie contient uniquement les enregistrements de la Customers table.
find in (C*) where * has "Hernandez"
Sortie
Ce tableau affiche les trois premières lignes de la sortie.
| source_ | emballer_ |
|---|---|
| ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ConferenceSessions | {"conference » :"Ignite 2018 »,"sessionid » :"THR3115 »,"session_title » :"Azure Log Analytics : Présentation approfondie du langage de requête Azure Kusto. « ,"session_type » :"Theater »,"owner » :"Jean François Berenguer »,"participants » : »,"URL » :https://myignite.techcommunity.microsoft.com/sessions/66329" » ;,"level » :300,"session_location » :" »,"starttime » :null,"duration » :null,"time_and_duration » : » :" »,"kusto_affinity » :"Focus"} |
| ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ... | ... |
L’exemple suivant recherche toutes les lignes de toutes les tables de toutes les bases de données du cluster dans lesquelles n’importe quelle colonne inclut le mot Kusto.
Cette requête est une requête inter-bases de données .
Les enregistrements résultants sont transformés en fonction du schéma de sortie.
find in (database('*').*) where * has "Kusto"
Sortie
Ce tableau affiche les trois premières lignes de la sortie.
| source_ | emballer_ |
|---|---|
| database(« Samples »). ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| database(« Samples »). ConferenceSessions | {"conference » :"Ignite 2018 »,"sessionid » :"THR3115 »,"session_title » :"Azure Log Analytics : Présentation approfondie du langage de requête Azure Kusto. « ,"session_type » :"Theater »,"owner » :"Jean François Berenguer »,"participants » : »,"URL » :https://myignite.techcommunity.microsoft.com/sessions/66329" » ;,"level » :300,"session_location » :" »,"starttime » :null,"duration » :null,"time_and_duration » : » :" »,"kusto_affinity » :"Focus"} |
| database(« Samples »). ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ... | ... |
L’exemple suivant recherche toutes les lignes de toutes les tables dont le nom commence dans toutes les bases de données dont le nom commence KB et dans lequel n’importe quelle colonne inclut le mot Kusto.
Les enregistrements résultants sont transformés en fonction du schéma de sortie.
find in (database("S*").C*) where * has "Kusto"
Sortie
Ce tableau affiche les trois premières lignes de la sortie.
| source_ | emballer_ |
|---|---|
| ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ConferenceSessions | {"conference » :"Build 2021 »,"sessionid » :"CON-PRT103 »,"session_title » :"Table ronde : Rubriques avancées du langage de requête Kusto »,"session_type » :"Table ronde »,"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.000000Z »,"duration » :60,"time_and_duration » :"Mercredi, 26 mai\n8h30 - 9h30 GMT »,"kusto_affinity » :"Prioritaire"} |
| ... | ... |
L’exemple suivant recherche toutes les lignes de toutes les tables dont le nom commence dans toutes les bases de données dont le nom commence KB et dans lequel n’importe quelle colonne inclut le mot Kusto.
Les enregistrements résultants sont transformés en fonction du schéma de sortie.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
L’exemple suivant recherche toutes les lignes de toutes les tables dans lesquelles n’importe quelle colonne inclut le mot Kusto.
Les enregistrements résultants sont transformés en fonction du schéma de sortie.
find "Kusto"
Exemples de résultats de find sortie
Supposons que nous avons le contenu suivant de ces deux tables :
EventsTable1
| Session_Id | Niveau | Texte de l'événement | Version |
|---|---|---|---|
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informations | Texte1 | v1.0.0 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erreur | Texte2 | v1.0.0 |
| 28b8e46e-3c31-43cf-83cb-48921c3986fc | Erreur | Texte3 | v1.0.1 |
| 8f057b11-3281-45c3-a856-05ebb18a3c59 | Informations | Texte4 | v1.1.0 |
EventsTable2
| Session_Id | Niveau | Texte de l'événement | Nom de l'événement |
|---|---|---|---|
| f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informations | Autre texte1 | Événement1 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informations | Autre texte2 | Événement2 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erreur | Autre texte3 | Événement3 |
| 15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Erreur | Autre texte4 | Event4 |
L’exemple suivant recherche des enregistrements spécifiques dans EventsTable1 et EventsTable2 en fonction d’un Session_Id donné et d’un niveau d’erreur . Il projette ensuite trois colonnes spécifiques : EventText, Version et EventName, et regroupe toutes les autres colonnes restantes dans un objet dynamique.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Sortie
| source_ | Texte de l'événement | Version | Nom de l'événement | emballer_ |
|---|---|---|---|---|
| EventsTable1 | Texte2 | v1.0.0 | {"Session_Id » :"acbd207d-51aa-4df7-bfa7-be70eb68f04e », « Level » :"Error"} | |
| EventsTable2 | Autre texte3 | Événement3 | {"Session_Id » :"acbd207d-51aa-4df7-bfa7-be70eb68f04e », « Level » :"Error"} |
L’exemple suivant recherche les enregistrements dont la version est « v1.0.0 » ou EventName comme « Event1 », puis il projette (sélectionne) quatre colonnes spécifiques : Session_Id, EventText, Version et EventName à partir de ces résultats filtrés.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Sortie
| source_ | Session_Id | Texte de l'événement | Version | Nom de l'événement |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Texte1 | v1.0.0 | |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Texte2 | v1.0.0 | |
| EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Autre texte1 | Événement1 |
Remarque
Dans la pratique, les lignes EventsTable1 sont filtrées avec Version == 'v1.0.0' le prédicat et les lignes EventsTable2 sont filtrées avec EventName == 'Event1' le prédicat.
L’exemple suivant recherche la base de données pour tous les enregistrements avec un Session_Id qui correspond à « acbd207d-51aa-4df7-bfa7-be70eb68f04e ». Il récupère les enregistrements de toutes les tables et colonnes qui contiennent cette Session_Id spécifique.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Sortie
| source_ | Session_Id | Niveau | Texte de l'événement | emballer_ |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informations | Texte1 | {"Version » :"v1.0.0"} |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erreur | Texte2 | {"Version » :"v1.0.0"} |
| EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informations | Autre texte2 | {"EventName » :"Event2"} |
| EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erreur | Autre texte3 | {"EventName » :"Event3"} |
L’exemple suivant recherche les enregistrements dans la base de données avec le Session_Id spécifié et retourne toutes les colonnes de ces enregistrements en tant qu’objet dynamique unique.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Sortie
| source_ | emballer_ |
|---|---|
| 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"} |
Exemples de cas où find agit comme union
L’opérateur find dans Kusto peut parfois agir comme un union opérateur, principalement lorsqu’il est utilisé pour effectuer une recherche sur plusieurs tables.
L’exemple suivant crée d’abord une vue qui filtre EventsTable1 pour inclure uniquement les enregistrements au niveau de l’erreur. Ensuite, il recherche dans cette vue filtrée et dans la table EventsTable2 des enregistrements avec un Session_Id spécifique.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Les exemples suivants montrent comment l’opérateur find peut agir comme un union moment où une colonne apparaît dans plusieurs tables avec différents types. Dans ce cas, la ProcessId colonne est présente dans Table1 et Table2, mais avec différents types.
Pour cet exemple, créez deux tables en exécutant :
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- La requête suivante est exécutée en tant que
union.
find in (Table1, Table2) where ProcessId == 1001
Le schéma de résultat de sortie est (Level :string, Timestamp, ProcessId_string, ProcessId_int).
- La requête suivante est exécutée en tant que
union, mais produit un schéma de résultat différent.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Le schéma de résultat de sortie est (Level :string, Timestamp, ProcessId_string)