使用外部表关联MySQL数据到Oracle
这个流程本来从开发的角度来看似乎是一头雾水,所以交给他们来规划就容易出现问题,最后沟通后的流程是下面的形式。
下面这个图左边是Oracle的环境,右边是MySQL的环境,两个环境的表中都存在一个共同的字段就是序列号serial_no,而且MySQL段的序列号是Oracle端的子集,两者是存在一一映射关系的。
现在的问题是MySQL端可以提供uid,但是无法得知cn_number,因为这部分信息在Oracle端。Oracle端又没有uid的概念,所以需要MySQL端提供serial_no来映射才可以。
所以一来二去,得到的流程就是需要5个步骤。
首先开发部门提供需要的uid(1),然后MySQL端抽取后把文件同步到Oracle端(2),然后在Oracle端进行关联查询,得到一个uid和cn_number的组合(3),然后同步到MySQL端,
最后MySQL端得到这部分数据,最终开发的需求就完成了。
很快就得到了MySQL端同步过来的数据,是个本文文件,内容如下:
687914 | 0d6c3956-d53d-4e14-9fba-cb73cec661e6
694786 | 41159bb3-970b-4b6b-9c5d-46e1f3d388be
746010 | 011d632d-149a-4e3d-ad00-dcae53f60825
1226533| 78dd80d3-6ad0-4bd5-aa1d-843c32b7ddab
1399846| 3dcc5982-bcc7-4cbf-9f99-b5a51b932b1d
1400221| 4fc505eb-20a6-451c-8674-5667e33167e7
因为推送过来的表的数据可能会有变化的,但是每次都去更新表的数据还是有些繁琐,一个方便的办法就是外部表了。
CREATE TABLE passport_ext
(uid number,
serial_no varchar2(100))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS
(
FIELDS TERMINATED BY '|'
)
LOCATION ('mysql_uid_serial_no.lst')
);
所以一旦MySQL端推送文件过来了,我只需要替换文本文件即可,然后就不用反复做数据的导入了。
直接拿过来关联即可。
但是创建外部表的时候老师抛错,最后发现uid是保留字,用下面的例子来验证。
> CREATE TABLE passport_ext (uid varchar2(10));
CREATE TABLE passport_ext (uid varchar2(10))
*
ERROR at line 1:
ORA-00904: : invalid identifier
> CREATE TABLE passport_ext (uidd varchar2(10));
Table created.
其实后面经过老猫指点,还是可以用"uid"来代替的,这个用法就跟MySQL里面的反引号类似了。
create table test1(`int` int);
Query OK, 0 rows affected (0.00 sec)
不过这个时候还是要注意。下面的输出结果,其实如果用双引号,还是不规范的,而且需要应用端去修改,这样就是一个隐藏的雷。多谢怀总指点。
SQL> create table test("uid" number);
Table created.
SQL> select uid,UID,"uid" from test;
UID UID uid
---------- ---------- ----------
0 0 1
所以在数据导入之后还是最好把字段名改过来,我就直接改成了uidd,因为字段名表关联没有强制要求uid这个列名。
关于保留字可以通过下面的方式来查询
SQL> select * from v$reserved_words where keyword='UID';
外部表加载了之后,关联的时候发现竟然没有匹配的数据,最后发现还是得trim一下数据
select t1.uidd ,t2.cn_number from passport_ext t1,passport t2 where trim(t1.serial_no)=t2.seriao_no;
通过这种方式就得到了一个数据清单,可以再次推送给MySQL端了。
这个案例还是很简单的,但是把这个过程做了多步的分解,可以看出在数据迁移中还是有很多的潜在因素需要考虑。
使用外部表关联MySQL数据到Oracle相关推荐
- Hive 外部表关联分区数据
0. 说明 已经安装好Hadoop和hive环境,hive把元数据存储在mysql数据库.这里仅讨论外部表和HDFS的关联,并且删掉外部表之后,对HDFS上的文件没有影响. 1. 在HDFS创建分区, ...
- oracle数据表转换为mysql数据表
oracle数据表转换为mysql数据表,或者反过来,我们可以借助navica的工具 1.打开navicat的工具->数据传输 2.选择源数据库以及目标数据库 目标可以选择数据库也可以选择文件, ...
- 通达OA系统2019版流程中心,外部表单提交数据到指定流程第一步
通达OA系统2019版流程中心,外部表单提交数据到指定流程第一步 总体操作过程 具体操作过程 1.根据需要提交到流程的表单,新建表 2.系统管理员账号登录OA系统,按照 菜单>流程中心>工 ...
- hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...
- MySQL高级之外键、表关联、数据导入及导出
文章目录 MySQL高级 外键(foreign key) 嵌套查询(子查询) 多表查询 连接查询 数据导入 数据导出 表的复制 锁(自动加锁和释放锁) MySQL高级-重点掌握 外键 嵌套查询(子查询 ...
- mysql delete 表关联删除数据_MYSQL中delete删除多表数据与删除关联数据
在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记 录与删除多表关联数据的一些简单实例. 1.delete from t1 where 条件 ...
- Power Pivot 系列 (1) - 做一个多表关联的数据透视表
先看一个图: 这个系列的图在网上常被引用,所表达的关系曾经代表 Microsoft 公司数据分析工具的一个推荐组合:原始的数据 (Raw Data) 被加载到 Power Query 中进行清洗 (P ...
- 【原创】大叔经验分享(25)hive通过外部表读写hbase数据
在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table( key string, name string, desc string ) STORED B ...
- php mysql 表关联,mysql的多表关联_MySQL
bitsCN.com mysql的多表关联 数据库中经常要用到多个表的关联.mysql的关联主要包括inner join,left join,right join三种,下面分别加以介绍,并举例说明. ...
最新文章
- c语言运动会成绩统计报告,C语言程序设计运动会成绩统计系统1研究报告.doc
- 二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]
- WordPress永久链接 静态化教程
- 【杭电多校2020】Total Eclipse【贪心】【并查集】
- PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
- 服务器存储满了进不去系统,解决PC常见问题 篇四十五:建议收藏!手贱升级进不去系统?两步简单恢复黑群晖!...
- mysql 浮点类型有宽度指示器吗_mysql中的浮点类型
- 年度最流行英文字体20款
- keil安装及mdk
- 线性代数-矩阵方程应用:配平化学方程式
- Relative Orientation 与fundamental essential matrix
- hp1020打印机驱动下载地址
- 原创SpringMvc+Mybatis+Redis框架
- NLP初学-Word Segmentation(分词)
- 知之道,达有余而通不足;行之道,嬴有余以弥不足。知行合一,亦乎 如是。
- 前端萌新看过来了—— 0基础1小时vue入门到实战
- 我们应该怎样面对自己
- birthday中文是什么_birthday中文怎么读
- 如何报名拼多多官方活动?万顿思电商
- 浅谈智能化能源管理系统平台在企业中的应用