迁移XML到Oracle ADW

Posted 凛冬未至

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移XML到Oracle ADW相关的知识,希望对你有一定的参考价值。


真实业务需求

    

        从Oracle发布ADWAutonomousData Warehouse)开始到现在,ADW简直红的发紫。无论是专业从事数据库工作的技术人员还是用户,甚至非IT领域的人都听说出现了一个可能让DBA失业的数据库。我有幸在第一时间了解到了ADW的相关信息。

       从我刚开始了解ADW开始,我就猜想迁移数据到ADW将会是接下来很长一段时间热度非常高的话题。碰巧最近真有一个关于迁移数据到ADW的项目,我自告奋勇的接了过来,等了解需求之后才发现,客户的需求是把XML迁移到ADW。瞬间有点担心无法完成(本人XML的经验不足)。没办法,既然已经接了就全力以赴吧。

       客户的需求是希望能够先把XML进行解析,然后把已经解析的数据上传到ADW的表中,而不是把一整个XML以一个单元格的形式上传到ADW中。毫无疑问,解析XML所占的工作量将会是最大的。

 


解决方案

         整体方案如下图,

 

      上图为整体架构。数据源生成的数据格式为XML,这些XML会上传到DBCSBlockStorage中,解析后的数据保存在DBCS中,然后同步数据到ADW中。数据分析云平台可以直接从ADW中读取数据进行分析,把结果返回给用户。

       实际上,如果单纯想解析XML并且同步到ADW中,方案不止这一种。但是上图中的方案有特殊的目的,关于简化方案和其他方案会在后文中提及。请各位看官看到最后。

 


操作如下

       在技术选型的过程我一直很纠结。解析XML的方法有很多种,包括可以采用pythonPerlXML进行解析,然后插入到DBCS中。也可以先把XML先插入到表中,然后解析,两种办法皆可,最后决定采用第二种方案。第二种方案有一个优点,对后期进行维护的人员技术要求低,维护人员只需要掌握数据库技术即可。

       首先把XML加载到数据库中。Oracle数据库可以直接读取磁盘中的文件,但是需要先创建一个directory.

          SQL>CREATE DIRECTORY XML_DIR AS'/home/oracle/xml_dir';

       把想要解析的XML插入到“/home/oracle/xml_dir”路径下,然后通过SQL加载XML进行到表中(此时的XML是原始XML,没有进行解析)

          SQL>insert into xml_file(id,file_name,detail) values(2,'ABC.xml',XMLTYPE(bfilename('XML_DIR','ABC.xml'),nls_charset_id('AL32UTF8')));

       此时XML已经导入到表中,下一步的工作就是解析XML。关于解析XML应该是整个过程中最复杂,最耗时的工作。解析XML一般会出现两种情况。

迁移XML到Oracle ADW

      上图中这种情况是最理想的情况,需要解析的数据都包含在标签内,Oracledatabase已经原生支持XMLOracle XML DB ,详细内容可以参照官方文档:https://www.oracle.com/technetwork/cn/database/database-technologies/xmldb/overview/index.html

迁移XML到Oracle ADW

这种场景是最佳场景,但是绝大多数的情况是数据都记录在标签属性中,如下图:

迁移XML到Oracle ADW

没有结束标签,无法通过XQUERY直接获取数据。这种情况我采用的方法是循环抽取数据。

 

迁移XML到Oracle ADW

如上图所示,可以在通过层级下标获取属性值。只要我们获取“Segment”的数量进行相应的循环即可。

循环抽取的方法如下图:

 至于采用块编程的方式还是创建成存储过程皆可。到此为止我们所要的数据都已经进入到了DBCS中,下一步就可以把数据从DBCS导入到ADW中。

关于DBCS同步ADW最简单的办法就是通过DBlink,这是一种成本最低的方式。此处不再赘述。(真不知道怎么操作的可以给我留言)       


方案评估

      有经验的读者可能发现这个方案不是最佳方案,从XMLDBCS的过程有点多余,完全可以省略。完全正确,ADW完全可以从Objectstorage中读取XML,并且采用相同的办法对XML进行解析。如下图:



       本文中采用的方案有一个优势,很多时候用户不希望把所有的数据全部上传到ADW中。当数据进入到DBCS后可以对同步到ADW的数据进行一次过滤,把想要分析的数据上传到ADW,其他的保存在DBCS中。甚至我们可以把DBCS换成on-premise都可以。至于哪种方案更好,取决于实际情况来选择。

 


以上是关于迁移XML到Oracle ADW的主要内容,如果未能解决你的问题,请参考以下文章

怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

oracle迁移到mysql注意事项

怎么从Oracle迁移到SQL Server ?

数据库从 PostgreSQL 迁移到 Oracle

如何从Oracle 迁移到 Mongo DB

如何将oracle数据迁移到greenplum数据库