Hive的动态分区】的更多相关文章

关系型数据库(如Oracle)中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用Hive的动态分区,需要进行相应的配置. 先看一个应用场景,源表t_lxw1234的数据如下: [sql] view plain copy SELECT day,url FROM t_lxw1234; 2015-05-10 url1 2015-05-10 url2 2015-06-14 …
hive的数据是放到hdfs中,当我们的分区字段类型为string时,如果使用动态分区向表中插入数据,而动态分区的那个字段恰好为null或者空字符串,这样hive会为其选一个默认的分区,我们查数据时分区字段的值也是这个默认分区的名,默认名为 __HIVE_DEFAULT_PARTITION__,这个默认分区的名称在配置hive时是可配置的. 如果分区字段的类型为int,这里就有四点疑问: 1. 分区字段的值为null或者空字符串时,hive的数据是什么样,hdfs的目录结构什么样? 2. 分区字…
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 一.Hive 参数 1.Hive 参数类型hive当中的参数.变量,都是以命名空间开头: 通过${}方式进行引用,其中system.env下的变量必须以前缀开头: 在Hive CLI查看参数 #显示所有参数 hive>set; #查看单个参数 hive> set hive.cli.print.h…
当insert数据到有分区的hive表里时若不明显指定分区会抛出异常 insert overwrite table persons_tmp select * from persons; FAILED: SemanticException : Need to specify partition columns because the destination table is partitioned. Error encountered near token 'persons_tmp' 当指定分区后…
Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 ​ hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在使用的时候会导致数据只能插入到某一个指定分区,无法让数据散列分布,因此更好的方式是当数据在进行插入的时候,根据数据的某一个字段或某几个字段值动态的将数据插入到不同的目录中,此时,引入动态分区. 2.hive的动态分区配置 --hive设置hive动态分区开启 set hive.exec.dynami…
目录 背景 第一部分 静态分区 第二部分 动态分区 第三部分 两者的比较 第四部分 动态分区使用的问题 参考文献及资料 背景 在Hive中有两种类型的分区:静态分区(Static Partitioning)和动态分区(Dynamic Partitioning). 静态分区.对于静态分区,从字面就可以理解:表的分区数量和分区值是固定的. 动态分区.会根据数据自动的创建新的分区. 本文会详细介绍两种分区方法.使用场景以及生产中常见问题和解决方法. 第一部分 静态分区 静态分区的使用场景主要是分区的数…
1.使用oracle sql developer 4.0.3作为hive query的IDE. 下载hive-jdbc driver http://www.cloudera.com/content/cloudera/en/downloads/connectors/hive/jdbc/hive-jdbc-v2-5-6.html Start    Oracle    SQL    Developer    and    navigate    to    Preferences    |    Da…
分区是在处理大型事实表时常用的方法.分区的好处在于缩小查询扫描范围,从而提高速度.分区分为两种:静态分区static partition和动态分区dynamic partition.静态分区和动态分区的区别在于导入数据时,是手动输入分区名称,还是通过数据来判断数据分区.对于大数据批量导入来说,显然采用动态分区更为简单方便. - 对现存hive表的分区 首先,新建一张我们需要的分区以后的表create table like 'origin' 若现存hive表中没有分区信息,我们需要手动修改hive…
Hive动态分区 1.首先创建一个分区表create table t10(name string) partitioned by(dt string,value string)row format delimited fields terminatedby '\t' lines terminated by '\n'stored as textfile;2.然后对hive进行设置,使之支持动态分区,set hive.exec.dynamic.partition.mode=nonstrict;如果限…
Hive分区的概念与传统关系型数据库分区不同. 传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区. Hive的分区方式:由于Hive实际是存储在HDFS上的抽象,Hive的一个分区名对应一个目录名,子分区名就是子目录名,并不是一个实际字段. 所以可以这样理解,当我们在插入数据的时候指定分区,其实就是新建一个目录或者子目录,或者在原有的目录上添加数据文件. Hive分区的创建 Hive分区是在创建表的时候用Partitioned b…
在创建好一个分区表后,执行动态分区插入数据,抛出了错误: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.e…
1.开启支持动态分区 set hive.exec.dynamic.partition=true; --默认为false set hive.exec.dynamic.partition.mode=nostrict; 2.相关参数介绍 set hive.exec.max.dynamic.partitions.pernode; --每一个执行的mapreduce节点上,允许创建的动态分区数[默认100] set hive.exec.max.dynamic.partitions; --所有执行mapre…
各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的SQL代码,举例: 比如我创建了一张分区表emp,需要 将分区表employees中的某些区数据按分区导入到表emp中,如果我需要导入的分区有上百个,那么就需要写上百个INSERT ...SELECT ...语句.如下: FROM jimdb.employeesINSERT OVERWRITE TA…
Hive 分区介绍: hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition) hive中创建分区表没有什么复杂的分区类型(范围分区.列表分区.hash分区.混合分区等). 分区列也不是表中的一个实际的字段,而是一个或者多个伪列.意思是说在表的数据文件中实际上并不保存分区列的信息与数据. 分区改变了HIVE 对数据存储的组织方式,hive 会创建反应分区结构的子目录,就是那些实际的目录名称. 对数据…
使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这是静态分区. Hive动态分区步骤如下: 1.建立某一个源表模拟数据源并插入一些数据 create table t_test_p_source ( id string, name string, birthday string ) row format delimited fields termin…
一.静态分区 1.创建分区表 hive (default)> create table order_mulit_partition( > order_number string, > event_time string > ) > PARTITIONED BY(event_month string, step string) > row format delimited fields terminated by '\t'; 2.加载数据到分区表 load data lo…
笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来.(执行计划如下) insert overwrite table public_t_par partition(delivery_datekey) select * from public_oi_fact_partition; hive 默认的动态分区实现,不需要shuffle 那么hive如何通过map就实现了动态分区了呢,stage1根据FileInput…
hive的分区概念,相信大家都非常了解了.通过将数据放在hdfs不同的文件目录下,查表时,只扫描对应分区下的数据,避免了全表扫描. 提升了查询效率. 关于hive分区,我们还会用到多级分区.动态分区.混合分区,这些概念是什么含义,又该在何时使用呢? 静态分区 先说下静态分区.静态分区就是人为指定分区名.向分区插入数据的时候也要写明写入哪个分区. 我们给出建表,和插入数据的示例代码: 建表语句: DROP TABLE IF EXISTS ods.employee; CREATE TABLE IF…
一.基本概念 hive中分区表分为:范围分区.列表分区.hash分区.混合分区等. 分区列:分区列不是表中的一个实际的字段,而是一个或者多个伪列.翻译一下是:“在表的数据文件中实际上并不保存分区列的信息与数据”,这个概念十分重要,要记住,后面是经常用到. 1.1 创建数据表 下面的语句创建了一个简单的分区表: create table partition_test( member_id string, name string ) partitioned by ( stat_date string…
1.hive 参数.变量 1.1hive的命名空间: hive当中的参数.变量,都是以命名空间开头  …
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/6831884.html 转载请注明出处 虽然之前已经用过很多次hive的分区表,但是还是找时间快速回顾总结一下加深理解. 举个栗子,基本需求就是Hive有一张非常详细的原子数据表original_device_open,而且还在不断随着时间增长,那么我需要给它进行分区,为什么要分区?因为我想缩小查询范围,提高速度和性能. 分区其实是物理上对hdfs不同目录进行数据的load操作,0.7之后的版本都会自动…
Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置.. set hive.exec.dynamic.partition=true;(可通过这个语句查看:set hive.exec.dynamic.partition;) set hive.exec.dynamic.partition.mode=nonstrict; ;(如果自动分区数大于这个参数,将会…
一.job输入输出优化 善用muti-insert.union all,不同表的union all相当于multiple inputs,同一个表的union all,相当map一次输出多条 示例 二.数据剪裁 2.1.列剪裁 HIve在读取数据的时候,可以只查询所需要用到的列,而忽略其他列.甚至可以使用正在表达式. 见.http://www.cnblogs.com/bjlhx/p/6946202.html 2.2.分区剪裁 在查询的过程中减少不必要的分区 示例: select count(ord…
Hive的insert语句能够从查询语句中获取数据,并同时将数据Load到目标表中.现在假定有一个已有数据的表staged_employees(雇员信息全量表),所属国家cnty和所属州st是该表的两个属性,我们做个试验将该表中的数据查询出来插入到另一个表employees中. INSERT OVERWRITE TABLE employees PARTITION (country = '中国', state = '北京') SELECT * FROM staged_employees se WH…
使用hive储存数据时,需要对做分区,如果从kafka接收数据,将每天的数据保存一个分区(按天分区),保存分区时需要根据某个字段做动态分区,而不是傻傻的将数据写到某一个临时目录最后倒入到某一个分区,这是静态分区. Hive动态分区步骤如下: 1.建立某一个源表模拟数据源并插入一些数据 create table t_test_p_source ( id string, name string, birthday string ) row format delimited fields termin…
测试目的:1.分区表的动态分区与静态分区2.每层数据,数据流向,数据是否在每层都保留一份测试结果:1.动态分区/静态分区略2.每层表的数据都会保留,因此在生产上odm层的数据是可以删除的(不管是内表还是外表) 数据源:1,jack,shanghai,201901292,kevin,beijing,201901303,lucas,hangzhou,201901294,lily,hangzhou,201901301. 创建数据库create database TestFenQu; 2. 创建源数据表…
静态分区: 在hive中创建表可以使用hql脚本: test.hql USE TEST; CREATE TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User') COMMENT 'This is the page view table' PARTITIONED BY(dt STRING) STORED…
静态分区: 手动指定分区加载数据,就是常说的静态分区的使用.但是在日常工作中用的比较多的是动态分区. 创建: hive> create table order_mulit_partition( > order_number string, > event_time string > ) > PARTITIONED BY(event_month string, step string) > row format delimited fields terminated by…
在hive上建表与普通分区表创建方法一样: CREATE TABLE `dwa_m_user_association_circle`( `device_number` string, `oppo_number` string, `prov_id_oppo` string, `area_id_oppo` string, `dealer_oppo` string, `short_call_nums` bigint, `long3_call_nums` bigint, `long5_call_nums…
1. mapjoin优化适合小表join大表 set hive.optimize.skewjoin=true; //有数据倾斜时开启负载均衡,默认false set hive.auto.convert.join=true; //设置自动选择MapJoin,默认是true set hive.auto.convert.join.noconditionaltask=true; //map-side join set hive.auto.convert.; //多大的表可以自动触发放到内层LocalTa…