hive基础,创建表如何指定分区、如何设置永久严格模式

一、概念

Hive是基于Hadoop的开源数据仓库工具,用于处理海量结构化数据;
Hive把HDFS中结构化的数据映射成表;
Hive通过把HiveSQL进行解析和转换,最终生成一系列基于Hadoop的MapReduce任务,通过执行这些任务完成数据处理。
理解:若没有hive则需要直接使用MapReduce直接处理数据,耗时耗力

分区相当于创建不同文件夹

二、数据准备

1.在hadoop的家目录下新建一个目录datas:
mkdir datas
2.通过xftp将数据源文件传到datas中
3.“hadoop fs -mkdir /datas”
4.“hadoop fs -chmod g+w /datas”
5.“hadoop fs -put /home/hadoop/datas/* /datas”
#将hadoop下的数据源传到HDFS中

三、创建数据库,创建表,加载数据到表

–1.创建caicai数据库

create database if not exists caicai;

创建完成后,验证该数据库在HDFS中是否存在,在hadoop下执行
hadoop fs -ls /user/hive/warehouse/;
(创建数据库是若未指定位置,默认在warehouse中,安装hive时自己创建的)
可以看到存在caicai.db数据库

扩展:可以在hive中查询HDFS的目录及本地Linux系统的目录

hive>dfs -ls /;     #查询HDFS目录
hive>!ls /;           #查询本地Linux目录

–2.使用caicai库

use caicai;

–3.创建user_info表
create external table if not exists user_info (
user_id string,
user_name string,
sex string,
age int,
city string,
firstactivetime string,
level int,
extra1 string,
extra2 map<string,string>)
row format delimited fields terminated by ‘\t’
collection items terminated by ‘,’
map keys terminated by ‘:’
lines terminated by ‘\n’
stored as textfile;

加载数据源
load data inpath ‘/datas/user_info/user_info.txt’ overwrite into table user_info;

–4.创建user_trade表
create external table if not exists user_trade (
user_name string,
piece int,
price double,
pay_amount double,
goods_category string,
pay_time bigint)
partitioned by (dt string)
row format delimited fields terminated by ‘\t’;

执行如下命令以设置动态分区:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=10000;
set hive.exec.max.dynamic.partitions.pernode=10000;

将数据源文件上传到HDFS上
“hdfs dfs -put /home/hadoop/datas/user_trade/* /user/hive/warehouse/caicai.db/user_trade”

十分重要,不修复查询不出来数据
修复分区表:

msck repair table user_trade;**

此时,未设置严格模式前,不指定分区是可以整表查询的:
查询:

select * from user_trade limit 3;

在这里插入图片描述

设置严格模式:

set hive.mapred.mode=strict;

设置严格模式后,不加分区查询会报错:

`select * from user_trade limit 6;`

在这里插入图片描述
需要指定分区并查询

select * from user_trade where dt='2017-01-12';

在这里插入图片描述
取消严格模式:

set hive.mapred.mode=nonstrict;

查看分区:
show partitions user_trade

四、默认无严格模式,设置永久开启方法

家目录下写文件
/home/hadoop/
vim .hiverc

#在命令行中显示当前数据库名
set hive.cli.print.current.db=true; 
#查询出来的结果显示列的名称
set hive.cli.print.header=true;
#设置hive执行的严格模式
set hive.mapred.mode=strict;

严格模式:(限制3种查询)
1.分区表在查询时必须写分区条件
2.笛卡尔积不能查询 (进行表关联的时候不写关联条件)
3.使用order by进行排序的时候,必须加limit语句。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive可以通过创建分区表来实现对数据进行分区管理。在创建分区表时,可以使用静态分区或动态分区的方式。 静态分区是指在创建表的时候就明确指定分区的目录,每个分区需要使用一条插入语句来加载数据。这种方式适用于已经知道分区的情况。 动态分区是指根据查询结果动态地将数据分配到相应的分区中,而不需要指定分区目录。使用动态分区可以一次性插入多个分区的数据。Hive会根据实际的数据选择插入到哪一个分区。启用动态分区功能需要设置相应的参数,如`set hive.exec.dynamic.partition=true;`和`set hive.exec.dynamic.partition.mode=nostrick;`。这样就可以允许全部分区都是动态分区了。 需要注意的是,使用以上两种方法为内部分区表加载数据时,不需要预先创建分区。加载数据时会自动创建相应的分区。如果想要预先创建分区,可以使用`hadoop fs –mkdir`命令在表目录下先创建相应的分区目录,然后再使用`alter table add partition`语句增加分区。 综上所述,Hive可以通过静态分区或动态分区的方式来创建分区表,并根据需求选择合适的方法来管理分区数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [hive 分区表创建](https://blog.csdn.net/qq_45602114/article/details/119790780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值