Search Shortcut cmd + k | ctrl + k
onager

A DuckDB extension for graph data analytics

Maintainer(s): habedi

Compatibility Matrix

This table covers all DuckDB releases that have not reached end-of-life, including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.

Platform 1.4.4 1.4.5 1.5.5 1.5.6 2.0.0
Linux AMD64
Linux ARM64
macOS AMD64
macOS ARM64
Windows AMD64
Windows ARM64
WebAssembly

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. You can also try Onager in your browser here.

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_node('my_graph', 2);]
onager_add_edge scalar Add a weighted edge Returns: integer. Params: (graph, src, dst, weight). Both endpoint nodes must be added first [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 [+ weights] [, damping, iterations, tolerance, 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, directed]) [select * from onager_ctr_betweenness((select src, dst from edges_table));]
onager_ctr_closeness table Closeness centrality Returns: node_id, closeness. Params: (edges [, directed]) [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, directed]) [select * from onager_ctr_eigenvector((select src, dst from edges_table));]
onager_ctr_katz table Katz centrality Returns: node_id, katz. Params: (edges [, alpha, beta, max_iter, tolerance, directed]) [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 [, directed]) [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, directed]) [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::double)) p(node, weight)));]
onager_ctr_voterank table VoteRank influential spreaders Returns: node_id. Params: (edges [, num_seeds, directed]) [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, directed]) [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 [, directed]) [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 [, max_iter, seed]) [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 [, directed]) [select * from onager_mtr_diameter((select src, dst from edges_table));]
onager_mtr_radius table Graph radius Returns: radius. Params: (edges [, directed]) [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 [, directed]) [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 [, directed]) [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 [+ weights] [, source, directed]) [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, directed]) [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 [, directed]) [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, directed]) [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, directed]) [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 [, start]) [select * from onager_apx_tsp((select src, dst, weight from edges_table), start := 1);]
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 Prim'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 [+ weights] [, damping, iterations, tolerance, directed]) [select * from onager_par_pagerank((select src, dst from edges_table));]
onager_par_bfs table Parallel BFS traversal Returns: [source,] node_id. Params: (edges [, source or sources, directed]) [select * from onager_par_bfs((select src, dst from edges_table), source := 1);]
onager_par_shortest_paths table Parallel shortest paths Returns: [source,] node_id, distance. Params: (edges [, source or sources, directed]) [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

name description input_type scope aliases typed_value
temp_directory Set the directory to which temporary files are written. VARCHAR GLOBAL [] post.db.tmp