大数据框架hive——创建表,创建分区表;设置严格模式;建立外部表与分区表;hive与Mysql的区别;启动HiveServer2,使用Beeline客户端连接hive;使用fecthTask

hive常见创建表方式

查看表结构详情:

desc formatted 表名

方式一:create table

       指定字段信息

方式二:CTAS

       通过子查询创建表

       create table  as Select

方式三:create like

       创建类似表

       create table new_table like old_table/view

Hive分区表

什么地方会使用到分区表

首先,如果要每一个月统计一次一线城市与准一线城市的交通数据

那么,如何存储数据

是建立一张表,在这张表里添加新的数据,还是每一个月,每一个城市建立一张表

显然,这两种方法都不可取

第一:如果不停的将数据添加到表中,区分数据的语句将会随着时间的增加而越来越复杂

第二:如果为每次都建立一张表,那么要建立的表的数目是很可怕的,也是不可取

此时,就用到了分区表

建立分区表

--分区字段:
-- 月份,城市
create table 表名(
字段.....
)
PARTITIONED BY (分区名 字符类型 COMMENT '分区描述',....)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  
LINES TERMINATED BY '\n';

分区表是如何管理数据(数据文件)

普通表数据文件存储:

将表中所有数据放到对应HDFS目录下即可:

目录结构:数据库名/表名/数据

分区表:

按照分区字段创建对应分区目录,划分数据存储

目录结构:数据库名/表名/第一个分区名/第二个分区名/..分区名/数据

如何使用分区表中的分区中的数据

sql语句如下:

select
字段名
from
分区表名
where
分区名=“具体分区” and 分区名=“具体分区”

分区表加载数据

方式一:使用load加载,语句如下

LOAD DATA LOCAL
INPATH 'Linux系统中文件路径'
INTO TABLE 表名
PARTITION (分区名=“第几个分区”,...)

方式二:使用hdfs中的put命令

1:在hdfs中建立对应的分区表的文件路径

hive>dfs -mkdir -p 想要建立的分区目录

2:向该目录上传数据文件

hive>dfs -put 数据源目录 分区目录

3:修复元数据:目的,通知元数据,添加了新的分区与分区数据

方法1:修复元数据

msck repair table 表名 

实现原理:扫描表下面的目录,能知道哪些分区信息  
              和 元数据表里面分区信息对比

方法2:添加元数据

ALTER TABLE 表名 ADD IF NOT EXISTS PARTITION(分区名=“新的分区名”,....)

4:查看分区元数据是否添加成功

show partitions 表名

严格模式

严格模式,就是防止执行危险的sql语句

危险的sql语句

Cartesian Product.笛卡尔积,join 没有on

即执行的sql语句使用了join,但是没有使用on来进行条件过滤

不使用on的后果就是会产生笛卡尔集

即如果进行join的俩张表各有十万条数据,直接join,可能就会使整个分布式集群宕机

 No partition being picked up for a query.没有分区信息的查询:分区表必须指定分区字段

即查询分区表时,必须加上要查询的具体的分区,否则会查询所有分区的数据

Comparing bigints and strings.不能比较bigints与string类型的数据

Comparing bigints and doubles.不能比较bigints与doubles类型的数据

Orderby without limit. order by 没有limit

配置严格模式

方法一:修改配置文件

<property>
    <name>hive.mapred.mode</name>
    <value>strict</value>
</property>

方法二:会话内set设置,当前会话有效

set hive.mapred.mode = strict

外部表与分区表结合使用

外部表删除表时不会将数据删除,分区可以存储大量分组数据

创建外部分区表

--------------------------------------------
--        外部表与分区表结合使用
--    在删除的时候,不会删除源文件,那么我们数据不交给Hive管理,
--    通常自己指定数据存储位置
--    企业做法:
--        (1)往HDFS文件系统中写文件,放到指定目录下,目录包含分区字段
--        (2)修复元数据
--------------------------------------------

(1)表的数据存储目录

dfs -mkdir -p 自定义目录

(2)创建外部表,分区表

create EXTERNAL table 表名(
字段名 类型,,,
)
PARTITIONED BY (分区名 类型,...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
--数据表文件以什么格式保存
STORED AS TEXTFILE
--保存在自定义路径
LOCATION '自定义路径'

(3)查看表详情

desc formatted 表名;

(4)加载数据
(4.1)创建数据目录

dfs -mkdir -p 数据目录

(4.2)上传数据

dfs -put 源数据 目标目录

(5)修复分区

  ALTER TABLE 表名 ADD IF NOT EXISTS PARTITION (分区名=“新的分区”)

hive数据仓库与MYSQL数据的区别

hive:

       属于大数据生态系统中一个技术框架、用于分析数据

     数据仓库ETL工具(ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过萃取(extract)、转置              (transform)、加载(load)至目的端的过程)

       建立在Hadoop之上,为用户提供SQL语句分析海量数据,离线数据分析

       底层MapReduce

       类似于MYSQL数据库中database和table来组织数据

       hive将元数据存储在MYSQL中。

mysql:

       属于RDBMS中关系型数据库的一种

       数据存储和数据检索

       表的数据量不大

区别:

       MYSQL是检索数据,hive管理数据,偏向于分析数据

HiveServer2

介绍

将hive作为一个服务启动(类比于MYSQL服务)

bin/hive 默认会自动一个服务,为Hive 客户端提供服务

启动hiveServer2服务

前端启动:

bin/hiveserver2

ctrl +C 或者窗口关闭就没了,

后台启动:将服务作为守护进程(deamon)启动

 hdfs的进程全都是后台启动

nohup bin/hiveserver2 > hiveServer2.log &

Beeline 客户端

连接方式一:

bin/beeline
!connect jdbc:hive2://主机名:10000 用户名 密码

连接方式方式二:

bin/beeline -u jdbc:hive2://主机名:10000 -n 用户名 -p 密码

通过JDBC客户端去连接

hive切换到apache版本,CDH版本,自己管理jar包

什么情况下,HiveSQL不执行MapReduce而是直接返回结果

设置属性:

set hive.fetch.task.conversion = more

哪些sql语句:

       某些选择查询可以转换为单个FETCH任务,最大限度地减少延迟。
       目前,查询应该是单一来源的,没有任何子查询,不应该有
       任何聚合或区别(引起RS),横向视图和连接。
       0. none:禁用hive.fetch.task.conversion
       1. minimal:分区列上的SELECT STAR,FILTER,仅限LIMIT
       2.更多:SELECT,FILTER,LIMIT only(支持TABLESAMPLE和虚拟列)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名一小卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值