Hive(三)——操作

Hive操作

  • Hive作为Hadoop生态的数据仓库工具,支持类似SQL的结构化查询语句,与标准SQL不同的是,HiveSQL支持更多的函数,用于海量数据的处理

  • 数据库与数据仓库

对比 数据库 数据仓库 数据湖
数据量 MB、GB GB PB TB GB TB PB
数据种类 结构化数据 关系型数据、K-V数据 关系型结构化数据 结构化、半结构化、非结构化
实现方式 MySQL Oracle Hive SparkSQL OSS
使用场景 与应用程序进行低延迟交互 存放历史存量为数据分析做容器

特殊操作

  • Hive命令行中允许执行shell命令

# ! shell命令;
hive> ! clear;
  • Hive命令行中允许执行hdfs命令

# dfs 命令;
hive> dfs -ls /;

查看和修改Hive终端配置

# 查看所有配置
hive> set
# 查看某个配置的值
# hive> set 配置项名称;
hive (db_test01)> set hive.cli.print.current.db;
# 修改当前终端配置
hive> set hive.cli.print.current.db=true;
​

注意:上述修改方式只当前终端有效,如果要永久生效,需要

hive-site.xml添加配置

<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
​

Hive(三)——操作

DDL

--  创建数据库
create database 数据库名;
-- 查看数据库
show databases;
-- 切换数据库
use 数据库名;
-- 删除数据库
-- 只能删除空数据库
drop database 数据库名;
-- 删除有文件的数据库,递归强制删除
drop database 数据库名 cascade;
-- 查看表
show tables;
-- 创建表
--  创建  外部     表    如果不存在      表名
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
-- (列名    数据类型    字段备注,)
[(col_name data_type [COMMENT col_comment], ...)]
-- 表备注
[COMMENT table_comment]
-- 设置表的分区字段  (字段名  类型)
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
-- 指定分桶 按照 (字段名)
[CLUSTERED BY (col_name, col_name, ...)
-- 在分桶过程中  按照某些字段排序
[SORTED BY (col_name [ASC|DESC], ...)]
-- 设置桶的个数
INTO num_buckets BUCKETS]
-- 行 格式
[ROW FORMAT
-- 受限于
DELIMITED
-- 字段  结束      于  字符
[FIELDS TERMINATED BY ' |- \u0001']
-- 集合      元素  结束       于
[COLLECTION ITEMS TERMINATED BY ',']
​
 
-- 映射结构的kv之间的分隔符
[MAP KEYS TERMINATED BY ':']
-- 设置行结束符
[LINES TERMINATED BY '\n']]
-- 设置文件的存格式
-- text
-- ORC 是一种列式存储的数据格式,用于海量数据的存储和查询
[STORED AS file_format]
-- 设置当前表读取的HDFS路径
[LOCATION hdfs_path]
-- 查看表详情
desc table_name;
desc extended table_name;
desc formatted table_name;
-- 删除表
drop table table_name;
  • 截断表

-- 保留表的结构  移除所有的表内容
-- 只有管理表才能进行截断操作
truncate

DML

  • Hive底层将表的内容保存在HDFS,HDFS不支持文件的随机修改

  • 所以Hive也不支持表的字段修改和数据的update操作

数据导入

  • load data

-- 加载数据 本地    从某个路径    可以是本地路径或者hdfs路径
load data [local] inpath '/root/data/student.txt'
-- 是否覆盖   加载到 某个表
[overwrite] into table student
-- 添加分区字段
[partition (partcol1=val1,…)];
  • insert

-- 将后面的查询结果 写入到前表中
insert into table 表名 partition (分区字段) select语句;
  • as select

-- 通过查询结果创建新表
create table if not exists 表名  as select语句;
  • hdfs直接上传文件

-- 本质上Hive就是将表结构映射到HDFS文件,所以直接操作底层文件夹可以让Hive读取上传的文件,
-- 分区表 需要检查并修复分区
msck repair table 表名
-- 检查表的行格式与原始数据是否一致,如果不规整的数据通常创建单列的表作为原始表
hdfs dfs -put 文件 表路径

数据导出

  • insert

    将数据库中的表数据导出 到hdfs或者本地linux

-- 不加local则导出到HDFS路径
insert overwrite local directory '/output_t_weblog'
    row format delimited fields terminated by '|'
select *
from t_weblog_extracted_orc;
  • hdfs get 如果Hive表使用text存储格式,则可以直接从表所在路径读取表的内容文件

  • hive自带的导入导出工具

-- 将表数据导出到hdfs路径
export table default.student to '/user/hive/warehouse/export/student';
import table student2 partition(month='202005') from '/user/hive/warehouse/export/student';

Sqoop

Sqoop使用手册 – AmosCloud

DQL

--             去重       HQL中通常需要使用各种函数对查询的字段进行处理
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
--  从哪个表查
  FROM db_ref.table_ref t1, (select xxx) t2
--  添加过滤条件
  [WHERE where_condition]
--  分组 MR底层指定分区条件
  [GROUP BY col_list]
--  排序 (全局排序) MR要实现全局排序 就只能启动1个reducer
  [ORDER BY col_list]
-- 如果MR分区和排序的字段 是同一个字段,则可以直接使用 CLUSTER by
  [CLUSTER BY col_list
--     指定按某些字段进行分布 (MR分区,自定义partitioner)
    | [DISTRIBUTE BY col_list]
--     指定分区内的排序方式 (MR 中的shuffle排序)
      [SORT BY col_list]
  ]
-- 限制读取原始数据的条数
 [LIMIT number]COPY
上一篇:09


下一篇:82.Hive SQL插入动态分区的异常分析