Jupyter and iPython extension for NebulaGraph
Project description
ipython-ngql
is a Python package that enhances your ability to connect to NebulaGraph from your Jupyter Notebook or iPython. It simplifies the process for data scientists to create, debug, and share all-in-one Jupyter Notebooks with NebulaGraph interaction embedded to facilitate easier collaboration.
ipython-ngql
draws inspiration from ipython-sql, created by Catherine Devlin
Get Started
Installation
ipython-ngql
could be installed either via pip or from this git repo itself.
Install via pip
pip install ipython-ngql
Install inside the repo
git clone git@github.com:wey-gu/ipython-ngql.git
cd ipython-ngql
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;
There will be other options in future, i.e. from a
.ngql
file.
Query String with Variables
ipython-ngql
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
Configure ngql_result_style
By default, ipython-ngql
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:https://github.com/wey-gu/ipython-ngql/blob/main/examples/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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ipython-ngql-0.7.4.tar.gz
.
File metadata
- Download URL: ipython-ngql-0.7.4.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad3346bb414261f16e8d9f9b284deb8f377ae88e91d7738ea92eff1c901e1dab |
|
MD5 | 0184bd97147602c1c7185d517ddf9c84 |
|
BLAKE2b-256 | dacc4377eafe22b1c7026e11fef83bf7628383c5d05fdb66ac05ef9e02cd2ffc |
File details
Details for the file ipython_ngql-0.7.4-py3-none-any.whl
.
File metadata
- Download URL: ipython_ngql-0.7.4-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60b113d7cb4912de580f995751379e95cedd112199acac704dd35a67362ec621 |
|
MD5 | fed3c280faf753dee66456fa0fe5de5c |
|
BLAKE2b-256 | 316281d6c5717dad9666dab672220ba4cb36300316653b568d2c7846b244bcbe |