暂无图片
暂无图片
2
暂无图片
暂无图片
5
暂无图片

Oracle数据库23C中属性图分析加速实体关系洞察

甲骨文云技术 2023-11-08
589

Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。可以直接通过SQL使用GRAPH_TABLE运算符在属性图上运行图模式匹配查询,是的,您没看错,通过SQL Developer,Database Actions和其他支持Oracle DB 23C的SQL工具就可以直接操作。

本文通过示例详细介绍Oracle 数据库 23C中SQL使用和查询属性图,如果读者之前已经对Oracle Graph有了解,可以直接跳过第一部分,从第二部分 Oracle DB 23C中直接查询属性图开始阅读。

一、属性图和Oracle相关技术方案

本文涉及到的产品是Oracle Spatial and Graph,这里的Graph,不同于我们平时说的图片图形,在本文中指的是Property Graph,中文译作属性图,它由一组顶点(Vertex,代表相关实体,例如人,物,地点等)和一组边(Edge,实体之间关系,有方向或者无方向都可)组成。顶点和边有标签(Label),可以有多个属性(名称可以自己定义,例如Name,Age),这些属性用键值对表示。   

现实中很多数据关系可以抽象成属性图,这些属性图有的可以简单一些,只是表示实体之间的关系,例如人们之间是父子,夫妻还是朋友等;有的可以复杂一些,表示了不同类型实体之间的关系,例如人们对账户的拥有,人们对商品的购买,账户之间的转账等。

下图显示了一个银行账户之间抽象出来的属性图,非常简单,具有四个顶点和三个边。顶点具有标识符(数字类型,例如1,2),也有属性:名称(Name)。边具有方向性,用箭头表示从开始顶点到结束顶点。从中可以看出,顶点分别代表四个人的账户,而边表示出相互之间的转账关系和金额,其中RUSSEL HEINZELM和GRAHAM CHAMBERS分别向RUSSELLL RIVERA转账8402元和4993元,而RUSSELL RIVERA向HARRY POWELL转账5608元(可以为点或边增加属性来进一步丰富内容,例如设置顶点的属性余额Balance,设置边的属性转账日期时间等)。

而下图显示了一个交易系统抽取出来的更加复杂的属性图关系,里面顶点不仅仅代表人,还代表银行账号,购买的商品,可以看出来,Mary拥有一个账号A,这个账号A和多个账号之间有钱款交易,其中和John拥有的账号B之间有相互交易,而John购买了两个商品。   

属性图很适合进行实体之间关系的相关分析,例如找到和Mary有关系的所有点,包括她拥有的账号,账号购买的商品,和她有关的人等等,也可以找到循环交易的账号,或者识别Mary和John之间的联系等。

Oracle对属性图的支持在不断扩展,主要包括三层:

1、可扩展和持久的存储层

通过Oracle数据库中的属性图对象,支持对顶点和边存储,对图数据索引,从而提供了底层的可扩展和持久化存储;

2、图数据访问层    

提供了一组Java API,可用于创建和删除属性图,添加和删除顶点和边,使用键值对搜索顶点和边,创建文本索引以及执行其他操作。目前也支持了Python JavaScript API。

3、图分析层

提供了基于内存的并行图分析框架PGX和Graph Server,后者可以下载单独安装,支持从Oracle数据库自动同步属性图数据到内存中,提供了几十种属性图高级分析算法,包括路径计算,排名,群体检测和遍历等。

用户使用Oracle Graph的交互工具和方法包括:

1、Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库架构对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。可以直接通过SQL使用GRAPH_TABLE运算符在属性图上运行图模式匹配查询,     

2、Oracle数据库 23C之前支持使用类SQL的PGQL来对图进行查询,可以通过sqlcl,API,Oracle提供的客户端程序和其他图形化工具使用PGSQL

3、图形化的工具和界面

    a) GraphViz支持属性图的可视化查询和展示,可单独下载安装部署。

    b) OCI的自治数据库中提供了Graph Studio,实现基于Web界面的属性图管理和查询

    c) Oracle分析云可以通过数据流集成属性图分析,结合其他数据进行更广泛的探索。

    d)    APEX提供了属性图插件,结合DB 23C,支持属性图图形化展示

4、基于API开发和Oracle提供的命令行工具

Oracle把这些不同层面的技术有机集成在一起,大大增强和简化了属性图的存储,扩展,安全,更新,查询,分析和机器学习能力,特别适用于需要对实体之间关系进行快速复杂分析的场景。

二、Oracle DB 23C中直接查询属性图

ISO SQL 标准已扩展为全面支持在 SQL 中创建属性图和对属性图的查询。Oracle数据库是首批支持此标准的商业软件产品之一。Oracle 数据库23C对属性图数据结构和属性图查询提供了原生支持。Oracle 数据库的企业级可管理性、安全功能和性能功能已扩展到属性图。开发人员可以使用现有工具、语言和开发框架轻松构建属性图应用程序。他们可以将属性图与事务数据、JSON、空间和其他数据类型结合使用。对 ISO SQL 标准的支持也允许更大的代码可移植性,并降低应用程序锁定的风险。

Oracle数据库 23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图,后者不会再重复存储数据,因此当对于原始表进行修改时,属性图查询结果也会实时变化。可以直接通过SQL使用GRAPH_TABLE运算符在属性图上运行图模式匹配查询,可以通过SQL Developer,Database Actions和其他支持Oracle DB的SQL工具进行操作。   

下面介绍一下Oracle数据库 23C中如何使用和查询属性图。如果大家希望使用开箱即用的实验环境,可以通过链接[1]参考Oracle Livelabs中有关本实验的全部过程。

Oracle数据库 23C和APEX都提供了下载试用,本文使用的环境中Oracle 数据库 23C和APEX都是完全自定义安装和配置,文中省略了数据库和APEX安装配置过程,只是列出了关键步骤。

示例中使用两张表来构建属性图视图,分别是账户表和转账表,各表定义和关系如下:   

可通过链接[2]下载本文中使用到的SQL文件,APEX应用导出文件和数据文件。下载后请解开压缩文件。 

Oracle DB 23C安装配置成功以后,使用SQL  Developer,通过SYS连接Oracle数据库FREEPDB1,创建用户graphuser并授权(如果您是自定义安装的APEX,后续想使用APEX中属性图插件,下一步也可以使用APEX的workspace的管理员登录,例如apexdev):

    CREATE USER Graphuser  IDENTIFIED BY


    DEFAULT TABLESPACE "USERS"


    TEMPORARY TABLESPACE "TEMP";





    GRANT UNLIMITED TABLESPACE TO Graphuser;


    GRANT CREATE SESSION TO Graphuser;


    GRANT CREATE TABLE TO Graphuser;


    GRANT CREATE VIEW TO Graphuser;


    GRANT CONNECT, RESOURCE TO Graphuser;


    GRANT CREATE PROPERTY GRAPH TO Graphuser;
    复制

    使用SQL  Developer,切换到用户graphuser,连接到Oracle数据库FREEPDB1。

    打开下载的压缩包中的文件CreateKeys.sql,修改并执行如下SQL语句:

      -- Drop BANK_GRAPH and tables if they exist


      DROP PROPERTY GRAPH BANK_GRAPH;





      drop table if exists bank_transfers;


      drop table if exists bank_accounts;





      -- create BANK ACCOUNTS table


      CREATE TABLE BANK_ACCOUNTS (


      ID NUMBER,


      NAME VARCHAR(400),


      BALANCE NUMBER(20,2)


      );





      -- create BANK_TRANSFERS table


      CREATE TABLE BANK_TRANSFERS (


      TXN_ID NUMBER,


      SRC_ACCT_ID NUMBER,


      DST_ACCT_ID NUMBER,


      DESCRIPTION VARCHAR(400),


      AMOUNT NUMBER


      );





      load bank_transfers\BANK_TRANSFERS.csv;


      load bank_accounts\BANK_ACCOUNTS.csv;





      -- Add constraints


      ALTER TABLE BANK_ACCOUNTS ADD PRIMARY KEY (ID);


      ALTER TABLE BANK_TRANSFERS ADD PRIMARY KEY (TXN_ID);


      ALTER TABLE BANK_TRANSFERS MODIFY SRC_ACCT_ID REFERENCES BANK_ACCOUNTS (ID);


      ALTER TABLE BANK_TRANSFERS MODIFY DST_ACCT_ID REFERENCES BANK_ACCOUNTS (ID);





      -- Optionally verify constraints


      SELECT * FROM USER_CONS_COLUMNS WHERE table_name IN ('BANK_ACCOUNTS', 'BANK_TRANSFERS');
      复制

      接下来我们要使用SQL创建属性图对象视图:

        CREATE PROPERTY GRAPH BANK_GRAPH
        VERTEX TABLES (
        BANK_ACCOUNTS
        KEY (ID)
        PROPERTIES (ID, Name, Balance)
        )
        EDGE TABLES (
        BANK_TRANSFERS
        KEY (TXN_ID)
        SOURCE KEY (src_acct_id) REFERENCES BANK_ACCOUNTS(ID)
        DESTINATION KEY (dst_acct_id) REFERENCES BANK_ACCOUNTS(ID)
        PROPERTIES (src_acct_id, dst_acct_id, amount)
        );
        复制

        上面定义中,VERTEX部分表示顶点的定义,EDGE部分表示边的定义,定义中没有指定LABEL,缺省会使用表的名字BANK_ACCOUNTS和BANK_TRANSFERS定义LABEL(后续SQL查询中会使用LABEL作为条件)。

        执行如下SQL查询属性表数据,可以看到这个SQL与我们常用的不同在于graph_table运算符后面部分,括号中表示的是顶点和边之间的关系,这个SQL查询的匹配规则是顶点之间通过LABEL是BANK_TRANSFERS的边连接,按照目标ID统计源顶点的数量,从多到少排序,列出来排在前10位的目标账户和数量。

          SELECT acct_id, COUNT(1) AS Num_Transfers
          FROM graph_table ( BANK_GRAPH
          MATCH (src) - [IS BANK_TRANSFERS] -> (dst)
          COLUMNS ( dst.id AS acct_id )
          ) GROUP BY acct_id ORDER BY Num_Transfers DESC FETCH FIRST 10 ROWS ONLY;


          复制

          可以在SQL Developer中看到执行的结果如下(Sqlplus,Database Actions中的SQL Web,APEX SQL Commands界面中执行结果也是类似):

          可以执行如下SQL语句,查询经过6次转账又转回给自己的账户:

            select acct_name,


            start_acct, first_acct, second_acct,


            third_acct, fourth_acct, fifth_acct,


            start_acct as end_in_acct


            from graph_table (graphuser.bank_graph


            match (src) -[is BANK_TRANSFERS]-> (f) - [is BANK_TRANSFERS]-> (s)


            - [is BANK_TRANSFERS]-> (t) - [is BANK_TRANSFERS]-> (fo)


            - [is BANK_TRANSFERS]-> (fi)- [is BANK_TRANSFERS]-> (src)


            columns (


            src.NAME as acct_name,


            src.id as start_acct,


            f.id as first_acct,


            s.id as second_acct,


            t.id as third_acct,


            fo.id as fourth_acct,


            fi.id as fifth_acct


            ))
            复制

            在Sqlplus中执行输出的格式化结果如下(部分结果):   


            三、APEX中图形化展示DB 23C属性图查询

            访问APEX中workspace的管理开发界面,导入下载文件中的f106.sql,则可以生成新的“SQL Property Graph queries in Oracle Database 23c”的APEX应用。

            这个SQL文件中已经预置了APEX属性图插件需要的对象相关的SQL创建语句,导入时会自动执行准备环境,但第二部分中提到的账户表,转账表和属性图不会自动创建,需要在APEX中workspace创建时指定的Schema用户下执行第二部分的准备SQL(也可以在APEX创建workspace时,指定使用的Schema为Graphuser)。   

            应用导入成功安装后,运行和访问相关APEX应用,登录后则可以看到如下界面:

            第一部分是使用SQL查询属性图的示例,第二部分是APEX属性图插件展示,点击第二个卡片打开,可以看到一些基于前面转账数据构建的属性图查询的图形化展示:

            1、到目标账户的转账次数从多到少排序前10位的转账关系,图中红色顶点为目标账户。

            2、循环转账查询:从开始账户转账四次又回到开始账户的交易链路。

            3、循环转账查询:从ID=39的开始账户转账六次又回到开始账户的交易链路。   

            APEX插件支持修改展示样式定义,例如针对循环转账6次查询结果,可以在APEX配置界面中修改属性,如下图所示,展示各个账户名称和每笔转账金额。

            四、属性图典型应用场景

            在目前越来越重视关系和影响性的情况下,结合各个行业特有情况,属性图可以发挥巨大作用,下面我们引申介绍一下各个行业的主要应用场景:

            金融行业—反洗钱和识别可疑交易    

            可以创建属性图,表示实体之间交易信息,以及实体相关信息,包括电子邮件地址、密码、地址等等。创建属性图后,运行简单的查询,即可找到那些具有类似信息,相互之间经常转款的的账户和客户。

            也可以通过某个违法或可疑账户,通过分析查找与之有关联的账户,以及类似的账户,从而确定非法交易路径和同伙。

            制造业—物料清单变更影响

            制造业的产品包含多个零件,例如汽车有10000-20000个零件,如果需要更换某个零件,需要分析与之有关系的部分,以及他们之间的依赖关系,现在的分析手段,需要多次循环多表查询,费时费力。   

            可以把所有部件之间的关系抽象成属性图,通过属性图查询影响和依赖关系,响应时间可以缩短到秒甚至更快,这样就可以实时交互式分析,还可以更进一步引入生产商,供应商,材料,年限等信息,辅助进行部件可信度,生产商可靠性,供应商选型等相关分析。

            政府行业—税务欺诈

            通过属性图,构建法人,公司,法人之间关系,公司之间交易和发票信息,能够快速从众多企业交易中,查询出可疑交易,例如循环交易和虚开发票,从而帮助税务部门识别税务欺诈。   

            公共安全--犯罪侦察

            通过把罪犯,可疑人物,相关人员之间关系抽象成属性图,能够通过属性图的高级分析,例如PageRank或Centrality,识别出犯罪团体中的联络人和重要人物,从而辅助决策消除犯罪的关键。也可以通过路径分析,相似行为或关系,识别犯罪同伙。

            五、总结

            最后总结一下,Oracle属性图提供了以下能力:

            • Oracle融合数据库提供了可扩展的属性图数据库能力,DB 23C支持直接使用SQL对属性图进行操作和查询

            • 为属性图开发者提供PGQL和Java/Python/JavsScript API

            • 通过与Oracle Text集成来进行文本搜索和查询

            • 并行的内存中属性图分析引擎(PGX)

            • 快速,可扩展的社交网络分析套件,包括排名,中心性,推荐者,社区检测,路径查找

            • 以Oracle定义的文本文件格式并行批量加载和导出属性图数据

            • 强大的属性图可视化工具Graph Visualization,ADB的Graph Studio,Oracle分析云和本地化分析工具,APEX属性图插件

            • 支持与Apache Zeppelin集成提供NoteBook


            参考链接

            1. https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3659

            2. https://objectstorage.us-ashburn-1.oraclecloud.com/p/VEKec7t0mGwBkJX92Jn0nMptuXIlEpJ5XJA-A6C9PymRgY2LhKbjWqHeB5rVBbaV/n/c4u04/b/livelabsfiles/o/data-management-library-files/23cfree-property-graph.zip

            编辑:萧宇

            最后修改时间:2023-11-08 10:30:39
            文章转载自甲骨文云技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论

            freerunning
            暂无图片
            1年前
            评论
            暂无图片 0
            Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。
            1年前
            暂无图片 点赞
            评论
            心有阳光
            暂无图片
            1年前
            评论
            暂无图片 0
            Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。
            1年前
            暂无图片 点赞
            评论
            嘻嘻
            暂无图片
            1年前
            评论
            暂无图片 0
            Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。
            1年前
            暂无图片 点赞
            评论
            DonACE
            暂无图片
            1年前
            评论
            暂无图片 0
            Oracle数据库23C中属性图分析加速实体关系洞察
            1年前
            暂无图片 点赞
            评论
            贾桂权
            暂无图片
            1年前
            评论
            暂无图片 0
            Oracle数据库23C中可以使用SQL DDL语句直接在现有数据库schema对象上创建SQL属性图,也可以直接在表中的数据上创建属性图视图。
            1年前
            暂无图片 点赞
            评论