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

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

任务描述

本关任务:将文档中的数据导入到数据库的表中。


相关知识

之前系列实训中我们接触过导入本地文件到Hive表中,本关就进行导入的详细讲解。

为了完成本关任务,你需要掌握:1.导入命令语法,2.如何将本地txt文件导入到分区表中。


导入命令语法

Load操作执行copy/move命令把数据文件copy/moveHive表位于 HDFS上的目录位置,并不会对数据内容执行格式检查或格式转换操作。Load命令语法为:

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

文件路径filepath可以是指向HDFS的相对路径或是绝对路径,也可以是指向本地文件系统(Linux文件系统)相对路径(当前工作目录)或绝对路径。


filepath指向HDFSLOAD执行的是move操作(即执行LOADfilepath中的文件不再存在);若filepath指向本地文件系统,LOAD执行的是copy操作(即执行LOADfilepath中的文件仍然存在),但需要指定LOCAL关键字。


filepath指向一个文件,LOADcopymove相应的文件到表tablename;若filepath指向一个目录,LOADcopymove相应目录下的所有文件到表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 shoppingLOCATION '/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表结构:

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


本地文件/home/student.txt的内容为:

  • 创建数据库test1
  • 切换到test1数据库;
  • test1中创建相应格式的表student(未分区),表结构如上所示,分隔符根据/home/student.txt的内容设置;
  • /home/student.txt的数据导入到表student中。
按照以上要求填写命令。每个要求对应一条命令,共4条命令,以;隔开。(请勿删除代码框架)
由于hive启动时间较长,测评时请耐心等待,大概需要时间:60s左右。


测试说明

平台会对你编写的命令进行测试:

若操作成功,会显示如下信息:

导入数据后student表中的数据为:
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
2    Xiaoliang    17    male    {"chinese":95.0,"math":88.0,"english":93.5}
3    Xiaoming    19    male    {"chinese":86.5,"math":98.0,"english":91.0}
4    Xiaoguang    18    male    {"chinese":88.0,"math":80.0,"english":94.0}
5    Xiaohua    16    female    {"chinese":97.0,"math":58.5,"english":88.0}
/hive/test1 下的目录结构为:
/hive/test1/student
/hive/test1/student/student.txt


开始你的任务吧,祝你成功!

/********* 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;



目录
相关文章
|
7月前
|
SQL 存储 HIVE
Hive中的表是如何定义的?请解释表的结构和数据类型。
Hive中的表是如何定义的?请解释表的结构和数据类型。
103 0
|
7月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
420 0
|
7月前
|
SQL 消息中间件 数据处理
DataX读取Hive Orc格式表丢失数据处理记录
DataX读取Hive Orc格式表丢失数据处理记录
265 0
|
3月前
|
SQL 数据库 HIVE
hive数仓 ods层增量数据导入
根据业务需求,当表数据量超过10万条时采用增量数据导入,否则全量导入。增量导入基于`create_date`和`modify_date`字段进行,并确保时间字段已建立索引以提升查询效率。避免在索引字段上执行函数操作。创建增量表和全量表,并按日期进行分区。首次导入全量数据,后续每日新增或变更数据保存在增量表中,通过全量表与增量表的合并保持数据一致性。
106 13
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
215 1
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
76 0
|
7月前
|
SQL DataWorks 网络安全
DataWorks操作报错合集之DataWorks连接Hive数据库时出现连接超时的问题如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
105 2
|
7月前
|
SQL 存储 算法
【Hive】Hive 小文件过多怎么解决?
【4月更文挑战第16天】【Hive】Hive 小文件过多怎么解决?
|
7月前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
94 0