手动搬运数据到hive

手动搬运数据到hive

本次以下表为例

CREATE TABLE t_user(
    id NUMBER(10,0),
    name VARCHAR2(10),
    sex CHAR(1),
    job VARCHAR2(20)
);

1. 从数据库中导出数据

以Oracle为例,使用PL/SQL将查询出结果后导出为csv格式,具体操作可以查看link

SELECT * FROM t_user;

在这里插入图片描述

执行完后该文件实际上应该是以逗号隔开的文本文件,可以用记事本打开验证以下。

2. 上传到Linux

此处用可以用MobaXterm工具连接到Linux,用lrzsz命令上传文件。

3. 上传到hdfs

此时上传的csv文件中如果第一行是列名,需要删掉第一行

sed -i '1d' filename

sed是一种流编辑器,-i表示就地编辑文件,编辑后会保存到文件中,否则不会保存结果,1d表示删掉第一行。

在这里插入图片描述

之后再用以下命令上传到hdfs中。

hdfs dfs -put <local_file> <hdfs_path>

该命令表示将本地文件local_file上传到hdfs_path路径下

4. 建立外表

CREATE EXTERNAL TABLE t_e_user(
    id NUMERIC(10,0),
    name VARCHAR(10),
    sez VARCHAR(1),
    job VARCHAR(20)
)
row format delimited
fields terminated by ','
--lines terminated by '\n'
stored as textfile
location '<hdfs_path>';

EXTERNAL表示建立外表,hive指挥创建元数据,但不会存储真正的数据,而是关联到location指定的路径下

row format delimited表示指定一行的界定符。

fields terminated by ','表示字段以逗号隔开。

lines terminated by '\n'表示行与行之间用\n隔开。

stored as textfile表示使用普通文本格式进行存储。

location '<hdfs_path>'表示指定数据在hdfs中的路径,制定后hive会扫描改路径下的文件,不能指定单独的数据文件。

但是此时从PL/SQL导出的数据有中文乱码问题,PKSQL导出的文件为GBK,hive默认的编码格式为utf-8,需要修改外表编码格式。

ALTER TABLE t_e_user SET 
SERDEPROPERTIES ('serialization.encoding'='GBK');

5.建立orc表

create table t_user(
    id NUMERIC(10,0),
    name VARCHAR(10),
    sez VARCHAR(1),
    job VARCHAR(20)
)
clustered by (id) into 4 bucket
stored as orc
tblproperties('transactional'='true');

clustered by (id) into 4 bucket表示根据id的hash值将保存数据的文件分成4个

stored as orc表示文件的格式为orc

tblproperties('transactional'='true')表示开启事务,可以使用ACID操作

6.导入数据

终于到了最后一步。

insert into t_user
select * from t_e_user;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值