加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

从oracle导入数据到hive的两种方法

(2018-01-16 17:50:45)
标签:

oracle

hadoop

hive

导入数据

分类: hadoop

从oracle导入数据到hive中,这里有两种方法可以实现。

 

1.  导入文件法。方法大致概括为:从oracle中导出TXT文本文件,再以file的形式添加到hive中相关表的文档目录下。这种方法适用于用户有权限进入hive中的file browser。具体如下:

 

首先,在hive里创建表(注意加粗的两行)
create table dc_call_campaign_txt (skp_call_campaign int, code_call_campaign string, name_call_campaign string)
row format delimited fields terminated by ';'

stored as textfile
;

 

然后,在oracle中导出所有数据,用‘;’分隔,保存为TXT文本文件

select to_char(cmp.skp_call_campaign)||';'||cmp.code_call_campaign||';'||cmp.name_call_campaign
from owner_dwh.dc_call_campaign cmp
order by cmp.skp_call_campaign
;

 

进入到hive中的file browser,找到刚刚创建的表文件,打开,把刚保存的TXT文件上传到该文件夹里。

 

最后,在hive中执行语句 analyze table dc_call_campaign_txt compute statistics;

 

 

 

2.生成代码法。 第二种种方法较为繁琐。

方法大致概括为:在oracle中利用循环语句写‘导入每一个数据的代码’,把该代码从oracle中复制,粘贴到hive中执行,从而建表。这里给出一个用方法2生成 3列数据的样例。

 

--建一个表用来存代码

create table sql_txt (
  dtime date default sysdate,
  txt   clob
);

--写循环语句生成代码,存到表里

declare
  l_sql       clob;
  l_i         integer;
begin
  l_sql := 'select case';
  l_i := 0;
 
  for rec in (select skp_call_campaign from owner_dwh.dc_call_campaign order by skp_call_campaign)
  loop
    l_i := l_i + 1;
    l_sql := l_sql||chr(13)||
                    when x.n='||to_char(l_i)||' then '||to_char(rec.skp_call_campaign);
  end loop;
 
  l_sql := l_sql||chr(13)||
                end as skp_call_campaign,'||chr(13)||
                case';

  l_i := 0;
  for rec in (select name_call_campaign from owner_dwh.dc_call_campaign order by skp_call_campaign)
  loop
    l_i := l_i + 1;
    l_sql := l_sql||chr(13)||
                    when x.n='||to_char(l_i)||' then '''||trim(rec.name_call_campaign)||'''';
  end loop;
 
  l_sql := l_sql||chr(13)||
                end as name_call_campaign'||chr(13)||
           'from dual x'||chr(13)||

           'where x<= '||to_char(l_i)||';'

  insert into sql_txt (txt) values(l_sql);
 
end;
/

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有