上周遇到了将数据从oracle导入到impala的问题,这个项目耽误了我近一周的时间,虽然是种种原因导致的,但是还是做个总结。

需求首先是跑数据,跑数据这个就不叙述,用的是公司的平台。

讲讲耽误我最久的事吧 数据的导入导出。

将数据从oracle导出

PLSQL直接导出

我这边连接公司的orcle数据库是PLSQL,本身PLSQL就是可以可以导出数据的,而且很简单。

PLSQL在select后就能导出表的数据,能到处成csv、sql、xml等等。

但是这方法最后还是被舍弃了,有几个原因:

1.这种导出方法很慢,我导出200M的csv数据需要40分钟

2.数据导出有限制,这种方法好像最多只能导出104w数据,但是需求是需要导出1亿两千万的数据,很明显是不可以的。

注:中间我考虑过按分区导出数据,因为这个表是按时时间分了分区,然后发现还是不行,因为数量还是太大了,30天的数据平均下来每个还是有400w,最后放弃了

事实证明这个方法不是很好用,导出几百、几天还行。多了就不行了。

使用oracle的内建包UTL_FILE

第二种用orcle里面用utl_file读写文件包 ,每分钟大约处理百万行。适用于大量导出时。

一、首先需要新建一个存储过程

 CREATE
OR REPLACE PROCEDURE SQL_TO_CSV (
P_QUERY IN VARCHAR2,-- PLSQL文
P_DIR IN VARCHAR2,-- 导出的文件放置目录
P_FILENAME IN VARCHAR2 -- CSV名
) IS L_OUTPUT UTL_FILE.FILE_TYPE; L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR; L_COLUMNVALUE VARCHAR2 (4000); L_STATUS INTEGER; L_COLCNT NUMBER := 0; L_SEPARATOR VARCHAR2 (1); L_DESCTBL DBMS_SQL.DESC_TAB; P_MAX_LINESIZE NUMBER := 32000; BEGIN
--OPEN FILE
L_OUTPUT := UTL_FILE.FOPEN (
P_DIR,
P_FILENAME,
'W',
P_MAX_LINESIZE
); --DEFINE DATE FORMAT
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS'''; --OPEN CURSOR
DBMS_SQL.PARSE (
L_THECURSOR,
P_QUERY,
DBMS_SQL.NATIVE
); DBMS_SQL.DESCRIBE_COLUMNS (
L_THECURSOR,
L_COLCNT,
L_DESCTBL
); --DUMP TABLE COLUMN NAME
FOR I IN 1 ..L_COLCNT
LOOP
UTL_FILE.PUT (
L_OUTPUT,
L_SEPARATOR || '"' || L_DESCTBL (I ).COL_NAME || '"'
); --输出表字段
DBMS_SQL.DEFINE_COLUMN (
L_THECURSOR,
I,
L_COLUMNVALUE,
4000
); L_SEPARATOR := ','; END
LOOP
; UTL_FILE.NEW_LINE (L_OUTPUT);--输出表字段
--EXECUTE THE QUERY STATEMENT
L_STATUS := DBMS_SQL. EXECUTE (L_THECURSOR); --DUMP TABLE COLUMN VALUE
WHILE (
DBMS_SQL.FETCH_ROWS (L_THECURSOR) > 0
)
LOOP
L_SEPARATOR := ''; FOR I IN 1 ..L_COLCNT
LOOP
DBMS_SQL.COLUMN_VALUE (
L_THECURSOR,
I,
L_COLUMNVALUE
); UTL_FILE.PUT (
L_OUTPUT,
L_SEPARATOR || '"' || TRIM (
BOTH ' '
FROM
REPLACE (L_COLUMNVALUE, '"', '""')
) || '"'
); L_SEPARATOR := ','; END
LOOP
; UTL_FILE.NEW_LINE (L_OUTPUT); END
LOOP
; --CLOSE CURSOR
DBMS_SQL.CLOSE_CURSOR (L_THECURSOR); --CLOSE FILE
UTL_FILE.FCLOSE (L_OUTPUT); EXCEPTION
WHEN OTHERS THEN
RAISE; END; /

二、创建导出路径

create or replace directory OUT_PATH as 'D:\out_path';  

注意:这步只是在oracle sql developer中定义了导出路径,如果路径不存在,并不会自动生成,需要手动去新建!

三、调用数据

EXEC sql_to_csv('select * from <tablename>','OUT_PATH','<filename>'); 

这种是在网上查到的方法,这边因为最近公司规定不能下载到本地所以没有采用这种方法,但是这种方法测试是可行的,没有具体测试效率。

sqluldr服务器导出数据

第三种是我最后采用的方法

用sqluldr脚本导出到服务上,然后把文件转移到impala的服务器上去。

下载链接链接:https://pan.baidu.com/s/1bRRr-BDQL0yIJJTa16ttTw
提取码:1tns

将sqluldr.rar中文件上传到orcle所在服务器中,然后执行
./sqluldr2_linux64_10204.binuser= query="" field=',' text=txt file='' charset=UTF8;
file='' 是存放路径 charset=编码 user=是orcle数据库地址 query=是导出语句

然后执行效率100w大概40秒左右,速度比较快。

数据上传到impala中

1、将数据从oracle服务器转移到impala所在服务器

2、在hive中建好导出数据的表

CREATE TABLE tmp.tmp_call_orcle_1 (
test string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' --csv分隔符
STORED AS TEXTFILE; --设置文件为test文件

3、用hdfs命令将数据导入到建好的表中:hdfs dfs -put test.csv /user/hive/warehouse/tmp.db/test

4、将表的读取路径改成hdfs路径

load data inpath '/user/hive/warehouse/tmp.db/tmp_call_orcle_1/tmp_call_orcle_1.csv' into table tmp.tmp_call_orcle_1;

至此就完成了将orcle数据导入impala的操作

大数据备忘录———将数据从oracle导入impala中的更多相关文章

  1. ORACLE导入导出数据dmp

    imp testwms3/isc@TESTGMMC FILE=C:\ZKGL_201407012334.dmp ignore=y fromuser=GMMCZKGL touser=testwms ta ...

  2. 从oracle导出数据成csv,将csv导入mongodb问题

  3. 大数据之路week07--day06 (Sqoop 将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具)

    为了方便后面的学习,在学习Hive的过程中先学习一个工具,那就是Sqoop,你会往后机会发现sqoop是我们在学习大数据框架的最简单的框架了. Sqoop是一个用来将Hadoop和关系型数据库中的数据 ...

  4. 使用sqoop工具从oracle导入数据

    sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 从RDBMS中抽取出的数据可以被Ma ...

  5. oracle导入数据

    oracle导入数据时候注意点: 1.imp system/admin@oracle9i file=E:\shujukuwenjian\2014-04-01.dmp fromuser=ptb_supe ...

  6. Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据

    SQL Server2012创建连接服务器到ORACLE11G 8,百思考不知道原因啊??突然我发现如下:链接服务器—〉访问接口—〉OraOLEDB.Oracle—〉允许进程内没有勾上,但是我想上面的 ...

  7. Oracle导入excel数据快速方法

    Oracle导入excel数据快速方法 使用PLSQL  Developer工具,这个可是大名鼎鼎的Oracle  DBA最常使用的工具.    在单个文件不大的情况下(少于100000行),并且目的 ...

  8. oracle 导入Excel数据

      oracle 导入excel数据 CreateTime--2018年1月30日14:58:51 Author:Marydon 通过plsql实现 1.准备工作 Excel中的字段名称,必须和表结构 ...

  9. sqoop工具从oracle导入数据2

    sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...

随机推荐

  1. HZOJ 20190819 NOIP模拟26题解

    考试过程: 照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连 ...

  2. Noip2016 提高组 Day2 T1 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  3. 数据结构实验之求二叉树后序遍历和层次遍历(SDUT 2137)

    Problem Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据. ...

  4. 如何写出好的PRD(产品需求文档)(转)

    作者:Cherry,2007年进入腾讯公司,一直从事互联网广告产品管理工作,目前在SNG/效果广告平台部从事效果广告的产品运营工作. PRD(Product Requirement Document, ...

  5. SpringMVC 理论

    应用系统三层架构: C/S:客户端/服务器 B/S:浏览器/服务器 标准分层: 表现层:WEB 层,接受结果,响应结果,分发请求:通常客户端使用 http 协议请求 web 层,web 层需要接受 h ...

  6. 2个最好的JavaScript编辑器 必须要知道

    JavaScript程序员有许多很好的工具可供选择,几乎太多了.在这篇文章中,介绍2个最好用的文本编辑器,也是顶级的.并且很好地支持使用JavaScript,HTML5和CSS进行开发,并用Markd ...

  7. 20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验一

    详见 https://www.cnblogs.com/xiannvyeye/p/11792152.html#%E4%B8%80%E5%AE%9E%E9%AA%8C%E5%86%85%E5%AE%B9

  8. Google 插件的使用

    每次看英文网页或者文档的时候总会碰到不认识单词,就想能不能选中单词就可以显示翻译?于是就安装Google浏览器的翻译插件,总的来说,蛮繁琐的. 1.先安装谷歌访问助手 (1.)直接百度谷歌访问助手 ( ...

  9. 解决spring-boot 各版本包冲突兼容的方法

    思路        在微服务盛行的当下,spring boot 流行程度已经家喻户晓.但同时,随着spring boot 快速迭代,出现了很多版本,比如当前已经推出了2.2.x-SNAPSHOT/ , ...

  10. python 牛顿迭代法

    使用牛顿迭代法求方程  在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f’(x)=(3 ...