Vous pouvez exécuter des algorithmes dans Ultipa Manager, Ultipa CLI, ou Ultipa Driver (Restful API/Python/NodeJS/Java/Go).
Commande Algo
La clause UQL pour exécuter un algorithme commence avec la commande algo()
, le nom de l'algorithme doit être spécifié entre parenthèses.
Exemple : algo(degree)
Configuration des Paramètres
Configurez les paramètres de l'algorithme dans params()
et enveloppez les paires clé-valeur dans un format d'objet.
Exemple : algo(degree).params({ direction: 'in', order: 'asc' })
params()
ne peut pas être omis même si tous les paramètres ne sont pas définis.
Exemple : algo(degree).params()
Filtre de Node/Edge
Certains algorithmes (par exemple, Centralité de Degré, PageRank, K-Hop All, Louvain) supportent l'utilisation de node_filter()
et edge_filter()
pour spécifier les nodes ou edges participant au calcul.
// Calculer le degré du node avec UUID 1 dans le sous-graphe composé de nodes @account
algo(degree).params({
uuids: 1
}).node_filter({@account}) as d
return d
Méthodes d'Exécution
L'algorithme Ultipa prend en charge quatre types de méthodes d'exécution, et vous devez spécifier une méthode lors de l'exécution d'un algorithme :
Méthode d'Exécution |
Paramètre d'Exécution |
Description | Traitement Supplémentaire (1) |
---|---|---|---|
Task Writeback | write() |
Exécutez l'algorithme comme un task; vous pouvez spécifier que les résultats de l'algorithme sont écrits en retour dans un fichier (interface RPC) ou une propriété, et toute statistique de l'algorithme, si disponible, est écrite dans les informations du task | Non supporté |
Retour Direct | / | Retourne directement les résultats et statistiques de l'algorithme | Non supporté |
Retour en Flux | stream() |
Retourne les résultats de l'algorithme en flux de données | Supporté |
Retour des Statistiques | stats() |
Retourne les statistiques de l'algorithme en flux de données | Non supporté |
(1) Cela signifie utiliser les alias définis pour la clause algo()
dans les clauses UQL suivantes autres que la clause RETURN.
1. Task Writeback : Fichier, Propriété
Task writeback comprend le writeback de fichier et le writeback de propriété. Effectuer simultanément le writeback de fichier et de propriété n'est pas supporté. Pendant le writeback de fichier ou de propriété, toute statistique disponible est également écrite dans le task de l'algorithme.
1.1 Writeback de Fichier
Pour écrire les résultats de l'algorithme dans un ou plusieurs fichiers, vous devez configurer les noms de fichiers. Les fichiers écrits en retour n'ont pas d'en-tête, et chaque ligne de données est séparée par une virgule. Les statistiques de l'algorithme (si présentes) sont également écrites dans les informations du task de l'algorithme.
Syntaxe : Enveloppez l'objet file
dans write()
, les éléments de configuration dans l'objet file
sont détaillés dans l'introduction de chaque algorithme
algo(connected_component).params({
cc_type: 1
}).write({
file:{
filename_ids: 'f1',
filename_num: 'f2'
}
})
Vous pouvez utiliser .csv ou .txt comme suffixe de fichier, ou l'ignorer.
1.2 Writeback de Propriété
Pour écrire les résultats de l'algorithme dans une ou plusieurs propriétés de node ou d'edge, vous devez configurer les noms de propriété. Les statistiques de l'algorithme (si présentes) sont également écrites dans les informations du task de l'algorithme.
Le writeback de propriété est une opération en volume complet, c'est-à-dire écrit en retour à tous les nodes ou edges dans le graph actuel, donc vous n'avez pas besoin de spécifier un schema lors de la fourniture des noms de propriété. Pour chaque schema, si la propriété de write-back fournie n'existe pas, la propriété est automatiquement créée ; si une propriété de write-back existe déjà mais que le type de données est incohérent, le write-back de la propriété sous ce schema échouerait. Pour les nodes ou edges avec des résultats de calcul, le résultat de l'algorithme est écrit dans les propriétés ; pour ceux sans résultat, écrivez 0, une chaîne vide, etc., en fonction du type de données du résultat de l'algorithme.
Syntaxe : Enveloppez l'objet db
dans write()
, les éléments de configuration dans l'objet db
sont détaillés dans l'introduction de chaque algorithme
algo(closeness_centrality).params().write({
db:{
property: "centrality"
}
})
2. Retour Direct
Pour les algorithmes avec statistiques, il est supporté de définir deux alias, le premier est l'alias de résultat de l'algorithme et le second est l'alias de statistiques, l'ordre ne peut pas être modifié. Si l'algorithme n'a pas de statistiques, un seul alias peut être défini.
Syntaxe : Définissez directement l'(les) alias et assemblez-le avec une clause RETURN
algo(degree).params({
direction: 'out'
}) as a1, a2
return a1, a2
3. Retour en Flux
Un seul alias peut être défini, qui représente généralement le résultat de l'algorithme. Après avoir défini un alias pour une instruction d'algorithme, vous pouvez continuer à écrire d'autres clauses UQL et à utiliser cet alias, mais l'assemblage de clauses UQL insérant, modifiant ou supprimant des métadonnées avec des opérations n'est pas supporté.
Syntaxe : Utilisez stream()
et définissez un alias
algo(closeness_centrality).params().stream() as cc
where cc.centrality > 0.5
return cc._uuid
4. Retour des Statistiques
Un seul alias peut être défini, qui représente les statistiques. Après avoir défini un alias pour une instruction d'algorithme, vous pouvez retourner les statistiques.
Syntaxe : Utilisez stats()
et définissez un alias
algo(lpa).params({
node_label_property: @default.name,
k: 1,
loop_num: 5
}).stats() as labelCount
return labelCount