Partage via


Expressions, prédicats et fonctions GQL

Note

Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service, et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’utilisation supplémentaires pour les préversions de Microsoft Azure.

Les expressions GQL vous permettent d’effectuer des calculs, des comparaisons et des transformations sur des données au sein de vos requêtes. En combinaison avec les fonctions intégrées, les expressions fournissent des outils puissants pour le traitement, le filtrage et l’analyse des données dans les requêtes de graphique.

Littéraux

Les littéraux sont des expressions simples qui évaluent directement la valeur indiquée. Les littéraux de chaque type de valeur sont expliqués en détail dans les valeurs et les types valeur GQL.

Exemple :

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Pour obtenir une syntaxe littérale détaillée pour chaque type de données, consultez les valeurs GQL et les types valeur.

Predicates

Les prédicats sont des expressions booléennes, qui sont couramment utilisées pour filtrer les résultats dans les requêtes GQL. Ils sont évalués à TRUE, FALSEou UNKNOWN (null).

Caution

Lorsqu’il est utilisé comme filtre, les prédicats conservent uniquement les éléments pour lesquels le prédicat est TRUEévalué .

Prédicats de comparaison

Comparez les valeurs à l’aide de ces opérateurs :

  • = (égal)
  • <> (non égal)
  • < (inférieur à)
  • > (supérieur à)
  • <= (inférieur ou égal)
  • >= (supérieur ou égal)

GQL utilise une logique à trois valeurs où les comparaisons avec retour UNKNOWNnull :

Expression Résultat
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Pour un comportement de comparaison spécifique, consultez la documentation de chaque type valeur dans les valeurs GQL et les types valeur.

Exemple :

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Règles de contrainte de nombre :

Dans l’ordre de priorité :

  1. Les expressions de comparaison impliquant des arguments de types numériques approximatifs forcent tous les arguments à être d’un type numérique approximatif.
  2. Les expressions de comparaison impliquant des arguments des types entiers signés et non signés forcent tous les arguments à être d’un type entier signé.

Expression logiques

Combinez des conditions avec des opérateurs logiques :

  • AND (les deux conditions true)
  • OR (l’une ou l’autre condition true)
  • NOT (condition de négation)

Exemple :

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Prédicats d’existence de propriété

Pour vérifier si des propriétés existent, vous pouvez utiliser :

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Note

Tenter d’accéder à une propriété connue comme inexistante entraîne une erreur de syntaxe. L’accès à une propriété potentiellement inexistante s’évalue à null. La détermination de savoir si une propriété est connue ou potentiellement inexistante se fait en fonction du type de nœud ou d’arête accédée.

Répertorier les prédicats d’appartenance

Testez si les valeurs se trouvent dans des listes :

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

Prédicats de modèle de chaîne

Mettre en correspondance des chaînes à l’aide d’un modèle correspondant :

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

Expressions arithmétiques

Utilisez des opérateurs arithmétiques standard avec des valeurs numériques :

  • + (ajout)
  • - (soustraction)
  • * (multiplication)
  • / (division)

Les opérateurs arithmétiques suivent des conventions mathématiques générales.

Préséance:

En règle générale, les opérateurs suivent les règles de précédence des opérateurs établies, comme * avant +. Utilisez des parenthèses pour contrôler l’ordre d’évaluation si nécessaire.

Exemple :

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Règles de contrainte :

Dans l’ordre de priorité :

  1. Les expressions arithmétiques impliquant des arguments de types nombre approximatifs retournent un résultat d’un type numérique approximatif.
  2. Les expressions arithmétiques impliquant des arguments des types entiers signés et non signés retournent un résultat d’un type entier signé.

Exemple :

LET birth_year = p.birthday / 10000
RETURN birth_year

Accès à la propriété

Propriétés d’accès à l’aide de la notation par points :

p.firstName
edge.creationDate

Lister l’accès

Accéder aux éléments de liste à l’aide de l’indexation de base zéro :

interests[0]    -- first element
interests[1]    -- second element

Fonctions intégrées

GQL prend en charge différentes fonctions intégrées pour le traitement et l’analyse des données.

Fonctions d'agrégation

Les fonctions d’agrégation permettent d’évaluer une expression sur un ensemble de lignes et d’obtenir une valeur de résultat finale en combinant les valeurs calculées pour chaque ligne. Les fonctions d’agrégation suivantes sont prises en charge pour le graphe dans Microsoft Fabric :

  • count(*) - compte les lignes
  • sum(expression) - somme des valeurs numériques
  • avg(expression) - Moyennes des valeurs numériques
  • min(expression) - recherche la valeur minimale
  • max(expression) - recherche la valeur maximale
  • collect_list(expression) - collecte des valeurs dans une liste

En général, les fonctions d’agrégation ignorent les valeurs Null et retournent toujours une valeur Null lorsqu’aucune valeur d’entrée matérielle n’est fournie. Vous pouvez utiliser coalesce pour obtenir une valeur par défaut différente : coalesce(sum(expr), 0). La seule exception est la count fonction d’agrégation, qui compte toujours les valeurs non null fournies, retournant 0 s’il n’y en a pas. Permet count(*) également d’inclure des valeurs Null dans le nombre.

Les fonctions d’agrégation sont utilisées de trois façons différentes :

  • Pour les agrégats informatiques (verticaux) sur des tables entières
  • Pour les agrégats informatiques (verticaux) sur les sous-tables déterminées par une clé de regroupement
  • Pour les agrégats informatiques (horizontaux) sur les éléments d’une liste de groupes

Agrégats verticaux :

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

Agrégats horizontaux :

L’agrégation horizontale calcule les agrégats sur les éléments des variables de liste de groupes à partir de modèles de longueur variable :

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

L’agrégation horizontale est toujours prioritaire sur l’agrégation verticale. Pour convertir une liste de groupes en liste régulière, utilisez collect_list(edges).

Note

Pour une couverture complète des techniques d’agrégation, notamment la liaison de bord de longueur variable et la combinaison d’agrégation horizontale/verticale, consultez Techniques d’agrégation avancées.

Fonctions de chaîne

  • char_length(string) - retourne la longueur de chaîne
  • upper(string)- retourne la variante majuscule de la chaîne fournie (US ASCII uniquement)
  • lower(string)- retourne une variante minuscule de chaîne fournie (US ASCII uniquement)
  • trim(string) - supprime les espaces blancs de début et de fin
  • string_join(list, separator) - joint les éléments de liste avec séparateur

Exemple :

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

Fonctions graphiques

  • nodes(path) - retourne des nœuds à partir d’une valeur de chemin d’accès
  • edges(path) - retourne des arêtes à partir d’une valeur de chemin d’accès
  • labels(node_or_edge) - retourne les étiquettes d’un nœud ou d’un bord sous forme de liste de chaînes

Exemple :

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues

Fonctions de liste

  • size(list) - retourne la taille d’une valeur de liste
  • trim(list,n) - découper une liste pour qu’elle soit au maximum de taille n

Exemple :

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

Fonctions temporelles

  • zoned_datetime() - retourne datetime en zone actuelle
  • zoned_datetime("2025-09-12T10:10:52Z") - retourne datetime interzone donnée par l’argument au format ISO 8601

Exemple :

RETURN zoned_datetime() AS now

Fonctions génériques

  • coalesce(value1, value2, ...) - retourne la première valeur non null

Exemple :

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name