首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

装载数据

装载数据 前面我们一起学习了创建表,那么下一步我们应该学会怎么把数据装载到表中,然后才能去查询吧! *Hive的四种常见的数据导入方式 (1)、从本地文件系统中导入数据到Hive表; (2)、从HDFS上导入数据到Hive表; (3)、从别的表中查询出相应的数据并导入到Hive表中; (4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。 一、从本地文件系统中导入数据到Hive表 --Hive没有行级别的数据插入、数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作。 或者通过其他方式将数据写入到正确的目录下 先在Hive里面创建好表,如下: 1. hive> create table employees 2. > (id int, name string, 3. > tel string) 4. > ROW FORMAT DELIMITED 5. > FIELDS TERMINATED BY '\t' 6. > STORED AS TEXTFILE; 7. OK 8. Time taken: 2.832 seconds 本地文件系统里面有个/home/data/employees/employees.txt文件,内容如下: 1. [data@cdh54 ~]$ cat employees.txt 2. 1 zs 13666666666 3. 2 ls 13888888888 4. 3 ww 13777777777 employees.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到employees表里面,操作如下: 1. hive> load data local inpath ' /home/data/employees.txt' OVERWRITE table employees; 2. OK 3. Time taken: 3.567 seconds 解析:1.如果目标表是非分区表,那么语句中应该省略 PARTITION 子句 2.通常情况下指定的路径应该是一个目录,而不是单个独立的文件。Hive 会将所有文件都拷贝到这个目录中。 3. 如果使用了 LOCAL 这个关键字,那么这个路径应该为本地文件系统路径,数据将会被拷贝到目标位置 如果省略掉 LOCAL 关键字,那么这个路径应该是分布式文件系统中得路径 4.如果指定了 OVERWRITE 关键字,那么目标文件夹中之前存在的数据将会被先删除 如果没有这个关键字,仅仅会把新增的文件增加到目标文件夹中不会删除之前的数据 如果目标文件夹中已经存在和装载的文件同名的文件,那么旧的同名文件将会被覆盖重写 5.如果目标表是分区表那么需要使用 PARTITION 子句,而且我们还必须为每个分区的键指定一个值 6.对于 INPATH 这个路径有一个限制,那就是这个路径下不可以包含任何文件夹 二、HDFS上导入数据到Hive表   从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/employees/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,假设有下面这个文件/home/employees/add.txt,具体的操作如下: 1. [data@cdh54 /home/employees/hadoop-2.2.0]$ bin/hadoop fs -cat /home/employees/add.txt 2. 5 yy1 131222222222 3. 6 yy2 134444444444 4. 7 yy3 132111111111 5. 8 yy4 135555555555 上面是需要插入数据的内容,这个文件是存放在HDFS上/home/employees目录(和一中提到的不同,一中提到的文件是存放在本地文件系统上)里面,

02
领券