hive分区用2个字段有何限制_[特性]Hive动态分区功能使用

[特性]Hive动态分区功能使用

2016-01-31 21:40

说明

Hive有两种分区,一种是静态分区,也就是普通的分区。另一种是动态分区。动态分区在数据导入时,会根据具体的字段值自行决定导入,并创建相应的分区。使用上更为方面。

举例

准备工作

创建一个表,并导入相关数据,作为源数据。

1

2

3CREATE TABLE student_data(id STRING, name STRING, year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

该表有如下数据:

SELECT * FROM student_data;

+------------------+--------------------+--------------------+---------------------+--+

| student_data.id | student_data.name | student_data.year | student_data.major |

+------------------+--------------------+--------------------+---------------------+--+

| 2001810081 | cheyo | 2001 | 810 |

| 2001810082 | pku | 2001 | 810 |

| 2001810083 | rocky | 2001 | 810 |

| 2001810084 | stephen | 2001 | 810 |

| 2001810086 | rongqi | 2001 | 810 |

| 2001810087 | hauaa | 2001 | 810 |

| 2001810088 | file | 2001 | 810 |

| 2001810089 | note | 2001 | 810 |

| 2001820081 | hello | 2001 | 820 |

| 2001820082 | jaccy | 2001 | 820 |

| 2001820083 | micky | 2001 | 820 |

| 2001820084 | lucy | 2001 | 820 |

| 2002810081 | cindy | 2002 | 810 |

| 2002810082 | lemon | 2002 | 810 |

| 2002820081 | jacky | 2002 | 820 |

| 2002820082 | cindy | 2002 | 820 |

| 2002820083 | happy | 2002 | 820 |

| 2002820084 | snow | 2002 | 820 |

+------------------+--------------------+--------------------+---------------------+--+

使用静态分区

创建一个表,准备用静态分区方式将数据导入此表。

1

2

3

4CREATE TABLE student_static_partition(id STRING, name STRING)

PARTITIONED BY (year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

使用静态分区方式,将源表中的所有数据导入此表:

1

2

3

4

5

6

7

8

9

10

11INSERT INTO TABLE student_static_partition PARTITION(year=2001,major=810)

SELECT id,name FROM student_data WHERE year=2001 AND major=810;

INSERT INTO TABLE student_static_partition PARTITION(year=2001,major=820)

SELECT id,name FROM student_data WHERE year=2001 AND major=820;

INSERT INTO TABLE student_static_partition PARTITION(year=2002,major=810)

SELECT id,name FROM student_data WHERE year=2002 AND major=810;

INSERT INTO TABLE student_static_partition PARTITION(year=2002,major=820)

SELECT id,name FROM student_data WHERE year=2002 AND major=820;

导完后,查询该表的分区信息:

1

2

3

4

5

6

7

8

9SHOW PARTITIONS student_static_partition;

+----------------------+--+

| partition |

+----------------------+--+

| year=2001/major=810 |

| year=2001/major=820 |

| year=2002/major=810 |

| year=2002/major=820 |

+----------------------+--+

使用动态分区

然后再创建一个相同表结构的表,准备以动态分区的方式导入数据。

1

2

3

4CREATE TABLE student_dynamic_partition(id STRING, name STRING)

PARTITIONED BY (year INT, major INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',';

使用动态分区前,需要先配置相同的Hive参数,其中最重要的两个参数是:

1

2set hive.exec.dynamic.partition=true;

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

更多参数请参考下文中的参考文档。

然后以动态分区方式导入数据:

1

2

3INSERT OVERWRITE TABLE student_dynamic_partition PARTITION (year, major)

SELECT id,name,year,major

FROM student_data;

注意:在SELECT子句的各个字段应刚好与INSERT中的字段以及最后的PARTITION中的字段完全一致,包括顺序。

这里,我们无需指定数据导入到哪一个分区。该语句会自动创建相应分区,并将数据导入相应的分区。

导入完成后,查看该表的分区信息:

1

2

3

4

5

6

7

8

9SHOW PARTITIONS student_dynamic_partition

+----------------------+--+

| partition |

+----------------------+--+

| year=2001/major=810 |

| year=2001/major=820 |

| year=2002/major=810 |

| year=2002/major=820 |

+----------------------+--+

两种方式对比

通过上述实例,我们可以看到:通过动态分区方式,我们无法手工指定数据导入的具体分区,而是由SELECT中的相关字段的值自行决定导入到哪一个分区中,并自动创建相应的分区。使用上更加方便。

参考文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统中输出输入的管理

1.什么是输入和输出 输入和输出是计算机系统中的主机与外部进行通信的系统。它由外围设备和输入输出控制系统两部分组成,我们在shell中键入指令,然后送入CPU中运算产生结果,再将结果送到字符设备中显示。简单点来说输入输出就是通过我们的键盘…

find 命令示例_数组find()方法以及JavaScript中的示例

find 命令示例JavaScript find()方法 (JavaScript find() method) find() method is used to get the first element from an array which passes the given test (condition). find()方法用于从通过给定测试(条件)的数组中获取第一个元素。 Syntax: 句法: array.…

统计Apache或Nginx访问日志里的独立IP访问数量的Shell

1、把IP数量直接输出显示: cat access_log_2011_06_26.log |awk ‘{print $1}’|uniq -c|wc -l 2、把IP数量输出到文本显示: cat access_log_2011_06_26.log |awk ‘{print $1}’|uniq -c|wc -l > ip.txt 总结:如果单个访问日志大小超过2G…

ggplot2箱式图两两比较_R绘图 第四篇:绘制箱图(ggplot2)

箱线图通过绘制观测数据的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了变量值的分布情况。箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数据中的异常值。箱线图提供了…

Linux系统中用户的管理

#####用户管理###### 1在Linux中,有三种用户: 1 root : 也成为超级用户,对系统有控制权限,超级用户可以不受限制的运行任何命令,root 用户可以看作是系统的管理员。 2 系统用户: 系统用户通常为系统功能所必…

c# 命名空间命名规范_C#命名空间能力问题和解答 套装3

c# 命名空间命名规范1) There are following namespaces are given below, which is correct about "using" statement in C#.NET? In C#.Net, "using" statement is used to import the namespace in our programWe can create a new namespace with the…

shell 查出文件并复制到另一个文件夹

找出所有大于100M的文件并展示出来find / -size 100M -exec ls -lh {} \;找出特定文件内大于200字节的文件并备份到另一个文件夹里去find /opt/test -type f -size 200c -exec cp {} /opt/test/cp/ \;转载于:https://blog.51cto.com/406647516/1875417

correl函数相关系数大小意义_用Correl函数返回相关系数,以确定属性关系

我们辛辛苦苦制作了表格,当然是要作出分析的,肯定不能就是这么几个数据吧。常用的分析法都是图表,虽然看起来直观,但是对于非作者来说,理解意思显然不是那么方便。下面,教大家使用函数,来算出相…

Java之类的构造器(反射)

反射: Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情…

java 系统自动检测_如何在Java中检测OS(操作系统)名称?

java 系统自动检测To detect the OS (operating system) name in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the OS (operating system name). 要检测Java中的OS(操作…

shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功

SQL Server 系列文章快速导航(SWF版)一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...duilib帮助1.窗口基类:见介绍 顺便贴下出来…

Linux中对进程的管理

1.what is 进程 程序(program)放置在储存媒体中(如硬盘、光盘、软盘、磁盘等),为实体的型态存在。 进程:程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中&#xff…

带C#示例的String.Equality(==)运算符

C#String.Equality运算符 (C# String.Equality operator ) "" is a String.Equality operator in C#, it is used to check whether two strings objects have the same values or not. “ ”是C#中的String.Equality运算符 ,用于检…

jQuery 倒计时

function getSec(){//获取名称为remindataSec的ulobj document.getElementsByName("remindataSec");for(i0;i<obj.length;i){//循环得到每个毫秒数var intDiff $("#remindataTime"i"").text();var id "reminTime"i;//得到毫秒数…

Linux远程连接与sshd服务安全设定

1.远程连接&#xff1a; 首先设置ip&#xff1a; 设置好之后&#xff0c;先ping一下IP 看能不能通 ssh root172.25.13.103 ##表示的是&#xff1a;连接ip为172.25.13.103的root用户 2.系统控制命令 系统控制命令的查看相关参数如下表 systemctl服务控制命令systemctl stat…

rabbitmq 同步策略_RabbitMQ高可用方案总结

RabbitMQ的集群方案有以下几种&#xff1a;1.普通的集群exchange&#xff0c;buindling再所有的节点上都会保存一份&#xff0c;但是queue只会存储在其中的一个节点上&#xff0c;但是所有的节点都会存储一份queue的meta信息。因为这样有两个好处&#xff1a;1)存储空间。如果每…

一个简单的封ip规则

2019独角兽企业重金招聘Python工程师标准>>> 一个简单通过nginx日志封ip规则&#xff08;仅仅自己方便使用&#xff09; #!/bin/bash #Version:1.0 #Date:2016-08-09 #作用:防刷IP地址,解封蜘蛛,解封5天前封的IP地址function deny () { Date$(date "%F-%H-%M&q…

c程序预处理器的设计与实现_C预处理器-能力问题与解答

c程序预处理器的设计与实现C programming Pre-processor Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on Pre-processor topics like #define, #undef, #if, #endif etc. C编程预处理程序能力问题和解答&#xff1a;在本…

系统日志管理

1 查看系统中的日志 rsyslog 此服务是用来采集系统日志的&#xff0c;他不产生日志&#xff0c;只是起到采集作用 2 rsyslog 的管理 /var/log/messages服务信息日志/var/log/secuer系统登陆日志/var/log/cron定时任务日志/var/log/maillog邮件日志/var/log/boot.log系统启动日…

pythonassertbug_还在 Bug 不断?不妨试试这 2 个装X技巧

原标题&#xff1a;还在 Bug 不断&#xff1f;不妨试试这 2 个装X技巧作者 | luanhz来源 | 小数志(ID&#xff1a;Datazhi)程序员每天遇到 bug 就像喝水吃饭一样稀松平常&#xff0c;关键在于怎么高效而不失优雅的面对这些 bug&#xff01;所以&#xff0c;你还在固执的使用 tr…