开发者生态
evening
DuckPGQ – 用于图形工作负载的 DuckDB 社区扩展
2026-07-24
1 阅读
约6分钟阅读
rzk
字号:
DuckPGQ DuckPGQ 是针对图形工作负载的 DuckDB 社区扩展,支持 SQL/PGQ 标准。利用 DuckDB 的强大功能,将高性能、基于 SQL 的图形查询功能直接引入您的分析工作流程。安装并加载 DuckPGQ CLI Python NodeJS R Java 从社区安装 duckpgq ;加载鸭pgq;导入 duckdb conn = duckdb 。连接() 连接。 install_extension(“duckpgq”,存储库=“社区”)conn。 load_extension ( "duckpgq" ) import { DuckDBInstance } from '@duckdb/node-api' ; const 实例 = 等待 DuckDBInstance 。创造 (); const 连接 = 等待实例。连接 ();等待连接。 run(“从社区安装duckpgq”);等待连接。运行(“加载鸭pgq”);库(duckdb)con <- dbConnect(duckdb())dbExecute(con,“从社区安装duckpgq”)dbExecute(con,“加载duckpgq”)连接conn = DriverManager。 getConnection("jdbc:duckdb:");语句 st = conn 。创建语句();英石 。执行(“从社区安装duckpgq”);英石 。执行(“加载鸭pgq”);主要功能 SQL/PGQ 标准 支持与 SQL/PGQ 的图形模式匹配,遵循 SQL:2023 标准。高性能利用 DuckDB 进行高效的进程内图形分析。易于安装 通过简单的设置过程与 DuckDB 无缝集成,无需依赖项。开源社区驱动、可扩展且免费使用。跨域探索 DuckPGQ 社交网络 航空公司数据 财务数据设置 ATTACH 'https://github.com/Dtenwolde/duckpgq-docs/raw/refs/heads/main/datasets/snb.duckdb' ;使用snb;从社区安装 duckpgq ;加载鸭子pgq;创建或替换属性图 snb 顶点表(Person、论坛) 边缘表(Person_knows_person 源密钥(Person1Id)参考人员(id)目标密钥(Person2Id)参考人员(id)标签知道、Forum_hasMember_Person 源密钥(ForumId)参考论坛(id)目标键 ( PersonId ) 参考人 ( id ) 标签 hasMember );最短路径查询 查找共同朋友 最受欢迎的人 论坛最受关注者的计数 -- 查找从一个人到所有其他人的最短路径 FROM GRAPH_TABLE ( snb MATCH p = ANY SHORTEST ( p1 : person WHERE p1 . id = 14 ) - [ k : Knows ] ->* ( p2 : person ) COLUMNS ( p1 . id , p2 . id )如 other_person_id 、 element_id ( p )、 path_length ( p )) ); -- 查找两个用户之间的共同好友 FROM GRAPH_TABLE ( snb MATCH ( p1 : Person WHERE p1 . id = 16 ) - [ k : Knows ] -> ( p2 : Person ) <- [ k2 : Knows ] - ( p3 : Person WHERE p3 . id = 32 ) COLUMNS ( p2 .firstName ) ); -- 查找 3 个最受欢迎的人 FROM GRAPH_TABLE ( snb MATCH ( follower : Person ) - [ follow : Knows ] -> ( person : Person ) COLUMNS ( person . id AS personID , person . Firstname , person . Lastname , follower . id AS followerID ) ) SELECT personID , Firstname , Lastname , COUNT ( followerID ) AS numFollowers GROUP BY ALL ORDER BY numFollowers DESC LIMIT 3 ; -- 最受关注者发布的论坛数量WITH mfp AS (FROM GRAPH_TABLE (snb MATCH (follower: Person) - [follows:knows] -> (person: Person) COLUMNS (person.id AS personID, person.firstname, follower.id AS followerID)) SELECT personID,firstname,COUNT(followerID)AS numFollowers GROUP BY ALL ORDER BY numFollowers DESC LIMIT 1) FROM mfp, GRAPH_TABLE(snb MATCH(person:Person)<-[fhm:hasMember]-(f:Forum)COLUMNS(person.id AS personID,f.id as forumId)) mem SELECT mfp。人员 ID 、 mfp 。名字,mfp。 numFollowers, count (mem.forumId) forumCount WHERE mfp. personID = 内存 . personID 全部分组;将 ATTACH 'https://github.com/Dtenwolde/duckpgq-docs/raw/refs/heads/airline-data/datasets/airline-data-small.duckdb' 设置为航空公司;使用航空公司;从社区安装 duckpgq ;加载鸭子pgq;创建属性图飞行图顶点表(飞机数据,机场数据,预订,航班,机票,座位)边缘表(路线源键(出发机场)参考机场数据(机场代码)目的地键(到达机场)参考机场数据(机场代码),票务航班源密钥( Ticket_no ) 参考机票 ( Ticket_no ) 目的地密钥 ( Flight_id ) 参考航班 ( Flight_id )、bookings_tickets 源密钥 ( book_ref ) 参考预订 ( book_ref ) 目的地密钥 ( Ticket_no ) 参考机票 ( Ticket_no )、登机牌 源密钥 ( Ticket_no ) 参考机票 ( Ticket_no ) ) 目的地键 ( Seat_no ) 参考座位 ( Seat_no ) );机场之间的最短路线 平均座位最贵 FROM ( SELECT unnest ( Flights ) AS 航班 FROM GRAPH_TA
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱