千家信息网

hive 分区时 分别使用 年,月,日 来进行分区

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,创建表create [external<外联>] table log_app_web (log map) partitioned by (year int,month int,day int)ROW
千家信息网最后更新 2025年02月02日hive 分区时 分别使用 年,月,日 来进行分区

创建表

create [external<外联>] table log_app_web (log map) partitioned by (year int,month int,day int)

ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY '\t'

MAP KEYS TERMINATED BY '=' STORED AS ORC;


表名:log_app_web

字段:Map类型字段 log

分区:根据年,月,日 进行分区 year ,month ,day

分割使用 '\t'

MAP中的KV使用 '='

数据文件存储为ORCFILE格式


根据日期范围查询时使用将分期时间转换成日期的string进行范围查询

concat_ws('-',cast(year as string),lpad(cast(month as string),2,'0'), lpad(cast(day as string),2,'0')) >= '"+format.format(StartDay)+"'

类似于 yyyy-MM-dd >= '2016-04-28'


以上是个比较另类的方式


下面来说下 分区 转载他人的

一、背景

1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。

2、分区表指的是在创建表时指定的partition的分区空间。

3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。

二、技术细节

1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。

2、表和列名不区分大小写。

3、分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

4、建表的语法(建分区可参见PARTITIONED BY参数):

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 row_format] [STORED AS file_format] [LOCATION hdfs_path]

5、分区建表分为2种,一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。

a、单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列。

b、双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。

表文件夹目录示意图(多分区表):


6、添加分区表语法(表已创建,在此基础上添加分区):

ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ... partition_spec: : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)

用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。例:

ALTER TABLE day_table ADD PARTITION (dt='2008-08-08', hour='08') location '/path/pv1.txt' PARTITION (dt='2008-08-08', hour='09') location '/path/pv2.txt';

7、删除分区语法:

ALTER TABLE table_name DROP partition_spec, partition_spec,...

用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。例:

ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');

8、数据加载进分区表中语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

例:

LOAD DATA INPATH '/user/pv.txt' INTO TABLE day_hour_table PARTITION(dt='2008-08- 08', hour='08'); LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hour partition(dt='2010-07- 07');

当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录,文件存放在该分区下。

9、基于分区的查询的语句:

SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

10、查看分区语句:

hive> show partitions day_hour_table; OK dt=2008-08-08/hour=08 dt=2008-08-08/hour=09 dt=2008-08-09/hour=09

三、总结

1、在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在最字集的目录中。

2、总的说来partition就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。


这种比较常见

数据 文件 文件夹 目录 分区表 查询 字段 语法 结构 语句 范围 内容 参数 形式 日期 时间 用户 存储 必要 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 红警2数据库app 松江区技术软件开发机构整顿 如何使用中外文数据库 app下载显示连接服务器失败 网络安全大会简介 计算机网络技术前景工资 以网络安全为主题获奖手抄报 云服务器主要用途 个人名片设计软件开发 数据库管理员是工程技术人员吗 专升本数据库技术知识点 家用服务器需要hdmi接口吗 服务器端口访问速度 360手机位置服务器 广州沙巴克网络技术有限公司 河南京杰网络技术有限公司 传奇4进什么服务器搬砖 战术小队经常搜索不到服务器 sql数据库实现数据复制 网络安全配备工具 郑州小牛软件开发 更改电脑网络安全策略 江苏定制软件开发服务电话 玄武区一站式软件开发质量保证 服务器性能监控业务 创造与魔法墨颜在哪个服务器 网络工程和网络安全有啥联系 网络技术应用算利润的题型 越南软件开发人员 广西2u工控服务器机箱
0