Hive(三)——操作

Hive操作

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

  • 数据库与数据仓库

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

特殊操作

  • 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>
​

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值