没有合适的资源?快使用搜索试试~ 我知道了~
第3章 HiveSQL 数据操控、查询语言(DML、DQL)1
需积分: 0 0 下载量 6 浏览量
2022-08-08
19:14:22
上传
评论
收藏 1.65MB DOCX 举报
温馨提示
试读
48页
第3章 HiveSQL 数据操控、查询语言(DML、DQL)DML-Load加载数据背景回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对
资源推荐
资源详情
资源评论
第3章 HiveSQL 数据操控、查询语言(DML、
DQL)
1. DML-Load加载数据
1.1 背景
回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对应的文件夹,默认
路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse。
要想让hive的表和结构化的数据文件产生映射,就需要把文件移到到表对应的文件夹下面,当
然,可以在建表的时候使用location语句指定数据文件的路径。但是不管路径在哪里,必须把数据
文件移动到对应的路径下面。
最原始暴力直接的方式就是使用hadoop fs –put等方式将数据移动到路径下面。
Hive官方推荐使用Load命令将数据加载到表中。
1.2 Load语法
在将数据load加载到表中时,Hive不会进行任何转换。
加载操作是将数据文件移动到与Hive表对应的位置的纯复制/移动操作。
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat'
SERDE 'serde'] (3.0 or later)
1.2.1 filepath
filepath表示的待移动数据的路径,可以引用一个文件(在这种情况下,Hive将文件移动到表
中),也可以是一个目录(在这种情况下,Hive将把该目录中的所有文件移动到表中)。
相对路径,例如:project/data1
绝对路径,例如:/user/hive/project/data1
具有schema的完整URI,例如:hdfs://namenode:9000/user/hive/project/data1
1.2.2 LOCAL
如果指定了LOCAL, load命令将在本地文件系统中查找文件路径。如果指定了相对路径,它
将相对于用户的当前工作目录进行解释。用户也可以为本地文件指定完整的URI-例如:
file:///user/hive/project/data1。
注意,如果对HiveServer2服务运行此命令。这里的本地文件系统指的是Hiveserver2服务所在
机器的本地Linux文件系统,不是Hive客户端所在的本地文件系统。
如果没有指定LOCAL关键字,如果filepath指向的是一个完整的URI,hive会直接使用这个URI。
否则如果没有指定schema或者authority,Hive会使用在hadoop配置文件中定义的schema 和
authority,即参数fs.default.name指定的(不出意外,都是HDFS)。
1.2.3 OVERWRITE
如果使用了OVERWRITE关键字,则目标表(或者分区)中的内容会被删除,然后再将 filepath
指向的文件/目录中的内容添加到表/分区中。
1.3 案例:load加载数据到Hive表
--------
练习
:Load Data From Local FS or HDFS------
--step1:
建表
--
建表
student_local
用于演示从本地加载数据
create table student_local(num int,name string,sex string,age int,dept
string) row format delimited fields terminated by ',';
--
建表
student_HDFS
用于演示从
HDFS
加载数据
create external table student_HDFS(num int,name string,sex string,age
int,dept string) row format delimited fields terminated by ',';
--
建表
student_HDFS_p
用于演示从
HDFS
加载数据到分区表
create table student_HDFS_p(num int,name string,sex string,age int,dept
string) partitioned by(country string) row format delimited fields
terminated by ',';
--
建议使用
beeline
客户端 可以显示出加载过程日志信息
--step2:
加载数据
--
从本地加载数据 数据位于
HS2
(
node1
)本地文件系统 本质是
hadoop fs -put
上传操作
LOAD DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE
student_local;
--
从
HDFS
加载数据 数据位于
HDFS
文件系统根目录下 本质是
hadoop fs -mv
移动操作
--
先把数据上传到
HDFS
上
hadoop fs -put /root/hivedata/students.txt /
LOAD DATA INPATH '/students.txt' INTO TABLE student_HDFS;
----
从
HDFS
加载数据到分区表中并制定分区 数据位于
HDFS
文件系统根目录下
--
先把数据上传到
HDFS
上
hadoop fs -put /root/hivedata/students.txt /
LOAD DATA INPATH '/students.txt' INTO TABLE student_HDFS_p
partition(country ="CHina");
1.4 Hive3.0 Load新特性
Hive 3.0及更高版本中,除了移动复制操作之外,还支持其他加载操作,因为Hive在内部在某
些场合下会将加载重写为INSERT AS SELECT。
比如,如果表具有分区,则load命令没有指定分区,则将load转换为INSERT AS SELECT,并
假定最后一组列为分区列。如果文件不符合预期的架构,它将引发错误。
-------hive 3.0 load
命令新特性
------------------
CREATE TABLE if not exists tab1 (col1 int, col2 int)
PARTITIONED BY (col3 int)
row format delimited fields terminated by ',';
LOAD DATA LOCAL INPATH '/root/hivedata/tab1.txt' INTO TABLE tab1;
--tab1.txt
内容如下
11,22,1
33,44,2
本来加载的时候没有指定分区,语句是报错的,但是文件的格式符合表的结构,前两个是
col1,col2,最后一个是分区字段col3,则此时会将load语句转换成为insert as select语句。
在Hive3.0中,还支持使用inputformat、SerDe指定任何Hive输入格式,例如文本,ORC等。
2. DML-Insert插入数据
2.1 背景:RDBMS中insert使用(insert+values)
在MySQL这样的RDBMS中,通常是insert+values的方式来向表插入数据,并且速度很快。这
也是RDBMS中插入数据的核心方式。
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
假如说对Hive的定位不清,把Hive当成RDBMS来使用,也使用insert+values的方式插入数据,
会如何呢?
--hive
中
insert+values
create table t_test_insert(id int,name string,age int);
insert into table t_test_insert values(1,"allen",18);
你会发现执行过程非常非常慢,底层是使用MapReduce把数据写入HDFS的。
试想一下,如何在Hive中这样玩,对于大数据分析,海量数据一条条插入是不是非常刺激。因
此在Hive中我们通过将数据清洗成为结构化文件,再Load加载到表中。
但是并不意味着insert语法在Hive中没有使用地位了,通常在Hive中我们使用insert+select语句。
即插入表的数据来自于后续select查询语句返回的结果。
剩余47页未读,继续阅读
资源评论
无能为力就要努力
- 粉丝: 16
- 资源: 332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功