欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-09 13:15:25
...

本篇主讲内容

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 库名   查看这个数据库更为详尽的信息

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

表操作

创建

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中准备结构化数据

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

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

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

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

load数据到表中

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

查询表发现有数据:

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

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

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

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

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

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

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

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

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

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大数据开发

 

相关标签: hive 大数据