cwida/duckpgq-extension
cwida/duckpgq-extension has 515 GitHub stars and 41 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-11 15:06 UTC. Last push 2026-11-04.
Comment ces chiffres sont mesurés
DuckDB extension that adds support for SQL/PGQ and graph algorithms
Progression mesurée des étoiles
- in 24h
- +1
- in 7 days
- Historique en cours
- in 15 days
- Historique en cours
- in 1 month
- Historique en cours
Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.
README.md
OriginalDuckPGQ
DuckPGQ is a DuckDB extension for graph workloads with support for SQL/PGQ.
For user documentation, examples, and background, see duckpgq.org.
Status
DuckPGQ is a research project and a work in progress. Feedback, bug reports, and contributions are welcome.
The SQL/PGQ syntax (CREATE, DROP, DESCRIBE and SUMMARIZE PROPERTY GRAPH, and GRAPH_TABLE queries) is
provided through DuckDB's composable GrammarExtension API, so DuckPGQ needs no patched or vendored parser.
See the grammar notes for activation, supported syntax, and how the grammar is wired in.
Installation
DuckPGQ is available as a DuckDB community extension:
INSTALL duckpgq FROM community;
LOAD duckpgq;
See the DuckPGQ community extension page for package availability.
Quick Example
SET active_grammar_extensions = ['duckpgq'];
CREATE TABLE Person(id BIGINT, name VARCHAR);
CREATE TABLE Person_knows_Person(person1id BIGINT, person2id BIGINT);
INSERT INTO Person VALUES
(1, 'Alice'),
(2, 'Bob');
INSERT INTO Person_knows_Person VALUES
(1, 2);
CREATE PROPERTY GRAPH social
VERTEX TABLES (
Person
)
EDGE TABLES (
Person_knows_Person
SOURCE KEY (person1id) REFERENCES Person (id)
DESTINATION KEY (person2id) REFERENCES Person (id)
LABEL Knows
);
SELECT *
FROM GRAPH_TABLE (snb
MATCH (a:Person)-[k:Knows]->(b:Person)
COLUMNS (a.id AS person, b.id AS friend)
);
Building From Source
Initialize submodules before building:
git submodule update --init --recursive
Build the extension and the bundled DuckDB shell:
make release GEN=ninja
For a debug build:
make debug GEN=ninja
Build artifacts are written under build/<build-type>/:
| Artifact | Release path | Debug path |
|---|---|---|
| DuckDB shell | build/release/duckdb |
build/debug/duckdb |
| Test runner | build/release/test/unittest |
build/debug/test/unittest |
| Loadable extension | build/release/extension/duckpgq/duckpgq.duckdb_extension |
build/debug/extension/duckpgq/duckpgq.duckdb_extension |
DuckPGQ uses the DuckDB extension build system. If dependency resolution fails, install and configure vcpkg, then set VCPKG_TOOLCHAIN_PATH to your vcpkg toolchain file.
Running a Local Build
Start the locally built DuckDB shell:
./build/release/duckdb
The extension is linked into this shell.
Enable the SQL/PGQ grammar on each connection with SET active_grammar_extensions = ['duckpgq'];.
Testing
Run the SQL test suite:
make test_release
Every test activates the grammar explicitly, including on each named connection it uses. The focused grammar
tests live under test/sql/grammar_extension/.
Run a single SQL logic test:
make test T=test/sql/pattern_matching/undirected_edges.test
Run clang-tidy checks:
make tidy-check
Repository Notes
- SQL tests live in
test/sql. - Extension source lives in
src. - Grammar integration lives under
src/core/parserand extends DuckDB's native grammar without a vendored parser. - Maintenance notes for updating DuckDB or parser dependencies are in docs/UPDATING.md.
- Aggregates over n:m joins are rewritten into factorized form by an optimizer extension, see
docs/FACTORIZED_JOINS.md. Disable it with
SET duckpgq_factorized_joins = false;, or only itsFACTORIZED_GROUP_JOINoperator withSET duckpgq_factorized_join_operator = false;, or the operator's dense-array counting withSET duckpgq_factorized_join_directory = false;. CREATE PROPERTY GRAPHverifies that every edge key references an existing vertex row and fails with an "Incomplete edge" error otherwise (rows modified afterwards are not re-checked). This lets theMATCHtranslation leave out vertex tables that a query only uses for their unique key, joining the incident edge tables to each other instead (VertexEliminationPlannerinsrc/core/functions/table/match.cpp). Disable the rewrite withSET duckpgq_vertex_join_elimination = false;.
Explorer des projets similaires
Asabeneh/30-Days-Of-Python
Le défi de programmation 30 Days of Python est un guide pas à pas pour apprendre le langage de programmation Python en 30 jours. Ce défi peut prendre plus de 100 jours. Avancez à votre rythme. Ces vidéos peuvent aussi vous aider : https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 étoilesgrafana/grafana
Plateforme ouverte et composable d’observabilité et de visualisation de données. Visualise les métriques, les journaux et les traces issus de plusieurs sources, comme Prometheus, Loki, Elasticsearch, InfluxDB, Postgres et bien d’autres.
77,830 étoilesredis/redis
Pour les développeurs qui créent des applications en temps réel pilotées par les données, Redis est le cache, le serveur de structures de données et le moteur de requêtes documentaires et vectorielles préféré, le plus rapide et le plus riche en fonctionnalités.
77,395 étoilesapache/superset
Apache Superset est une plateforme de visualisation et d'exploration de données.
75,473 étoiles