- Notifications
You must be signed in to change notification settings - Fork179
Library extending Jupyter notebooks to integrate with Apache TinkerPop, openCypher, and RDF SPARQL.
License
aws/graph-notebook
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The graph notebook provides an easy way to interact with graph databases using Jupyter notebooks. Using this open-source Python package, you can connect to any graph database that supports theApache TinkerPop,openCypher or theRDF SPARQL graph models. These databases could be running locally on your desktop or in the cloud. Graph databases can be used to explore a variety of use cases includingknowledge graphs andidentity graphs.
Instructions for connecting to the following graph databases:
Endpoint | Graph model | Query language |
---|---|---|
Gremlin Server | property graph | Gremlin |
Blazegraph | RDF | SPARQL |
Amazon Neptune | property graph or RDF | Gremlin, openCypher, or SPARQL |
Neo4J | property graph | Cypher |
We encourage others to contribute configurations they find useful. There is anadditional-databases
folder where more information can be found.
%%sparql
- Executes a SPARQL query against your configured database endpoint.Documentation
%%gremlin
- Executes a Gremlin query against your database using web sockets. The results are similar to those a Gremlin console would return.Documentation
%%opencypher
or%%oc
Executes an openCypher query against your database.Documentation
%%graph_notebook_config
- Sets the executing notebook's database configuration to the JSON payload provided in the cell body.
%%graph_notebook_vis_options
- Sets the executing notebook'svis.js options to the JSON payload provided in the cell body.
%%neptune_ml
- Set of commands to integrate with NeptuneML functionality, as describedhere.Documentation
TIP 👉%%sparql
,%%gremlin
, and%%oc
share asuite of common arguments that be used to customize the appearance of rendered graphs. Example usage of these arguments can also be found in the sample notebooks under02-Visualization.
TIP 👉 There is syntax highlighting for language query magic cells to help you structure your queries more easily.
%gremlin_status
- Obtain the status of Gremlin queries.Documentation
%sparql_status
- Obtain the status of SPARQL queries.Documentation
%opencypher_status
or%oc_status
- Obtain the status of openCypher queries.Documentation
%load
- Generate a form to submit a bulk loader job.Documentation
%load_ids
- Get ids of bulk load jobs.Documentation
%load_status
- Get the status of a providedload_id
.Documentation
%cancel_load
- Cancels a bulk load job. You can either provide a singleload_id
, or specify--all-in-queue
to cancel all queued (and not actively running) jobs.Documentation
%neptune_ml
- Set of commands to integrate with NeptuneML functionality, as describedhere. You can find a set of tutorial notebookshere.Documentation
%status
- Check the Health Status of the configured host endpoint.Documentation
%seed
- Provides a form to add data to your graph, using sets of insert queries instead of a bulk loader. Sample RDF and Property Graph data models are provided with this command. Alternatively, you can select a language type and provide a file path(or a directory path containing one or more of these files) to load the queries from.
%stream_viewer
- Interactively explore the Neptune CDC stream (if enabled)
%graph_notebook_config
- Returns a JSON payload that contains connection information for your host.
%graph_notebook_host
- Set the host endpoint to send queries to.
%graph_notebook_version
- Print the version of thegraph-notebook
package
%graph_notebook_vis_options
- Print the Vis.js options being used for rendered graphs
TIP 👉 You can list all the magics installed in the Python 3 kernel using the%lsmagic
command.
TIP 👉 Many of the magic commands support a--help
option in order to provide additional information.
This project includes many example Jupyter notebooks. It is recommended to explore them. All of the commands and features supported bygraph-notebook
are explained in detail with examples within the sample notebooks. You can find themhere. As this project has evolved, many new features have been added. If you are already familiar with graph-notebook but want a quick summary of new features added, a good place to start is the Air-Routes notebooks in the02-Visualization folder.
It is recommended to check theChangeLog.md file periodically to keep up to date as new features are added.
You will need:
- Python
- For JupyterLab 4x Version: 3.9.x-3.11.x
- For JupyterLab 3x Version: 3.9.x-3.10.14
- A graph database that provides one or more of:
- A SPARQL 1.1 endpoint
- An Apache TinkerPop Gremlin Server compatible endpoint
- An endpoint compatible with openCypher
Follow the instructions for either Jupyter Classic Notebook or JupyterLab based on your requirements.
pip install graph-notebook# Enable the visualization widgetjupyter nbclassic-extensionenable --py --sys-prefix graph_notebook.widgets# copy static html resourcespython -m graph_notebook.static_resources.installpython -m graph_notebook.nbextensions.install# copy premade starter notebookspython -m graph_notebook.notebooks.install --destination~/notebook/destination/dir# create nbconfig file and directory tree, if they do not already existmkdir~/.jupyter/nbconfigtouch~/.jupyter/nbconfig/notebook.json# start jupyter notebookpython -m graph_notebook.start_notebook --notebooks-dir~/notebook/destination/dir
Graph-notebook has been upgraded to support JupyterLab 4.x since version 5.0.0, featuring a modernized widget architecture and improved compatibility.
Choose your installation based on your JupyterLab version requirements.
# install jupyterlabpip install"jupyterlab>=4.3.5,<5"# Install the latest version with JupyterLab 4.x supportpip install graph-notebook# copy premade starter notebookspython -m graph_notebook.notebooks.install --destination~/notebook/destination/dir# start jupyterlabpython -m graph_notebook.start_jupyterlab --jupyter-dir~/notebook/destination/dir
# install jupyterlabpip install"jupyterlab>=3,<4"# Install legacy version for JupyterLab 3.x compatibilitypip install"graph-notebook<5.0.0"# copy premade starter notebookspython -m graph_notebook.notebooks.install --destination~/notebook/destination/dir# start jupyterlabpython -m graph_notebook.start_jupyterlab --jupyter-dir~/notebook/destination/dir
When attempting to run a line/cell magic on a new notebook in JupyterLab, you may encounter the error:
UsageError: Cell magic`%%graph_notebook_config` not found.
To fix this, run the following command, then restart JupyterLab.
python -m graph_notebook.ipython_profile.configure_ipython_profile
Alternatively, the magic extensions can be manually reloaded for a single notebook by running the following command in any empty cell.
%load_ext graph_notebook.magics
# upgrade graph-notebookpip install graph-notebook --upgrade
After the above command completes, rerun the commands given atJupyter Classic Notebook orJupyterLab 3.x based on which flavour is installed.
Configuration options can be set using the%graph_notebook_config
magic command. The command accepts a JSON object as an argument. The JSON object can contain any of the configuration options listed below. The command can be run multiple times to change the configuration. The configuration is stored in the notebook's metadata and will be used for all subsequent queries.
Configuration Option | Description | Default Value | Type |
---|---|---|---|
auth_mode | The authentication mode to use for Amazon Neptune connections | DEFAULT | string |
aws_region | The AWS region to use for Amazon Neptune connections | your-region-1 | string |
host | The host url to form a connection with | localhost | string |
load_from_s3_arn | The ARN of the S3 bucket to load data from [Amazon Neptune only] | string | |
neptune_service | The name of the Neptune service for the host url [Amazon Neptune only] | neptune-db | string |
port | The port to use when creating a connection | 8182 | number |
proxy_host | The proxy host url to route a connection through [Amazon Neptune only] | string | |
proxy_port | The proxy port to use when creating proxy connection [Amazon Neptune only] | 8182 | number |
ssl | Whether to make connections to the created endpoint with ssl or not [True/False] | False | boolean |
ssl_verify | Whether to verify the server's TLS certificate or not [True/False] | True | boolean |
sparql | SPARQL connection object | { "path": "sparql" } | string |
gremlin | Gremlin connection object | { "username": "", "password": "", "traversal_source": "g", "message_serializer": "graphsonv3" } | string |
neo4j | Neo4J connection object | { "username": "neo4j", "password": "password", "auth": true, "database": null } | string |
In a new cell in the Jupyter notebook, change the configuration using%%graph_notebook_config
and modify the fields forhost
,port
, andssl
. Optionally, modifytraversal_source
if your graph traversal source name differs from the default value,username
andpassword
if required by the graph store, ormessage_serializer
for a specific data transfer format. For a local Gremlin server (HTTP or WebSockets), you can use the following command:
%%graph_notebook_config{"host":"localhost","port":8182,"ssl":false,"gremlin": {"traversal_source":"g","username":"","password":"","message_serializer":"graphsonv3" }}
To setup a new local Gremlin Server for use with the graph notebook, check outadditional-databases/gremlin server
Change the configuration using%%graph_notebook_config
and modify the fields forhost
,port
, andssl
. For a local Blazegraph database, you can use the following command:
%%graph_notebook_config{"host":"localhost","port":9999,"ssl":false,"sparql": {"path":"sparql" }}
You can also make use of namespaces for Blazegraph by specifying the pathgraph-notebook
should use when querying your SPARQL like below:
%%graph_notebook_config{"host":"localhost","port":9999,"ssl":false,"sparql": {"path":"blazegraph/namespace/foo/sparql" }}
This will result in the urllocalhost:9999/blazegraph/namespace/foo/sparql
being used when executing any%%sparql
magic commands.
To setup a new local Blazegraph database for use with the graph notebook, check out theQuick Start from Blazegraph.
Change the configuration using%%graph_notebook_config
and modify the defaults as they apply to your Neptune instance.
%%graph_notebook_config{"host":"your-neptune-endpoint","neptune_service":"neptune-db","port":8182,"auth_mode":"DEFAULT","load_from_s3_arn":"","ssl":true,"ssl_verify":true,"aws_region":"your-neptune-region"}
%%graph_notebook_config{"host":"your-neptune-endpoint","neptune_service":"neptune-graph","port":443,"auth_mode":"IAM","ssl":true,"ssl_verify":true,"aws_region":"your-neptune-region"}
To setup a new Amazon Neptune cluster, check out theAmazon Web Services documentation.
When connecting the graph notebook to Neptune via a private endpoint, make sure you have a network setup to communicate to the VPC that Neptune runs on. If not, you can followthis guide.
In addition to the above configuration options, you can also specify the following options:
%%graph_notebook_config{"host":"clustername.cluster-ididididid.us-east-1.neptune.amazonaws.com","neptune_service":"neptune-db","port":8182,"ssl":true,"proxy_port":8182,"proxy_host":"host.proxy.com","auth_mode":"IAM","aws_region":"us-east-1","load_from_s3_arn":""}
See also: Connecting to Amazon Neptune from clients outside the Neptune VPC using AWS NetworkLoad Balancer
If you are running a SigV4 authenticated endpoint, ensure that your configuration hasauth_mode
set toIAM
:
%%graph_notebook_config{"host":"your-neptune-endpoint","neptune_service":"neptune-db","port":8182,"auth_mode":"IAM","load_from_s3_arn":"","ssl":true,"ssl_verify":true,"aws_region":"your-neptune-region"}
Additionally, you should have the following Amazon Web Services credentials available in a location accessible to Boto3:
- Access Key ID
- Secret Access Key
- Default Region
- Session Token (OPTIONAL. Use if you are using temporary credentials)
These variables must follow a specific naming convention, as listed in theBoto3 documentation
A list of all locations checked for Amazon Web Services credentials can also be foundhere.
Change the configuration using%%graph_notebook_config
and modify the fields forhost
,port
,ssl
, andneo4j
authentication.
If your Neo4J instance supportsmultiple databases, you can specify a database name via thedatabase
field. Otherwise, leave thedatabase
field blank to query the default database.
For a local Neo4j Desktop database, you can use the following command:
%%graph_notebook_config{"host":"localhost","port":7687,"ssl":false,"neo4j": {"username":"neo4j","password":"password","auth":true,"database":"" }}
Ensure that you also specify the%%oc bolt
option when submitting queries to the Bolt endpoint.
To setup a new local Neo4J Desktop database for use with the graph notebook, check out theNeo4J Desktop User Interface Guide.
A pre-release distribution can be built from the graph-notebook repository via the following steps:
# 1) Clone the repository and navigate into the clone directorygit clone https://github.com/aws/graph-notebook.gitcd graph-notebook# 2) Create a new virtual environment# 2a) Option 1 - pyenv# install pyenv - https://github.com/pyenv/pyenv?tab=readme-ov-file#installation# install pyenv-virtualenv - https://github.com/pyenv/pyenv-virtualenv?tab=readme-ov-file#installationpyenv install 3.10.13# Only if not already installed; this can be any supported Python 3 version in Prerequisitespyenv virtualenv 3.10.13 build-graph-notebookpyenvlocal build-graph-notebook# 2b) Option 2 - venvdeactivate conda deactivaterm -rf /tmp/venvpython3 -m venv --clear /tmp/venvsource /tmp/venv/bin/activate# 3) Install build dependenciespip install --upgrade build hatch hatch-jupyter-builderpip install"jupyterlab>=4.3.5,<5"# 4) Build the distributionpython3 -m build.
You should now be able to find the built distribution at
./dist/graph_notebook-5.0.1-py3-none-any.whl
And use it by following theinstallation steps, replacing
pipinstallgraph-notebook
with
pipinstall ./dist/graph_notebook-5.0.1-py3-none-any.whl--force-reinstall
SeeCONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.
About
Library extending Jupyter notebooks to integrate with Apache TinkerPop, openCypher, and RDF SPARQL.
Topics
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.