可视化 Snowflake 表

这是一个简明但完整的示例,展示了如何使用 Neo4j 的 Graph Visualization for Python 库来可视化 Snowflake 中以表形式表示的图谱。

设置

我们将首先安装必需的 Python 库依赖。

[ ]:
%pip install snowflake-snowpark-python # Requires Python version <= 3.11
%pip install neo4j-viz

现在我们可以通过初始化一个新会话来设置与 Snowflake 的连接。请注意,根据您的 Snowflake 配置,您可能需要更多或更少的连接参数。

[ ]:
import os

from snowflake.snowpark import Session

# Configure according to your own setup
connection_parameters = {
    "account": os.environ.get("SNOWFLAKE_ACCOUNT"),
    "user": os.environ.get("SNOWFLAKE_USER"),
    "password": os.environ.get("SNOWFLAKE_PASSWORD"),
    "role": os.environ.get("SNOWFLAKE_ROLE"),
    "warehouse": os.environ.get("SNOWFLAKE_WAREHOUSE"),
}

session = Session.builder.configs(connection_parameters).create()

现在我们可以创建一个新的 Snowflake 数据库,用于存放我们的小示例表。如果您已有想要使用的数据库,可以跳过此步骤。

[ ]:
session.sql(
    "CREATE DATABASE IF NOT EXISTS nvl_example DATA_RETENTION_TIME_IN_DAYS = 1"
).collect()
session.sql("USE DATABASE nvl_example").collect()

创建表

接下来我们将为图谱中的节点创建一个新表,这些节点将代表各种类别的产品。

[ ]:
session.sql(
    "CREATE OR REPLACE TABLE products (id INT, name VARCHAR, category INT)"
).collect()

session.sql("""
INSERT INTO products VALUES
(1,  'Product 1',  1),
(2,  'Product 1A', 1),
(3,  'Product 1B', 1),
(4,  'Product 2',  2),
(5,  'Product 2A', 2),
(6,  'Product 2B', 2),
(7,  'Product 3',  3),
(8,  'Product 3A', 3),
(9,  'Product 3B', 3),
(10, 'Product 4',  4),
(11, 'Product 4A', 4),
(12, 'Product 4B', 4)
""").collect()

有些产品是某些父产品的“子产品”。现在我们创建一个表来编码这些产品之间的“PARENT”关系。

[ ]:
session.sql(
    "CREATE OR REPLACE TABLE parents (source INT, target INT, type VARCHAR)"
).collect()

session.sql("""
INSERT INTO parents VALUES
(2,  1,  'PARENT'),
(3,  1,  'PARENT'),
(5,  4,  'PARENT'),
(6,  4,  'PARENT'),
(8,  7,  'PARENT'),
(9,  7,  'PARENT'),
(11, 10, 'PARENT'),
(12, 10, 'PARENT')
""").collect()

获取数据

接下来,我们从 Snowflake 获取表并将其转换为 pandas DataFrames。此外,我们还重命名了大部分表列,使其符合 neo4j-viz API 的命名规范。

[ ]:
products_df = session.table("products").to_pandas().rename(columns={"NAME": "caption"})
parents_df = session.table("parents").to_pandas().rename(columns={"TYPE": "caption"})
products_df

渲染可视化

只需一个命令,我们就可以从这些表示节点和关系的表中创建一个 VisualizationGraph。为了增强可视化效果,我们还将利用 color_nodes 函数,该函数将为每个产品类别分配不同的颜色。

[ ]:
from neo4j_viz.pandas import from_dfs

VG = from_dfs(products_df, parents_df)

# Using the default Neo4j color scheme
VG.color_nodes(property="CATEGORY")

现在让我们使用默认渲染选项来渲染图谱。

[7]:
VG.render()
[7]:

您可以通过滚动来放大和缩小可视化视图,并通过点击并拖动节点来移动它们。

清理

最后,我们清理创建的示例数据库。

[ ]:
session.sql("DROP DATABASE IF EXISTS nvl_example").collect()
session.close()
© . All rights reserved.