Search Shortcut cmd + k | ctrl + k
onager

A DuckDB extension for graph data analytics

Maintainer(s): habedi

Installing and Loading

INSTALL onager FROM community;
LOAD onager;

Example

-- 1. Check extension version
SELECT onager_version();

-- 2. Create a graph
SELECT onager_create_graph('demo', true);

-- 3. Add nodes and edges
SELECT onager_add_node('demo', 1);
SELECT onager_add_node('demo', 2);
SELECT onager_add_edge('demo', 1, 2, 1.0);

-- 4. Run analytics (e.g., node count)
SELECT onager_node_count('demo');

-- 5. Cleanup
SELECT onager_drop_graph('demo');

About onager

Onager is a graph analytics toolbox for DuckDB. For more information, visit the GitHub repository or the Onager documentation.

Added Functions

function_name function_type description comment examples
onager_create_graph scalar Create a named graph (0=success) Returns: integer. Params: (name, directed) [select onager_create_graph('my_graph', true);]
onager_drop_graph scalar Delete a named graph Returns: integer. Params: (name) [select onager_drop_graph('my_graph');]
onager_add_node scalar Add a node to graph Returns: integer. Params: (graph, node_id) [select onager_add_node('my_graph', 1);]
onager_add_edge scalar Add a weighted edge Returns: integer. Params: (graph, src, dst, weight) [select onager_add_edge('my_graph', 1, 2, 1.0);]
onager_list_graphs scalar List all graphs (JSON array) Returns: varchar. Params: () [select onager_list_graphs();]
onager_node_count scalar Count nodes in graph Returns: bigint. Params: (graph) [select onager_node_count('my_graph');]
onager_edge_count scalar Count edges in graph Returns: bigint. Params: (graph) [select onager_edge_count('my_graph');]
onager_node_in_degree scalar In-degree of a node Returns: bigint. Params: (graph, node) [select onager_node_in_degree('my_graph', 1);]
onager_node_out_degree scalar Out-degree of a node Returns: bigint. Params: (graph, node) [select onager_node_out_degree('my_graph', 1);]
onager_ctr_pagerank table PageRank centrality Returns: node_id, rank. Params: (edges [, damping, iterations, directed]) [select * from onager_ctr_pagerank((select src, dst from edges_table));]
onager_ctr_degree table Degree centrality Returns: node_id, in_degree, out_degree. Params: (edges [, directed]) [select * from onager_ctr_degree((select src, dst from edges_table));]
onager_ctr_betweenness table Betweenness centrality Returns: node_id, betweenness. Params: (edges [, normalized]) [select * from onager_ctr_betweenness((select src, dst from edges_table));]
onager_ctr_closeness table Closeness centrality Returns: node_id, closeness. Params: (edges) [select * from onager_ctr_closeness((select src, dst from edges_table));]
onager_ctr_eigenvector table Eigenvector centrality Returns: node_id, eigenvector. Params: (edges [, max_iter, tolerance]) [select * from onager_ctr_eigenvector((select src, dst from edges_table));]
onager_ctr_katz table Katz centrality Returns: node_id, katz. Params: (edges [, alpha, max_iter, tolerance]) [select * from onager_ctr_katz((select src, dst from edges_table), alpha := 0.1);]
onager_ctr_harmonic table Harmonic centrality Returns: node_id, harmonic. Params: (edges) [select * from onager_ctr_harmonic((select src, dst from edges_table));]
onager_ctr_personalized_pagerank table Personalized PageRank Returns: node_id, score. Params: (edges_with_pers_columns [, damping, max_iter, tolerance]) [select * from onager_ctr_personalized_pagerank((select e.src, e.dst, p.node, p.weight from edges_table e cross join (values (1::bigint, 1.0)) p(node, weight)));]
onager_ctr_voterank table VoteRank influential spreaders Returns: node_id. Params: (edges [, num_seeds]) [select * from onager_ctr_voterank((select src, dst from edges_table), num_seeds := 3);]
onager_ctr_local_reaching table Local reaching centrality Returns: node_id, centrality. Params: (edges [, distance]) [select * from onager_ctr_local_reaching((select src, dst from edges_table), distance := 2);]
onager_ctr_laplacian table Laplacian centrality Returns: node_id, centrality. Params: (edges) [select * from onager_ctr_laplacian((select src, dst from edges_table));]
onager_cmm_louvain table Louvain modularity optimization Returns: node_id, community. Params: (edges [, seed]) [select * from onager_cmm_louvain((select src, dst from edges_table));]
onager_cmm_components table Connected components Returns: node_id, component. Params: (edges) [select * from onager_cmm_components((select src, dst from edges_table));]
onager_cmm_label_prop table Label propagation Returns: node_id, label. Params: (edges) [select * from onager_cmm_label_prop((select src, dst from edges_table));]
onager_cmm_girvan_newman table Girvan-Newman edge betweenness Returns: node_id, community. Params: (edges [, communities]) [select * from onager_cmm_girvan_newman((select src, dst from edges_table), communities := 2);]
onager_cmm_spectral table Spectral clustering Returns: node_id, community. Params: (edges [, k, seed]) [select * from onager_cmm_spectral((select src, dst from edges_table), k := 2);]
onager_cmm_infomap table Infomap community detection Returns: node_id, community. Params: (edges [, max_iter, seed]) [select * from onager_cmm_infomap((select src, dst from edges_table));]
onager_lnk_jaccard table Jaccard coefficient Returns: node1, node2, coefficient. Params: (edges) [select * from onager_lnk_jaccard((select src, dst from edges_table));]
onager_lnk_adamic_adar table Adamic-Adar index Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_adamic_adar((select src, dst from edges_table));]
onager_lnk_pref_attach table Preferential attachment Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_pref_attach((select src, dst from edges_table));]
onager_lnk_resource_alloc table Resource allocation Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_resource_alloc((select src, dst from edges_table));]
onager_lnk_common_neighbors table Common neighbors count Returns: node1, node2, count. Params: (edges) [select * from onager_lnk_common_neighbors((select src, dst from edges_table));]
onager_mtr_diameter table Graph diameter Returns: diameter. Params: (edges) [select * from onager_mtr_diameter((select src, dst from edges_table));]
onager_mtr_radius table Graph radius Returns: radius. Params: (edges) [select * from onager_mtr_radius((select src, dst from edges_table));]
onager_mtr_avg_clustering table Average clustering coefficient Returns: avg_clustering. Params: (edges) [select * from onager_mtr_avg_clustering((select src, dst from edges_table));]
onager_mtr_avg_path_length table Average shortest path length Returns: avg_path_length. Params: (edges) [select * from onager_mtr_avg_path_length((select src, dst from edges_table));]
onager_mtr_transitivity table Global clustering (transitivity) Returns: transitivity. Params: (edges) [select * from onager_mtr_transitivity((select src, dst from edges_table));]
onager_mtr_triangles table Triangle count per node Returns: node_id, triangles. Params: (edges) [select * from onager_mtr_triangles((select src, dst from edges_table));]
onager_mtr_assortativity table Degree assortativity coefficient Returns: assortativity. Params: (edges) [select * from onager_mtr_assortativity((select src, dst from edges_table));]
onager_mtr_density table Graph density (0 to 1) Returns: density. Params: (edges [, directed]) [select * from onager_mtr_density((select src, dst from edges_table));]
onager_pth_dijkstra table Shortest paths from source Returns: node_id, distance. Params: (edges [, source]) [select * from onager_pth_dijkstra((select src, dst from edges_table), source := 1);]
onager_pth_bellman_ford table Shortest paths (negative weights) Returns: node_id, distance. Params: (weighted_edges [, source]) [select * from onager_pth_bellman_ford((select src, dst, weight from edges_table), source := 1);]
onager_pth_floyd_warshall table All-pairs shortest paths Returns: src, dst, distance. Params: (weighted_edges) [select * from onager_pth_floyd_warshall((select src, dst, weight from edges_table));]
onager_trv_bfs table Breadth-first traversal Returns: node_id. Params: (edges [, source]) [select * from onager_trv_bfs((select src, dst from edges_table), source := 1);]
onager_trv_dfs table Depth-first traversal Returns: node_id. Params: (edges [, source]) [select * from onager_trv_dfs((select src, dst from edges_table), source := 1);]
onager_apx_max_clique table Maximum clique (approximation) Returns: node_id. Params: (edges) [select * from onager_apx_max_clique((select src, dst from edges_table));]
onager_apx_independent_set table Maximum independent set (approx) Returns: node_id. Params: (edges) [select * from onager_apx_independent_set((select src, dst from edges_table));]
onager_apx_vertex_cover table Minimum vertex cover (approx) Returns: node_id. Params: (edges) [select * from onager_apx_vertex_cover((select src, dst from edges_table));]
onager_apx_tsp table TSP tour (greedy approx) Returns: order, node_id. Params: (weighted_edges) [select * from onager_apx_tsp((select src, dst, weight from edges_table));]
onager_mst_kruskal table Kruskal's MST Returns: src, dst, weight. Params: (weighted_edges) [select * from onager_mst_kruskal((select src, dst, weight from edges_table));]
onager_mst_prim table Prims's MST Returns: src, dst, weight. Params: (weighted_edges) [select * from onager_mst_prim((select src, dst, weight from edges_table));]
onager_gen_erdos_renyi table Random graph (G(n,p)) Returns: src, dst. Params: (n, p [, seed]) [select * from onager_gen_erdos_renyi(100, 0.1, seed := 42);]
onager_gen_barabasi_albert table Scale-free graph Returns: src, dst. Params: (n, m [, seed]) [select * from onager_gen_barabasi_albert(100, 5, seed := 42);]
onager_gen_watts_strogatz table Small-world graph Returns: src, dst. Params: (n, k, beta [, seed]) [select * from onager_gen_watts_strogatz(100, 4, 0.1, seed := 42);]
onager_sub_ego_graph table Ego graph around a node Returns: src, dst. Params: (edges [, center, radius]) [select * from onager_sub_ego_graph((select src, dst from edges_table), center := 1, radius := 2);]
onager_sub_k_hop table Nodes within k hops Returns: node_id. Params: (edges [, start, k]) [select * from onager_sub_k_hop((select src, dst from edges_table), start := 1, k := 2);]
onager_sub_induced table Induced subgraph Returns: src, dst. Params: (edges_with_filter_column) [select * from onager_sub_induced((select e.src, e.dst, f.node from edges_table e cross join filter_nodes f));]
onager_par_pagerank table Parallel PageRank Returns: node_id, rank. Params: (edges [, damping, iterations, directed]) [select * from onager_par_pagerank((select src, dst from edges_table));]
onager_par_bfs table Parallel BFS traversal Returns: node_id. Params: (edges [, source]) [select * from onager_par_bfs((select src, dst from edges_table), source := 1);]
onager_par_shortest_paths table Parallel shortest paths Returns: node_id, distance. Params: (edges [, source]) [select * from onager_par_shortest_paths((select src, dst from edges_table), source := 1);]
onager_par_components table Parallel connected components Returns: node_id, component. Params: (edges) [select * from onager_par_components((select src, dst from edges_table));]
onager_par_clustering table Parallel clustering coefficients Returns: node_id, coefficient. Params: (edges) [select * from onager_par_clustering((select src, dst from edges_table));]
onager_par_triangles table Parallel triangle count Returns: node_id, triangles. Params: (edges) [select * from onager_par_triangles((select src, dst from edges_table));]
onager_version scalar Extension version Returns: varchar. Params: () [select onager_version();]
onager_last_error scalar Last error message Returns: varchar. Params: () [select onager_last_error();]

Overloaded Functions

This extension does not add any function overloads.

Added Types

This extension does not add any types.

Added Settings

This extension does not add any settings.