我与Hive的不解之谜系列(二):Hive的常见命令及导入数据和导出数据

本篇主讲内容

1.温故知新

2.hive的常见命令

3.内部表和外部表

4.导入数据的方式

5.导出数据的方式

温故知新

1)在hive中使用hdfs的命令  dfs  +命令 如:dfs  -ls  /

2)hive只能分析结构化的数据

3)hive的本质:

在hive中创建的表,库都在hdfs上有相应的路径!

表中的数据,是文件的形式在表对应的目录中存放!

在建表和建库后,会在Mysql中生成对应的schema信息!

tbls: 存放表的元数据
dbs:  库的元数据
column_v2: 列的元数据

hive的常见命令

库操作

create database if not exists 库名
comment 库的注释
location  库的路径
with dbproperties(属性名=属性值,...)

drop database  库名  需要这个数据库下面没有表

drop database 库名 cascade: 强制删除(不管有没有表)

alter database 库名 set dbproperties(''='',''='')

show databases;  查看所有的数据库

desc database 库名 查看这个库的信息

desc  database extended 库名   查看这个数据库更为详尽的信息

表操作

创建

create [external] table  if not exists 表名
(列名 列类型 comment 列注释,...)
comment 表的注释
.....
row format ... //表中每行数据的格式
store as  xxxx  //表中数据的存储格式
location  //表的路径

创建表,带external,这个表是外部表,不带是管理表(内部表)

外部表在删除表时,只删除mysql中的元数据!

管理表在删除表时,删除mysql中的元数据和在hdfs表目录中的数据

表是廉价的,数据是珍贵的,一般都建议外部表!

    外部表:  alter table 表名 set tblproperties('EXTERNAL'='TRUE')
    内部表:  alter table 表名 set tblproperties('EXTERNAL'='FALSE')

查看表信息

desc tb_name ; --字段信息
desc formatted tb_name ; --表的详细信息

  1. 表字段
  2. 位置
  3. 类型 (内部表 外部表)
  4. 输入数据类型
  5. 分隔符

内部表和外部表

在hive中的表分两种

1)外部表 external
2)内部表 默认的 也称管理表 managertable

区别详解

先创建一个表

create table tb_log(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ‘,’
location ‘hdfs://linux01:8020/data/log/’

创建一个表(管理表)

create table tb_log2(
id int ,
name string )
row format delimited fields terminated by “,”
location ‘hdfs://linux01:8020/data/log/’ ;

删除此表

drop table tb_log2 ; – 指定的路径下的数据会被删除
select * from tb_log ; --没有数据

创建一个外部表—external关键字

create external table tb_log2(
id int ,
name string )
row format delimited fields terminated by “,”
location ‘/data/log/’ ;

此时删除此表

drop table tb_log2 ; – 指定的路径下的数据不会被删除
select * from tb_log ; --有数据没有受别的表影响

什么时候用

使用外部表更加的安全,重要原始核心数据或者建表都用外部表,使得删除的时候不会真正删掉hdfs上的文件

内部表一旦删除,就没有了。

导入数据的方式

hive是使用SQL语句处理HDFS上的结构化数据

直接put 将结构化数据放进表的目录中

1)建表的时候指定location 结构化数据的位置文件夹

create table tb_log(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ‘,’
location ‘hdfs://linux01:8020/data/log/’

2)将结构化数据直接put到表的目录中

 hdfs dfs -put a.txt /data/log/

load方式导入数据

load本地数据到表中

1)在linux01中准备结构化数据

2)创建表 tb_user  并指定切割结构化数据的分隔符

create table tb_user(
uid string,
name string,
age int,
gender string
)
row format delimited fields terminated by ',';

load数据到表中

load data local inpath '/root/data.txt' into table tb_user

查询表发现有数据:

load  hdfs上的结构化数据到hive中

去掉local   使用hdfs的目录 为什么他会自己能找到hdfs的目录呢?我们之前在机器上配过的:默认文件系统为HDFS

 load data  inpath "/root/data.txt" into table tb_user ;  

前两个load都是导入数据到表中,会在表中追加数据,你比如再执行一次load本地文件到tb_user中,你会发现内容被追加了

还有一个load是往表中覆盖数据   overrite

 load data local  inpath "/root/data.txt" overwrite into table tb_user ; 

insert插入数据:不建议使用

insert into tb_user values(1,‘fjj’),(2,‘bgg’) ; – 生成小文件
insert into tb_user values(1,‘fjj’),(2,‘bgg’) ; – 生成小文件

insert 保留结果数据到表中

insert into  tb_user
select id  , name  from  tb_log ;
+--------------+---------------+
| tb_user.uid  | tb_user.name  |
+--------------+---------------+
| 1            | zbz           |
| 2            | ycy           |
| 3            | gdg           |
| 4            | lyf           |
+--------------+---------------+
注意 表的结构和查询的结果字段  个数  数据类型   属性一致

insert 保留结果数据到新的表中   全量数据

create  table tb_log_res
as 
select id  , name  from  tb_log ;
+----------------+------------------+
| tb_log_res.id  | tb_log_res.name  |
+----------------+------------------+
| 1              | zbz              |
| 2              | ycy              |
| 3              | gdg              |
| 4              | lyf              |
+----------------+------------------+

import

需要和export一起用

export table tb_log to '/user/hive/warehouse/export/tb_log';
import table tb_log2 from '/user/hive/warehouse/export/tb_log';

更多学习、面试资料尽在微信公众号:Hadoop大数据开发

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值