Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构。它为数据仓库的管理提供了许多功能:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。同时Hive还定义了类SQL的语言(HiveQL)。允许用户进行和SQL相似的操作,它可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能。还允许开发人员方便的使用Mapper和Reducer操作,可以将SQL语句转换为MapReduce任务运行。

Hive的特点

Hive作为Hadoop之上的数据仓库处理工具,它所有的数据都是存储在Hadoop兼容的文件系统中。Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive设定的目录下。因此,Hive不支持对数据的修改和添加,所有的数据都是在加载的时候确定的。

  • Hive 最大的特点是通过类 SQL 来分析大数据,而避免了写 MapReduce 程序来分析数据,这样使得分析数据更容易。
  • 数据是存储在 HDFS 上的,Hive 本身并不提供数据的存储功能
  • Hive 是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如 MySQL)。
  • 数据存储方面:它能够存储很大的数据集,并且对数据完整性、格式要求并不严格。
  • 数据处理方面:不适用于实时计算和响应,使用于离线分析。

Hive体系架构

  • 用户接口:包括CLI,JDBC/ODBC,WebUI等方式。
  • 元数据Metastore:通常存储在关系数据库如mysql,derby中。元数据包括:表名,表所属的数据库,表的列/分区字段,表的属性(是否为外部表等),表的数据所在目录等信息。
  • Driver:包括解释器、编译器、优化器、执行器。HiveQL查询语句从词法分析。语法分析、编译、优化以及查询计划生成。生成的查询计划存储在HDFS中,并在后面的MapReduce中进行调用执行。
    • 解析器:将SQL转换成抽象的语法树AST。
    • 编译器:将抽象语法树AST编译生成逻辑执行计划。
    • 优化器:将逻辑执行计划进行优化。
    • 执行器:把逻辑执行计划转换成可以运行的物理执行计划。
  • Hadoop:使用HDFS进行存储,利用MapReduce进行计算。

Hive运行机制

  1. 编写HiveQL,并提交;
  2. Hive解析查询语句,并生成查询计划;
  3. Hive将查询计划转化为MR作业;
  4. 运行MR作业,得到最终结果。

Hive与关系数据库的区别

Hive中的基本数据类型

基本数据类型

Hive支持关系数据库中大多数据基本数据类型,同时还支持三种复杂类型。

复杂数据类型

示例:

Hive表

创建表

-- 直接建表法
create table t_page_view (  page_id bigint comment '页面ID',  page_name string comment '页面名称',  page_url string comment '页面URL'
)
comment '页面视图'
partitioned by (ds string comment '当前时间,用于分区字段')
stored as parquet
location '/user/hive/warehouse/t_page_view';-- 查询建表法
create table t_page_view2  as select * from t_page_view;-- like建表法(克隆表)
create table t_page_view3 like t_page_view;

Hive表类型

内部表

Hive中默认创建的是内部表,内部表的数据由Hive来管理。在 drop表的时候,表的数据和元数据都会被删除。

CREATE TABLE pokes (foo INT,bar STRING
);

外部表

外部表的数据不由Hive管理。Hive可以创建外部表和 HDFS、HBase 和 Elasticsearch 等进行整合。drop外部表时,只会删除元数据,不会删除真实数据。外部表关键字EXTERNAL

CREATE EXTERNAL TABLE IF NOT EXISTS tb_station (station string,lon string,lat string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/test/coordinate/';

内部表与外部表转换

-- 内部表转外部表
alter table tableA set TBLPROPERTIES('EXTERNAL'='true');
-- 外部表转内部表
alter table tableA set TBLPROPERTIES('EXTERNAL'='false');

分区表

Hive表的数据是存储在HFDS中对应的目录中,普通表的数据直接存储在这个目录下,而分区表存储时,会再划分子目录来存储,一个分区对应一个子目录。主要作用是来优化查询性能。在Hive表查询的时候,如果指定了分区字段作为筛选条件,那么只需要到对应的分区目录下去检索数据即可,减少了处理的数据量,从而有效的提高了效率。在对分区表进行查询时,尽量使用分区字段作为筛选条件

CREATE TABLE invites (foo INT,bar STRING
)
PARTITIONED BY (ds STRING);

桶表

分桶是将数据分解成更容易管理的若干部分的技术,桶表示对数据源数据文件本身来拆分数据。桶是更为细粒度的数据范围划分。Hive采用对列进行哈希,然后对桶的个数取模的方式决定该条记录存放在哪个桶当中。

创建桶表时,需要指定桶的个数,分桶的依据字段,Hive就可以自动将数据分桶存储。

查询时,只需要遍历一个桶里的数据,或者遍历部分桶,这样就提高了查询效率。

示例:

CREATE TABLE ods.tb_ad_action_d (op_time STRING,user_id STRING,task_id STRING,event_name STRING
)
CLUSTERED BY (user_id)
SORTED BY(task_id)
INTO 10 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
STORED AS TEXTFILE;

  • CLUSTERED BY:是指根据user_id的值进行哈希后模除分桶个数,根据得到的结果,确定这行数据分入哪个桶中。
  • SORTED BY:指定桶中的数据以哪个字段进行排序,排序的好处是,在 join 操作时能够获得很高的效率。
  • INTO 10 BUCKETS:指定一共分多少个桶。

常用HiveQL整理

Database

-- 创建database
create database IF NOT EXISTS ods;USE database_name;USE DEFAULT;-- 删除database
drop database if exists ods;

Table

-- 创建内部表(默认)
create table trade_detail(id bigint, account string, income double, expenses double, time string)
row format delimited
fields terminated by 't';-- 创建分区表
create table td_part(id bigint, account string, income double, expenses double, time string)
partitioned by (logdate string)
row format delimited
fields terminated by 't';-- 创建外部表
create external table td_ext(id bigint, account string, income double, expenses double, time string)
row format delimited
fields terminated by 't'
location '/data/td_ext';-- 创建外部分区表
create external table td_part_ext(id bigint, account string, income double, expenses double, time string)
partitioned by (logdate string)
stored as parquet tblproperties("parquet.compress"="SNAPPY")
location '/data/td_part_ext';drop table if exists td_part_ext;

Alter

-- 修改表明
ALTER TABLE page_view RENAME to page_view_new;-- 修改字段
ALTER TABLE page_view CHANGE ip ip_address string AFTER refererurl;-- 添加字段
ALTER TABLE page_view ADD COLUMNS (name string comment 'view name');-- 添加分区
ALTER TABLE page_view ADD IF NOT EXISTS PARTITION (dt='20190705') LOCATION='/data/page_view/dt=20190705';-- 修改location
ALTER TABLE page_view PARTITION(dt='20190706') SET LOCATION "/data/page_view/dt=20190706";-- 修改分隔符
ALTER TABLE page_view SET SERDEPROPERTIES ('field.delim' = ',');-- 删除分区
ALTER TABLE page_view DROP PARTITION (dt='2008-08-08', country='us');

Show

-- 查看创建表语句
show create table td_part;-- 查看表分区
show partitions td_part;

修复分区

-- 修复分区
msck repair table page_view;

数据导入

-- 将本地文件导入到hive
load data local inpath '/home/hadoop/student' overwrite into table student partition(state='Sichuan', city='Chengdu');-- 将hdfs上文件导入到hive
load data inpath '/user/hadoop/add.txt' into table student partition(state='Sichuan', city='Chengdu');-- 从别的表中查询出相应的数据并导入到hive表中
insert into table test partition(age='25') select id ,name from wyp where age='25';-- 在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
create table tmp as select * from student where age>'18';

数据导出

-- 导出到本地文件系统
insert overwrite local directory '/home/hadoop/student' select * from student;-- 导出到hdfs
insert overwrite directory '/user/hadoop/student' select * from student;-- 将查询结果插入到表中(追加)
insert into table student_new select id,name from student where age='25';-- 将查询结果插入到表中(覆盖)
insert into table student_new select id,name from student where age='25';

自定义函数

UDF(user-defined functions)

用户自定义普通函数,用于处理单行数据,并生成单个数据行。用来自定义完成对字段处理的函数。

UDAF(user-defined aggregation functions)

聚合函数,多对一,多行变一行,需和group by联合使用。

UDTF(user-defined table-generating functions)

表生成函数,一对多,一行变多行。

hive load data外部表报错_从0开始学大数据-Hive基础篇相关推荐

  1. hive load data外部表报错_生产SparkSQL如何读写本地外部数据源及排错

    https://spark-packages.org/里有很多third-party数据源的package,spark把包加载进来就可以使用了 csv格式在spark2.0版本之后是内置的,2.0之前 ...

  2. hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)

    一.使用Load语句进行数据的导入 -语法: LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]INTO TABLE tablename [PARTITIO ...

  3. hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据

    上一篇说的是外部表,当把EXTERNAL关键字去掉的时候就是内部表了.为什么叫内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期. 如果你熟悉Hive那你一定知道,Hive默认情况下会将 ...

  4. ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录

    @ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录TOC 今天新建完oracle外部表,看了语法没错误,看了数据文件和 ...

  5. mysql load报错_mysql:执行LOAD DATA LOCAL 报错

    mysql:执行LOAD DATA LOCAL 报错. 我使用navicat for mysql 连接 mysql服务器执行local 可以正常执行 . show VARIABLES like  '% ...

  6. hive load data出错

    今天往hive导数据时发生了个错误 hive> load data inpath '/user/tmp/uids.test_copy_3.txt' into table userfeature. ...

  7. 27.大数据---Hive的数据库和表的基本操作;脚本化运行;内部表;外部表;分区表

    一 . Hive 基本操作 1. 数据库操作(增.删.改.查) 1.1 创建数据库 create database if not exists test_001; 使用数据库 use test_001 ...

  8. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

  9. 大数据hive快速开始

    目录 数据仓库Hive 安装 **下载** **设置Hive环境** **配置Hive环境变量** 配置元数据仓库 启动 **验证Hive安装** 问题 使用 创建数据库 创建表 导入数据 导出数据 ...

最新文章

  1. .net autofac Web Forms
  2. android18lazuli,The Rise And Fall Of Android 17
  3. go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...
  4. 65 SD配置-交货凭证配置-定义相关项目类别的拣配相关
  5. 《Programming with Objective-C》第四章 Encapsulating Data
  6. Vue-Less的自动和手动引入
  7. 如何解决打开PDF文件时显示已损坏无法修复的问题!
  8. MThings:ModbusTCP通讯调试调测工具助手
  9. win10user文件夹迁移_Win10纯净版下迁移用户文件的技巧
  10. 数学四大思想八大方法_四种思想方法,让你轻松掌握高中数学
  11. 防侧漏之弱引用的使用
  12. 安装 Ubuntu 22.04.1 LTS 桌面版(详细步骤)
  13. element ui 前台模板_一个干净优雅的 Element UI Admin 模板
  14. js中怎样把ASCII码中的字符与十进制的数相互转换-学习笔记
  15. EXCEL设置自动隔行填充颜色
  16. ISCC 2021 SSTI
  17. 机器学习之先验分布,后验分布,共轭先验分布
  18. 【区块链实战】什么是 P2P 网络,区块链和 P2P 网络有什么关系
  19. 3D游戏编程与设计作业一
  20. 程序员如何进入人工智能和大数据领域

热门文章

  1. ​EMC存储产品介绍分析(二):大数据利器Isilon (2)
  2. NTFS格式分区大小数值表
  3. Linux 命令(121)—— cal 命令
  4. C++ 构造函数体内赋值与初始化列表的区别
  5. C++ struct 与 union
  6. 我的游戏学习日志17——游戏元素的解析(1)
  7. knewone最新分享购物网站模板
  8. 在Javascript中得到站点的根路径
  9. Handler: Service中使用Toast
  10. 6个面的骰子 标上1 2 3 4 5 6 投掷8次 求出现和的概率最大的数 ,就是这8次的和最有可能是多少...