Hive静态分区表&动态分区表

静态分区表:

一级分区表:

CREATE TABLE order_created_partition (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;

加载数据方式一:从本地/HDFS目录加载

load data local inpath ‘/home/spark/software/data/order_created.txt‘ overwrite into table order_created_partition PARTITION(event_month=‘2014-05‘);
select * from order_created_partition where event_month=‘2014-05‘;
+-----------------+-----------------------------+--------------+
|   ordernumber   |         event_time          | event_month  |
+-----------------+-----------------------------+--------------+
| 10703007267488  | 2014-05-01 06:01:12.334+01  | 2014-05      |
| 10101043505096  | 2014-05-01 07:28:12.342+01  | 2014-05      |
| 10103043509747  | 2014-05-01 07:50:12.33+01   | 2014-05      |
| 10103043501575  | 2014-05-01 09:27:12.33+01   | 2014-05      |
| 10104043514061  | 2014-05-01 09:03:12.324+01  | 2014-05      |
+-----------------+-----------------------------+--------------+

加载数据方式二:手工上传文件到hdfs上,然后将数据添加到分区表指定的分区:

1) 创建hdfs目录:在hdfs目录:/user/hive/warehouse/order_created_partition目录下创建event_month=2014-06

hadoop fs -mkdir /user/hive/warehouse/order_created_partition/event_month=2014-06

2)拷贝数据到新创建的目录下:

hadoop fs -put /home/spark/software/data/order_created.txt /user/hive/warehouse/order_created_partition/event_month=2014-06

select * from order_created_partition where event_month=‘2014-06‘; #发现查询结果是空的

3)添加新分区数据到元数据信息中:

msck repair table order_created_partition;

输出日志信息:

Partitions not in metastore: order_created_partition:event_month=2014-06
Repair: Added partition to metastore order_created_partition:event_month=2014-06

或者: alter table order_created_partition add partition(dt=‘2014-06‘);

select * from order_created_partition where event_month=‘2014-06‘; 
+-----------------+-----------------------------+--------------+
|   ordernumber   |         event_time          | event_month  |
+-----------------+-----------------------------+--------------+
| 10703007267488  | 2014-05-01 06:01:12.334+01  | 2014-06      |
| 10101043505096  | 2014-05-01 07:28:12.342+01  | 2014-06      |
| 10103043509747  | 2014-05-01 07:50:12.33+01   | 2014-06      |
| 10103043501575  | 2014-05-01 09:27:12.33+01   | 2014-06      |
| 10104043514061  | 2014-05-01 09:03:12.324+01  | 2014-06      |
+-----------------+-----------------------------+--------------+

加载数据方式三:select查询方式insert/overwrite

CREATE TABLE order_created_4_partition (
    orderNumber STRING
  , event_time  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;
load data local inpath ‘/home/spark/software/data/order_created.txt‘ overwrite into table order_created_4_partition;

insert into table order_created_partition partition(event_month=‘2014-07‘) select * from order_created_4_partition;
insert overwrite table order_created_partition partition(event_month=‘2014-07‘) select * from order_created_4_partition;

对比:

insert overwrite table order_created_partition partition(event_month=‘2014-07‘) select ordernumber,event_time from order_created_4_partition;
insert overwrite table order_created_partition partition(event_month=‘2014-07‘) select event_time,ordernumber from order_created_4_partition;

发现字段值错位,在使用时一定要注意:字段值顺序要与表中字段顺序一致,名称可以不一致;

查看分区表已有的所有分区:

show partitions order_created_partition;

查看分区表已有的指定分区:

SHOW PARTITIONS order_created_partition PARTITION(event_month=‘2014-06‘);

查看表字段信息:

desc order_created_partition;
desc extended order_created_partition;
desc formatted order_created_partition;
desc formatted order_created_partition partition(event_month=‘2014-05‘);

二级分区表:

CREATE TABLE order_created_partition2 (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string, step string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;
show partitions order_created_partition2;

显示结果空

load data local inpath ‘/home/spark/software/data/order_created.txt‘ into table order_created_partition2 partition(event_month=‘2014-09‘,step=‘1‘);
show partitions order_created_partition2;
+-----------------------------+
|           result            |
+-----------------------------+
| event_month=2014-09/step=1  |
+-----------------------------+
insert overwrite table order_created_partition2 partition(event_month=‘2014-09‘,step=‘2‘) select * from order_created_4_partition;
show partitions order_created_partition2;
+-----------------------------+
|           result            |
+-----------------------------+
| event_month=2014-09/step=1  |
| event_month=2014-09/step=2  |
+-----------------------------+

动态分区表

CREATE TABLE order_created_dynamic_partition (
    orderNumber STRING
  , event_time  STRING
)
PARTITIONED BY (event_month string)
;
insert into table order_created_dynamic_partition PARTITION (event_month)
select orderNumber, event_time, substr(event_time, 1, 7) as event_month from order_created;

报错:

FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column.
To turn this off set hive.exec.dynamic.partition.mode=nonstrict

解决方案:

set hive.exec.dynamic.partition.mode=nonstrict;

重新执行:

insert into table order_created_dynamic_partition PARTITION (event_month)
select orderNumber, event_time, substr(event_time, 1, 7) as event_month from order_created;
select * from order_created_dynamic_partition;
+-----------------+-----------------------------+--------------+
|   ordernumber   |         event_time          | event_month  |
+-----------------+-----------------------------+--------------+
| 10703007267488  | 2014-05-01 06:01:12.334+01  | 2014-05      |
| 10101043505096  | 2014-05-01 07:28:12.342+01  | 2014-05      |
| 10103043509747  | 2014-05-01 07:50:12.33+01   | 2014-05      |
| 10103043501575  | 2014-05-01 09:27:12.33+01   | 2014-05      |
| 10104043514061  | 2014-05-01 09:03:12.324+01  | 2014-05      |
+-----------------+-----------------------------+--------------+
时间: 2024-10-07 02:03:39

Hive静态分区表&动态分区表的相关文章

hive按当天日期建立分区表 | 动态往日期分区插入数据

hive建立分区表,以当天日期("2014-08-15")作为分区依据,hql如下: CREATE EXTERNAL TABLE IF NOT EXISTS product_sell( category_id BIGINT, province_id BIGINT, product_id BIGINT, price DOUBLE, sell_num BIGINT ) PARTITIONED BY (ds string) ROW FORMAT DELIMITED FIELDS TERMIN

hadoop笔记之Hive的数据存储(分区表)

Hive的数据存储(分区表) Hive的数据存储(分区表) 分区表 Partition对应于数据库的Partition列的密集索引 在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中 那么如果我们要查询男性的身高,那么只需要扫描gender='M'的分区就好了 ○如何建立一张基于性别的分区表 create table partition_table(sid int,sname string)partitioned by (gende

Shell脚本执行hive语句 | hive以日期建立分区表 | linux schedule程序

#!/bin/bash source /etc/profile; ################################################## # Author: ouyangyewei # # # # Content: Combineorder Algorithm # ################################################## # change workspace to here cd / cd /home/deploy/rec

使用nginx+tomcat实现静态和动态页面的分离

博主最近在优化一个javaweb项目,该项目之前一直都是使用tomcat处理用户请求的,无论静态还是动态的东西,一律交给tomcat处理.tomcat主要是负责处理servlet的,静态的文件还是交给nginx处理,nginx对静态文件的处理比tomcat不是只快了一点,并且Nginx的使用对项目并发能力有很大的提升.下面主要记录下主要的配置过程: 实验环境:windows 实验工具:Nginx.tomcat windows下安装Nginx非常简单,去官网下载压缩包解压后并且双击解压目录下的ng

Oracle 12.2新特性----在线把非分区表转为分区表

在Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:1.建好分区表然后insert into select 把数据插入到分区表中:2.使用在线重定义(DBMS_REDEFINITION)的方法.它们的币是:第一种方法,如果对表有频繁的DML操作,尤其是update操作,就需要停业务来做转换.第二种方法可以在线进行操作,不需要停业务,但操作步骤比较复杂,且可能出错. Oracle12cR2版本中提供了一种新特性,一条语句就可以把非分区表转换为分区表,语法如下: ALT

Delphi编写DLL(以及静态和动态方式调用)

Delphi编写DLL(以及静态和动态方式调用) 作者/cadenza7 什么是DLL? DLL是Dynamic Link Library(动态链接库)的缩写形式.DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源,多个应用程序可同时访问内存中单个DLL 副本的内容

关于静态与动态编译arm平台程序的比较

由于最近弄个console程序,调用了readline,ncurses库,这两个动态库加起来有四百多k,而程序其实很小,其他地方也没使用到这两个库 所以想静态编译看看console程序有多大. #arm-linux-gcc cli.c -o console libreadline.a  libncurses.a #ls -l total 1932 -rwxrwxr-x 1 root root   8427 Jul  7 15:19 cli -rw-r--r-- 1 root root   664

玩转SQL Server复制回路の变更数据类型、未分区表转为分区表

玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 菠萝 曾经写过文章.在数据库大会上也做过演讲,但是我相信真正按照菠萝兄的文章自己去做一次实验的人应该不多 京东的复制专家 菠萝 的文章地址:Replication的犄角旮旯(一)--变更订阅端表名的应用场景 为什麽要玩转复制,大家想象一下:变更数据类型.未分区表转为分区表 这些业务场景经常都会发生,

静态和动态断言调试

写程序的时候经常需要调试,下面给出静态和动态断言调试以及常用的内置宏. 内置宏: __FILE__//输出文件名 __LINE__//所在行 __DATE__//日期 __TIME__//时间 __FUNCTION__//函数名 static_assert( constant-expression, string-literal ); 静态断言是在编译时候用的,因此第一参数的值必须在编译的时候就能确定,比如长量.如果第二参数为提示信息.如果第一个参数的表达式值为假则在编译的时候会出错,并给出 第