hive几种数据导入方式

1.从本地文件系统中导入数据到hive表

 

(1)数据准备(/home/sopdm/test.dat):

 

  1,wyp,25,13188888888

  2,test,30,13899999999

  3,zs,34,89931412

 

(2)首先创建表

use sopdm;

drop table if exists sopdm.wyp;

create table if not exists sopdm.wyp(id int,name string,age int,tel string)

row format delimited

fields terminated by ','

stored as textfile;

 

(3)从本地文件系统中导入数据到Hive表

 

load data local inpath ‘/home/sopdm/test.dat’ into table sopdm.wyp;

 

(4)可以到wyp表的数据目录下查看,如下命令

 

dfs  -ls  /user/sopdm/hive/warehouse/sopdm.db/wyp;

 

2.从HDFS上导入数据到Hive表

 

(1)现在hdfs中创建一个input目录存放HDFS文件

hadoop fs -mkdir input;  或   hadoop fs -mkdir /user/sopdm/input;

 

(2)把本地文件上传到HDFS中,并重命名为test_hdfs.dat

hadoop fs -put /home/sopdm/test.dat /user/sopdm/input/test_hdfs.dat;

 

(3)查看文件

dfs -cat /user/sopdm/input/test_hdfs.dat;

 

(4)将内容导入hive表中

 

--拷贝“本地数据”到“hive”使用:load data local…

--转移“HDFS”到“hive”(必须同一个集群)使用:load data…

load data inpath ‘/user/sopdm/input/test_hdfs.dat’ into table sopdm.wyp;

 

3.从别的Hive表中导入数据到Hive表中

 

create table if not exists sopdm.wyp2(id int,name string,tel string)

row format delimited

fields terminated by ','

stored as textfile;

 

--overwrite是覆盖,into是追加

insert into table sopdm.wyp2

select id,name,tel from sopdm.wyp;

 

--多表插入

--高效方式-查询语句插入多个分区

from sopdm.wyp w

insert overwrite table sopdm.wyp2

    select w.id,w.name,w.tel where w.age=25

insert overwrite table sopdm.wyp2

    select w.id,w.name,w.tel where w.age=27;

 

4.创建Hive表的同时导入查询数据

 

create table sopdm.wyp3

       as select id,name,tel,age from sopdm.wyp where age=25;


5.拷贝文件

 

如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以。

hadoop fs –cp source_path target_path

 

6.导出到本地文件系统

 

--不能使用insert into local directory来导出数据,会报错

--只能使用insert overwrite local directory来导出数据

 

--hive0.11版本之前,只能使用默认分隔符^A(ascii码是\00001)

insert overwrite local directory '/home/sopdm/wrk'

select id,name,tel,age from sopdm.wyp; 

 

--hive0.11版本之后,可以指定分隔符

insert overwrite local directory '/home/sopdm/wrk'

row format delimited

fields terminated by ','

select id,name,tel,age from sopdm.wyp;

 

--导出数据到多个输出文件夹

from employees se

insert overwrite local directory ‘/tmp/or_employees’

     select * se where se.cty=’US’ and se.st=’OR’

insert overwrite local directory ‘/tmp/ca_employees’

     select * se where se.cty=’US’ and se.st=’CA’

 

7.导出到HDFS

 

--比导出文件到本地文件系统少了一个local

insert overwritedirectory '/home/sopdm/wrk'

select id,name,tel,age from sopdm.wyp;

 

--hive0.11版本之后,可以指定分隔符

insert overwritedirectory '/home/sopdm/wrk'

row format delimited

fields terminated by ','

select id,name,tel,age from sopdm.wyp;

 

8.导出到hive的另一张表


insert into table sopdm.wyp2

partition(age='25')

select id,name,tel,age from sopdm.wyp;

 

9.使用hive的-e和-f参数命令导出数据

 

--使用hive的-e参数

hive –e “select * from wyp” >> /local/wyp.txt

 

--使用hive的-f参数, wyp.hql中为hql语句

hive –f wyp.hql >> /local/wyp2.txt


Hive 是一种基于 Hadoop 的数据仓库工具,用于查询和管理大规模数据集。为了高效地分批导入数据Hive 中,通常采用以下几种方法: ### 1. 使用 LOAD DATA INPATH 逐步导入 Hive 提供了 `LOAD DATA INPATH` 命令,允许从本地文件系统逐批读取数据并插入到表中。这种方式适用于小型数据集或单次增量更新的情况。 #### 示例: ```sql INSERT OVERWRITE TABLE my_table PARTITION (my_partition) SELECT * FROM my_source_file; ``` 这里假设 `my_source_file` 包含待导入数据,每次运行此 SQL 都可以从该文件读取一部分数据导入。 ### 2. 分区导入 利用 Hive 表的分区特性,可以将数据按照特定字段(例如时间戳)分割到不同的分区中。这样每次只导入一个分区的数据,提高了导入效率和管理便利性。 #### 示例: 创建包含分区的表: ```sql CREATE TABLE my_table ( col1 STRING, col2 INT, date DATE ) PARTITIONED BY (date); ``` 导入数据时,指定具体的分区日期: ```sql LOAD DATA LOCAL INPATH '/path/to/my_data_20230101.txt' OVERWRITE INTO TABLE my_table PARTITION (date='20230101'); ``` ### 3. 使用 MapReduce 或 Streaming API 批量处理 对于非常大的数据集,可以使用 MapReduce 来处理。创建自定义的 MapReduce job 将大量数据切分为更小块,然后并行处理每个块,最后汇总结果至 Hive 表中。 ### 4. 利用 Sqoop 或 Beeline 进行分批次导入 Sqoop 是 Hadoop 与 RDBMS 之间的数据导入出工具,可以分批次导入数据。Beeline 是 Hive 的交互式命令行界面,同样支持分批次导入数据。 #### 示例: 使用 Sqoop 导入数据: ```bash sqoop import --connect <jdbc_url> \ --username <username> \ --password <password> \ --hive-table <hive_table_name> \ --split-by <column_name> ``` 此处 `<jdbc_url>`、`<username>`、`<password>`、`<table_name>` 和 `<hive_table_name>` 分别表示连接信息、表名和 Hive 表名;`<column_name>` 是用于分隔导入数据块的列名。 ### 相关问题: 1. 如何确定最佳的数据分批大小? 数据分批大小的选择依赖于数据的大小、存储性能、网络状况和处理能力等多个因素。通常建议先从较小的分批开始测试,再根据性能监控结果调整。 2. 如何监控 Hive 分批导入的性能? 使用 Hive 的日志记录和监控工具,如 YARN、Apache Tez 或 Apache Flink,监视导入过程中的 CPU 使用、内存消耗、I/O 活动等关键指标。 3. 分批导入时如何保证数据一致性? 确保在每一批数据导入前进行必要的数据清理和验证工作,例如检查文件完整性、校验数据格式和范围等。在完成所有批次导入后,还可以执行一次整体的完整性检查来确认数据一致性。 请确保在执行上述操作之前备份好原始数据,以防止意外丢失重要信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值