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_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) [select * from onager_ctr_pagerank(edges_table);]
onager_ctr_degree table Degree centrality Returns: node_id, in_degree, out_degree. Params: (edges) [select * from onager_ctr_degree(edges_table);]
onager_ctr_betweenness table Betweenness centrality Returns: node_id, betweenness. Params: (edges) [select * from onager_ctr_betweenness(edges_table);]
onager_ctr_closeness table Closeness centrality Returns: node_id, closeness. Params: (edges) [select * from onager_ctr_closeness(edges_table);]
onager_ctr_eigenvector table Eigenvector centrality Returns: node_id, eigenvector. Params: (edges) [select * from onager_ctr_eigenvector(edges_table);]
onager_ctr_katz table Katz centrality Returns: node_id, katz. Params: (edges, alpha) [select * from onager_ctr_katz(edges_table, 0.1);]
onager_ctr_harmonic table Harmonic centrality Returns: node_id, harmonic. Params: (edges) [select * from onager_ctr_harmonic(edges_table);]
onager_ctr_personalized_pagerank table Personalized PageRank Returns: node_id, score. Params: (…) [select * from onager_ctr_personalized_pagerank(…);]
onager_ctr_voterank table VoteRank influential spreaders Returns: node_id. Params: (edges, num_seeds) [select * from onager_ctr_voterank(edges_table);]
onager_ctr_local_reaching table Local reaching centrality Returns: node_id, centrality. Params: (edges, distance) [select * from onager_ctr_local_reaching(edges_table);]
onager_ctr_laplacian table Laplacian centrality Returns: node_id, centrality. Params: (edges) [select * from onager_ctr_laplacian(edges_table);]
onager_cmm_louvain table Louvain modularity optimization Returns: node_id, community. Params: (edges [, seed]) [select * from onager_cmm_louvain(edges_table);]
onager_cmm_components table Connected components Returns: node_id, component. Params: (edges) [select * from onager_cmm_components(edges_table);]
onager_cmm_label_prop table Label propagation Returns: node_id, label. Params: (edges) [select * from onager_cmm_label_prop(edges_table);]
onager_cmm_girvan_newman table Girvan-Newman edge betweenness Returns: node_id, community. Params: (edges, communities) [select * from onager_cmm_girvan_newman(edges_table);]
onager_cmm_spectral table Spectral clustering Returns: node_id, community. Params: (edges, k) [select * from onager_cmm_spectral(edges_table, 2);]
onager_cmm_infomap table Infomap community detection Returns: node_id, community. Params: (edges) [select * from onager_cmm_infomap(edges_table);]
onager_lnk_jaccard table Jaccard coefficient Returns: node1, node2, coefficient. Params: (edges) [select * from onager_lnk_jaccard(edges_table);]
onager_lnk_adamic_adar table Adamic-Adar index Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_adamic_adar(edges_table);]
onager_lnk_pref_attach table Preferential attachment Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_pref_attach(edges_table);]
onager_lnk_resource_alloc table Resource allocation Returns: node1, node2, score. Params: (edges) [select * from onager_lnk_resource_alloc(edges_table);]
onager_lnk_common_neighbors table Common neighbors count Returns: node1, node2, count. Params: (edges) [select * from onager_lnk_common_neighbors(edges_table);]
onager_mtr_diameter table Graph diameter Returns: diameter. Params: (edges) [select * from onager_mtr_diameter(edges_table);]
onager_mtr_radius table Graph radius Returns: radius. Params: (edges) [select * from onager_mtr_radius(edges_table);]
onager_mtr_avg_clustering table Average clustering coefficient Returns: avg_clustering. Params: (edges) [select * from onager_mtr_avg_clustering(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(edges_table);]
onager_mtr_transitivity table Global clustering (transitivity) Returns: transitivity. Params: (edges) [select * from onager_mtr_transitivity(edges_table);]
onager_mtr_triangles table Triangle count per node Returns: node_id, triangles. Params: (edges) [select * from onager_mtr_triangles(edges_table);]
onager_mtr_assortativity table Degree assortativity coefficient Returns: assortativity. Params: (edges) [select * from onager_mtr_assortativity(edges_table);]
onager_mtr_density table Graph density (0 to 1) Returns: density. Params: (edges) [select * from onager_mtr_density(edges_table);]
onager_pth_dijkstra table Shortest paths from source Returns: node_id, distance. Params: (edges, source) [select * from onager_pth_dijkstra(edges_table, 1);]
onager_pth_bellman_ford table Shortest paths (negative weights) Returns: node_id, distance. Params: (weighted_edges, source) [select * from onager_pth_bellman_ford(edges_table, 1);]
onager_pth_floyd_warshall table All-pairs shortest paths Returns: src, dst, distance. Params: (weighted_edges) [select * from onager_pth_floyd_warshall(edges_table);]
onager_trv_bfs table Breadth-first traversal Returns: node_id. Params: (edges, source) [select * from onager_trv_bfs(edges_table, 1);]
onager_trv_dfs table Depth-first traversal Returns: node_id. Params: (edges, source) [select * from onager_trv_dfs(edges_table, 1);]
onager_apx_max_clique table Maximum clique (approximation) Returns: node_id. Params: (edges) [select * from onager_apx_max_clique(edges_table);]
onager_apx_independent_set table Maximum independent set (approx) Returns: node_id. Params: (edges) [select * from onager_apx_independent_set(edges_table);]
onager_apx_vertex_cover table Minimum vertex cover (approx) Returns: node_id. Params: (edges) [select * from onager_apx_vertex_cover(edges_table);]
onager_apx_tsp table TSP tour (greedy approx) Returns: order, node_id. Params: (weighted_edges) [select * from onager_apx_tsp(edges_table);]
onager_mst_kruskal table Kruskal's MST Returns: src, dst, weight. Params: (weighted_edges) [select * from onager_mst_kruskal(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);]
onager_gen_barabasi_albert table Scale-free graph Returns: src, dst. Params: (n, m [, seed]) [select * from onager_gen_barabasi_albert(100, 5);]
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);]
onager_sub_ego_graph table Ego graph around a node Returns: src, dst. Params: (edges, center, radius) [select * from onager_sub_ego_graph(edges_table, 1, 2);]
onager_sub_k_hop table Nodes within k hops Returns: node_id. Params: (edges, start, k) [select * from onager_sub_k_hop(edges_table, 1, 2);]
onager_sub_induced table Induced subgraph Returns: src, dst. Params: (edges, nodes) [select * from onager_sub_induced(edges_table);]
onager_par_pagerank table Parallel PageRank Returns: node_id, rank. Params: (edges) [select * from onager_par_pagerank(edges_table);]
onager_par_bfs table Parallel BFS traversal Returns: node_id. Params: (edges, source) [select * from onager_par_bfs(edges_table, 1);]
onager_par_shortest_paths table Parallel shortest paths Returns: node_id, distance. Params: (edges, source) [select * from onager_par_shortest_paths(edges_table, 1);]
onager_par_components table Parallel connected components Returns: node_id, component. Params: (edges) [select * from onager_par_components(edges_table);]
onager_par_clustering table Parallel clustering coefficients Returns: node_id, coefficient. Params: (edges) [select * from onager_par_clustering(edges_table);]
onager_par_triangles table Parallel triangle count Returns: node_id, triangles. Params: (edges) [select * from onager_par_triangles(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();]