$npx -y skills add neo4j-contrib/neo4j-skills --skill neo4j-aura-graph-analytics-skillServerless Aura Graph Analytics (AGA) GDS Sessions — covers GdsSessions,
| 1 | ## When to Use |
| 2 | - Running GDS algorithms in Aura Graph Analytics GDS Sessions |
| 3 | - Creating `GdsSessions` or using `AuraGraphDataScience` |
| 4 | - Remote projecting connected Neo4j data with `gds.graph.project.remote(...)` |
| 5 | - Using AuraDB Cypher API projection with `{ memory: ... }` or `{ sessionId: ... }` |
| 6 | - Processing graph data from non-Neo4j sources (Pandas, Spark, CSV) |
| 7 | - On-demand / pipeline workloads — ephemeral sessions, pay per session-minute |
| 8 | - Full isolation from the live database during analytics |
| 9 | |
| 10 | ## When NOT to Use |
| 11 | - **Aura Pro with embedded GDS plugin** → `neo4j-gds-skill` |
| 12 | - **Self-managed Neo4j with embedded GDS plugin** → `neo4j-gds-skill` |
| 13 | - **Writing Cypher queries** → `neo4j-cypher-skill` |
| 14 | - **Snowflake Graph Analytics** → `neo4j-snowflake-graph-analytics-skill` |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Deployment Decision Table |
| 19 | |
| 20 | | Deployment | Use | |
| 21 | |---|---| |
| 22 | | Aura Free | ❌ AGA not available | |
| 23 | | Aura Pro | `neo4j-gds-skill` (embedded plugin) | |
| 24 | | AuraDB + Python client sessions | **this skill** | |
| 25 | | AuraDB + Cypher API | **this skill** for AGA-specific projection/session notes; `neo4j-cypher-skill` for query authoring | |
| 26 | | Self-managed Neo4j + AGA session | **this skill** | |
| 27 | | Self-managed Neo4j + embedded plugin | `neo4j-gds-skill` | |
| 28 | | Non-Neo4j data (Pandas, Spark) | **this skill** (standalone mode) | |
| 29 | |
| 30 | --- |
| 31 | |
| 32 | ## Defaults |
| 33 | |
| 34 | - `graphdatascience >= 1.15` required; `>= 1.18` for Spark |
| 35 | - Prefer v2 endpoints: `gds.v2.graph.project(...)`, `gds.v2.page_rank.*`, `gds.v2.graph.node_properties.*` |
| 36 | - Use snake_case parameters end-to-end; never mix v2 with camelCase params |
| 37 | - Use v1 if v2 endpoint missing/incompatible; label fallback |
| 38 | - Call `gds.v2.verify_session_connectivity()` after session creation |
| 39 | - Connected sessions: call `gds.v2.verify_db_connectivity()` when source DB access required |
| 40 | - Estimate memory before large sessions |
| 41 | - Set TTL; default 1h idle, max 7d |
| 42 | - Close session when done: `gds.delete()` or `sessions.delete(name)` stops billing |
| 43 | - Use `AuraAPICredentials.from_env()` — never hardcode credentials |
| 44 | |
| 45 | --- |
| 46 | |
| 47 | ## Installation |
| 48 | |
| 49 | ```bash |
| 50 | pip install "graphdatascience>=1.15" |
| 51 | ``` |
| 52 | |
| 53 | --- |
| 54 | |
| 55 | ## Key Patterns |
| 56 | |
| 57 | ### Step 1 — Authenticate |
| 58 | |
| 59 | ```python |
| 60 | import os |
| 61 | from graphdatascience.session import AuraAPICredentials, GdsSessions |
| 62 | |
| 63 | sessions = GdsSessions(api_credentials=AuraAPICredentials.from_env()) |
| 64 | # Reads: AURA_CLIENT_ID, AURA_CLIENT_SECRET, AURA_PROJECT_ID (optional) |
| 65 | # Create API credentials in Aura Console → Account → API credentials |
| 66 | ``` |
| 67 | |
| 68 | If member of multiple projects: set `AURA_PROJECT_ID` or pass `project_id=`. |
| 69 | |
| 70 | ### Step 2 — Estimate Memory |
| 71 | |
| 72 | ```python |
| 73 | from graphdatascience.session import AlgorithmCategory, SessionMemory |
| 74 | |
| 75 | memory = sessions.estimate( |
| 76 | node_count=1_000_000, |
| 77 | relationship_count=5_000_000, |
| 78 | algorithm_categories=[ |
| 79 | AlgorithmCategory.CENTRALITY, |
| 80 | AlgorithmCategory.NODE_EMBEDDING, |
| 81 | AlgorithmCategory.COMMUNITY_DETECTION, |
| 82 | ], |
| 83 | ) |
| 84 | # Returns SessionMemory tier, e.g. SessionMemory.m_8GB |
| 85 | # Fixed tiers: m_2GB … m_256GB — see references/limitations.md |
| 86 | ``` |
| 87 | |
| 88 | ### Step 3 — Create Session |
| 89 | |
| 90 | **Mode A — AuraDB connected:** |
| 91 | ```python |
| 92 | from graphdatascience.session import DbmsConnectionInfo, SessionMemory, CloudLocation |
| 93 | from datetime import timedelta |
| 94 | |
| 95 | db_connection = DbmsConnectionInfo( |
| 96 | username=os.environ["NEO4J_USERNAME"], |
| 97 | password=os.environ["NEO4J_PASSWORD"], |
| 98 | aura_instance_id=os.environ["AURA_INSTANCEID"], # from Aura Console URL |
| 99 | ) |
| 100 | |
| 101 | gds = sessions.get_or_create( |
| 102 | session_name="my-analysis", |
| 103 | memory=memory, |
| 104 | db_connection=db_connection, |
| 105 | ttl=timedelta(hours=2), |
| 106 | ) |
| 107 | gds.v2.verify_session_connectivity() |
| 108 | gds.v2.verify_db_connectivity() |
| 109 | ``` |
| 110 | |
| 111 | **Mode B — Self-managed Neo4j:** |
| 112 | ```python |
| 113 | db_connection = DbmsConnectionInfo( |
| 114 | uri=os.environ["NEO4J_URI"], # e.g. "bolt://my-server:7687" |
| 115 | username=os.environ["NEO4J_USERNAME"], |
| 116 | password=os.environ["NEO4J_PASSWORD"], |
| 117 | ) |
| 118 | gds = sessions.get_or_create( |
| 119 | session_name="my-analysis-sm", |
| 120 | memory=SessionMemory.m_8GB, |
| 121 | db_connection=db_connection, |
| 122 | ttl=timedelta(hours=2), |
| 123 | cloud_location=CloudLocation("gcp", "europe-west1"), |
| 124 | ) |
| 125 | gds.v2.verify_session_connectivity() |
| 126 | gds.v2.verify_db_connectivity() |
| 127 | ``` |
| 128 | |
| 129 | **Mode C — Standalone (no |