0


Hive 表 DML 操作 第1关:将文件中的数据导入(Load)到 Hive 表中

相关知识

之前系列实训中我们接触过导入本地文件到

Hive

表中,本关就进行导入的详细讲解。

为了完成本关任务,你需要掌握:1.导入命令语法,2.如何将本地

txt

文件导入到分区表中。

导入命令语法

Load

操作执行

copy/move

命令把数据文件

copy/move

Hive

表位于

HDFS

上的目录位置,并不会对数据内容执行格式检查或格式转换操作。

Load

命令语法为:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2 …)];

文件路径

filepath

可以是指向

HDFS

的相对路径或是绝对路径,也可以是指向本地文件系统(

Linux

文件系统)相对路径(当前工作目录)或绝对路径。

filepath

指向

HDFS

LOAD

执行的是

move

操作(即执行

LOAD

filepath

中的文件不再存在);若

filepath

指向本地文件系统,

LOAD

执行的是

copy

操作(即执行

LOAD

filepath

中的文件仍然存在),但需要指定

LOCAL

关键字。

filepath

指向一个文件,

LOAD

copy

move

相应的文件到表

tablename

;若

filepath

指向一个目录,

LOAD

copy

move

相应目录下的所有文件到表

tablename

若创建表时指定了分区列,使用 LOAD 命令加载数据时也要为所有分区列指定特定值。

针对

LOAD

语句中指明

LOCAL

关键字,

INPATH

参数可以使用下述方式确定:

  • Hive 会在本地文件系统中查找filepath
  • 用户可以设置filepath为文件绝对路径,如file:///user/hive/data

针对

LOAD

语句中未指明

LOCAL

关键字,

INPATH

参数可以使用下述方式确定:

  • filepath为相对路径,Hive会解析成为/user/<username>/filepath
  • filepath未指定模式或文件系统类型(如hdfs://namenode:9000/),Hive会把${fs.default.name}值作为Namenode URL

若语句带

OVERWRITE

关键字,目标表或分区中的原始数据会被删除,替换成新数据;若未指定

OVERWRITE

关键字,新数据会以追加的方式被添加到表中。

若表或分区中的任何一个文件与

filepath

中的任何一个文件同名,则表或分区中的同名文件会被

filepath

中的同名文件替换。

将本地txt文件导入到分区表中(例子)

  • 创建数据库shopping
CREATE DATABASE IF NOT EXISTS shopping
LOCATION '/hive/shopping';
  • 假设在数据库shopping中有分区表items_info2
CREATE TABLE IF NOT EXISTS shopping.items_info2(
name STRING COMMENT 'item name',
price FLOAT COMMENT 'item price',
category STRING COMMENT 'item category',
brand STRING COMMENT 'item brand',
type STRING COMMENT 'item type',
stock INT COMMENT 'item stock',
address STRUCT <city:STRING, country:STRING, zip:INT> COMMENT 'item sales address')
COMMENT 'goods information table'
PARTITIONED BY (p_category STRING,p_brand STRING) //设置分区
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
TBLPROPERTIES ('creator'='Xiaoming','date'='2019-01-01');
  • 如假设本地文件/home/shoppings.txt内容为:

  • 字段间分隔符,根据表中设置FIELDS TERMINATED BY ','确定的。如果表中设置FIELDS TERMINATED BY '\t',那么字段间就应该用Tab键间隔开

  • 集合分隔符-根据表中设置COLLECTION ITEMS TERMINATED BY '-'确定的。如果表中设置COLLECTION ITEMS TERMINATED BY ',',那么字段间就应该用逗号,键间隔开

  • 使用LOAD命令加载本地文件数据到items_info2表相应的分区中(PARTITION关键字指定内容):

load data local inpath '/home/shoppings.txt' overwrite into table items_info2
partition (p_category='shoes',p_brand='playboy');

  • 执行LOAD命令后,Hive会在 HDFS 的/hive/shopping/items2/路径下创建目录p_category=shoes/p_brand=playboy/,并且会把items_info.txt文件复制到上述创建的目录下

编程要求

student

表结构:
INFOTYPE

Sno
INT
name
STRING
age
INT
sex
STRING
score
STRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT>

本地文件

/home/student.txt

的内容为:

  • 创建数据库test1
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
  • 切换到test1数据库;
mysql> use test1;
Database changed
  • test1中创建相应格式的表student(未分区),表结构如上所示,分隔符根据/home/student.txt的内容设置;
  • /home/student.txt的数据导入到表student中。
/********* Begin *********/
create database if not exists test1 location '/hive/test1';
use test1;

create table if not exists test1.student (
    Sno int,
    name string,
    age int,
    sex string,
    score struct <Chinese:float, Math:float, English:float>
)

row format delimited 
fields terminated by ',' 
collection items terminated by '-';

load data local inpath '/home/student.txt' overwrite into table student;

/********* End *********/
select * from student;
  1. 按照以上要求填写命令。每个要求对应一条命令,共4条命令,以;隔开。(请勿删除代码框架)
  2. 由于hive启动时间较长,测评时请耐心等待,大概需要时间:60s左右。
标签: hive hadoop 大数据

本文转载自: https://blog.csdn.net/qq_61604164/article/details/128812105
版权归原作者 是草莓熊吖 所有, 如有侵权,请联系我们删除。

“Hive 表 DML 操作 第1关:将文件中的数据导入(Load)到 Hive 表中”的评论:

还没有评论