Skip to main content

Jupyter extension for NebulaGraph

Project description

for NebulaGraph Jupyter Docker Image Docker Extension GitHub release (latest by date) pypi-version Open In Colab Documentation

https://github.com/wey-gu/jupyter_nebulagraph/assets/1651790/10135264-77b5-4d3c-b68f-c5810257feeb

jupyter_nebulagraph (previously known as ipython-ngql) is a Python package designed to facilitate connections to NebulaGraph directly from Jupyter Notebooks or iPython environments. It streamlines the process of creating, debugging, and sharing Jupyter Notebooks that interact with NebulaGraph, enhancing collaborative efforts.

Inspired by ipython-sql by Catherine Devlin.

Get Started

Try it out in Google Colab.

Or check Docs: Get Started.

Installation

jupyter_nebulagraph could be installed either via pip or from this git repo itself.

Install via pip

pip install jupyter_nebulagraph

Install inside the repo

git clone git@github.com:wey-gu/jupyter_nebulagraph.git
cd jupyter_nebulagraph
python setup.py install

Load it in Jupyter Notebook or iPython

%load_ext ngql

Connect to NebulaGraph

Arguments as below are needed to connect a NebulaGraph DB instance:

Argument Description
--address or -addr IP address of the NebulaGraph Instance
--port or -P Port number of the NebulaGraph Instance
--user or -u User name
--password or -p Password

Below is an exmple on connecting to 127.0.0.1:9669 with username: "user" and password: "password".

%ngql --address 127.0.0.1 --port 9669 --user user --password password

Make Queries

Now two kind of iPtython Magics are supported:

Option 1: The one line stype with %ngql:

%ngql USE basketballplayer;
%ngql MATCH (v:player{name:"Tim Duncan"})-->(v2:player) RETURN v2.player.name AS Name;

Option 2: The multiple lines stype with %%ngql

%%ngql
SHOW TAGS;
SHOW HOSTS;

Query String with Variables

jupyter_nebulagraph supports taking variables from the local namespace, with the help of Jinja2 template framework, it's supported to have queries like the below example.

The actual query string should be GO FROM "Sue" OVER owns_pokemon ..., and "{{ trainer }}" was renderred as "Sue" by consuming the local variable trainer:

In [8]: vid = "player100"

In [9]: %%ngql
   ...: MATCH (v)<-[e:follow]- (v2)-[e2:serve]->(v3)
   ...:   WHERE id(v) == "{{ vid }}"
   ...: RETURN v2.player.name AS FriendOf, v3.team.name AS Team LIMIT 3;
Out[9]:   RETURN v2.player.name AS FriendOf, v3.team.name AS Team LIMIT 3;
FriendOf	Team
0	LaMarcus Aldridge	Trail Blazers
1	LaMarcus Aldridge	Spurs
2	Marco Belinelli	Warriors

Draw query results

Just call %ng_draw after queries with graph data.

# one query
%ngql GET SUBGRAPH 2 STEPS FROM "player101" YIELD VERTICES AS nodes, EDGES AS relationships;
%ng_draw

# another query
%ngql match p=(:player)-[]->() return p LIMIT 5
%ng_draw

Draw Graph Schema

%ng_draw_schema

Load Data from CSV

It's supported to load data from a CSV file into NebulaGraph with the help of ng_load_csv magic.

For example, to load data from a CSV file actor.csv into a space basketballplayer with tag player and vid in column 0, and props in column 1 and 2:

"player999","Tom Hanks",30
"player1000","Tom Cruise",40
"player1001","Jimmy X",33

Just run the below line:

%ng_load --source actor.csv --tag player --vid 0 --props 1:name,2:age --space basketballplayer

Some other examples:

# load CSV from a URL
%ng_load --source https://github.com/wey-gu/jupyter_nebulagraph/raw/main/examples/actor.csv --tag player --vid 0 --props 1:name,2:age --space demo_basketballplayer
# with rank column
%ng_load --source follow_with_rank.csv --edge follow --src 0 --dst 1 --props 2:degree --rank 3 --space basketballplayer
# without rank column
%ng_load --source follow.csv --edge follow --src 0 --dst 1 --props 2:degree --space basketballplayer

Configure ngql_result_style

By default, jupyter_nebulagraph will use pandas dataframe as output style to enable more human-readable output, while it's supported to use the raw thrift data format that comes from the nebula3-python itself.

This can be done ad-hoc with below one line:

%config IPythonNGQL.ngql_result_style="raw"

After the above line is executed, the output will be like this:

ResultSet(ExecutionResponse(
    error_code=0,
    latency_in_us=2844,
    data=DataSet(
        column_names=[b'Trainer_Name'],
        rows=[Row(
            values=[Value(
                sVal=b'Tom')]),
...
        Row(
            values=[Value(
                sVal=b'Wey')])]),
    space_name=b'pokemon_club'))

The result are always stored in variable _ in Jupyter Notebook, thus, to tweak the result, just refer a new var to it like:

In [1] : %config IPythonNGQL.ngql_result_style="raw"

In [2] : %%ngql USE pokemon_club;
    ...: GO FROM "Tom" OVER owns_pokemon YIELD owns_pokemon._dst as pokemon_id
    ...: | GO FROM $-.pokemon_id OVER owns_pokemon REVERSELY YIELD owns_pokemon._dst AS Trainer_Name;
    ...:
    ...:
Out[3]:
ResultSet(ExecutionResponse(
    error_code=0,
    latency_in_us=3270,
    data=DataSet(
        column_names=[b'Trainer_Name'],
        rows=[Row(
            values=[Value(
                sVal=b'Tom')]),
...
        Row(
            values=[Value(
                sVal=b'Wey')])]),
    space_name=b'pokemon_club'))

In [4]: r = _

In [5]: r.column_values(key='Trainer_Name')[0].cast()
Out[5]: 'Tom'

Get Help

Don't remember anything or even relying on the cheatsheet here, oen takeaway for you: the help!

In [1]: %ngql help

Examples

Jupyter Notebook

Please refer here: get_started.ipynb

iPython

In [1]: %load_ext ngql

In [2]: %ngql --address 192.168.8.128 --port 9669 --user root --password nebula
Connection Pool Created
Out[2]: 
                        Name
0           basketballplayer
1  demo_movie_recommendation
2                        k8s
3                       test

In [3]: %ngql USE basketballplayer;
   ...: %ngql MATCH (v:player{name:"Tim Duncan"})-->(v2:player) RETURN v2.player.name AS Name;
Out[3]: 
            Name
0    Tony Parker
1  Manu Ginobili

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipython-ngql-0.10.0.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

ipython_ngql-0.10.0-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file ipython-ngql-0.10.0.tar.gz.

File metadata

  • Download URL: ipython-ngql-0.10.0.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for ipython-ngql-0.10.0.tar.gz
Algorithm Hash digest
SHA256 bcc6a8b7def2ed756d4100fb65af7f8ef24b1d5054d0aeb677459a7c2e8d9496
MD5 e39ea076d81a5a9a56acaafe4357174b
BLAKE2b-256 08aa7606c75a2976d51474cd92c244e3c97eabba6fdfa7d30e8d70100c484e00

See more details on using hashes here.

File details

Details for the file ipython_ngql-0.10.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ipython_ngql-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0980d6bd9da5fbea0cb8dcb3e07b901f55d22ba4b35a6f31413bb9bc14db76b
MD5 985154028c9655423bbc5f8862b3da7f
BLAKE2b-256 8ecda5f29863cced4fe32dd5e47652e5ca389115b12a42d27a4b9a68c442eb6b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page