静态分区:

在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 AS SEQUENCEFILE;

注意,分区字段不能与表中的字段重复,不然会执行出错

执行hql脚本:

$ hive -f test.hql

手动添加分区:

hive> ALTER TABLE page_view add PARTITION (dt=2018)

创建好分区后,hive会在HDFS存储中创建相应的路径:

$ hadoop fs -ls /user/hive/warehouse/page_view
drwxr-xr-x - admin supergroup 0 2011-07-29 09:53 /user/hive/warehouse/page_view/dt=2018

或者使用

hive> dfs -ls /user/hive/warehouse/page_view

使用sqoop脚本导入数据:

sqoop_test.sh

#!/bin/sh

sqoop import 	                                        \
--connect jdbc:oracle:thin:@127.0.0.1:1521:orcl \
--username test \
--password 123456 \
--columns "viewTime,userid,page_url,referrer_url,ip" \
--hive-partition-key "dt" \
--hive-partition-value "2018" \
--query "SELECT viewTime,userid,page_url,referrer_url,ip from page_view WHERE 1=1 and \$CONDITIONS" \
--hive-table test.page_view \
--hive-drop-import-delims \
--target-dir "/data/test/page_view" \
--hive-overwrite \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-import;

在使用sqoop导入数据的时候可以指定分区,但是--hive-partition-key--hive-partition-value选项只能指定一个参数,可以使用--hcatalog-partition-keys--hcatalog-partition-values选项指定多个分区字段,用逗号分隔。

动态分区:

​ 手动分区灵活性太低,当分区数较多的时候一个个分区单独去加载数据的话工作量太大,这时候可以考虑动态分区。动态分区是基于hive中的源数据表将数据插入到分区表中,在数据插入的时候会根据分区字段自动将数据归类存入对应的分区路径,而不需要手动指定分区路径。要使用动态分区必须要先开启动态分区:

hive> SET hive.exec.dynamic.partition=true;
hive> SET hive.exec.dynamic.partition.mode=nonstrict;
hive> SET hive.exec.max.dynamic.partitions.pernode=1000;

然后创建一张没有分区字段的源数据表(与分区字段对应的字段放后面,与分区表的保持一致):

USE TEST;
CREATE TABLE original_page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
dt STRING COMMENT 'view date')
COMMENT 'This is the page view table'
STORED AS SEQUENCEFILE;

并使用sqoop脚本从oracle导入数据到表original_page_view

original_sqoop_test.sh

#!/bin/sh

sqoop import 	                                        \
--connect jdbc:oracle:thin:@127.0.0.1:1521:orcl \
--username test \
--password 123456 \
--columns "viewTime,userid,page_url,referrer_url,ip,dt" \
--query "SELECT viewTime,userid,page_url,referrer_url,ip,dt from page_view WHERE 1=1 and \$CONDITIONS" \
--hive-table test.original_page_view \
--hive-drop-import-delims \
--target-dir "/data/test/page_view" \
--hive-overwrite \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-import;

数据导入完毕后,执行如下语句即可将original_page_view中的数据导入到page_view并自动分区:

hive> insert overwrite table page_view partition(dt) select * from original_page_view;

查看分区情况:

hive> dfs -ls /user/hive/warehouse/page_view

相关参数说明:

名称 默认值 描述
hive.exec.dynamic.partition false 是否开启动态分区功能,默认false关闭,使用动态分区时候,该参数必须设置成true
hive.exec.dynamic.partition.mode strict 动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区, 一般需要设置为nonstrict
hive.exec.max.dynamic.partitions.pernode 100 在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。
hive.exec.max.dynamic.partitions 1000 在所有执行MR的节点上,最大一共可以创建多少个动态分区。
hive.exec.max.created.files 10w 整个MR Job中,最大可以创建多少个HDFS文件
hive.error.on.empty.partition false 当有空分区生成时,是否抛出异常

参考链接:

https://community.hortonworks.com/questions/43982/sqoop-insert-into-partitioned-table.html

https://blog.csdn.net/jiedushi/article/details/7356015

https://www.cnblogs.com/charlist/p/7122113.html

http://www.cnblogs.com/cssdongl/p/6831884.html

sqoop导oracle数据到hive中并动态分区的更多相关文章

  1. sqoop 从oracle导数据到hive中,date型数据时分秒截断问题

    oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案 1.问题描述: 用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了 ...

  2. sqoop将oracle数据导入hdfs集群

    使用sqoop将oracle数据导入hdfs集群 集群环境: hadoop1.0.0 hbase0.92.1 zookeeper3.4.3 hive0.8.1 sqoop-1.4.1-incubati ...

  3. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  4. 使用sqoop把mysql数据导入hive

    使用sqoop把mysql数据导入hive export HADOOP_COMMON_HOME=/hadoop export HADOOP_MAPRED_HOME=/hadoop   cp /hive ...

  5. sqoop1.4.4从oracle导数据到hive中

    sqoop从oracle定时增量导入数据到hive 感谢: http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.htmlhttp://f.dataguru. ...

  6. 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

            Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  7. 使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

    在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb ...

  8. python脚本 用sqoop把mysql数据导入hive

    转:https://blog.csdn.net/wulantian/article/details/53064123 用python把mysql数据库的数据导入到hive中,该过程主要是通过pytho ...

  9. sqoop 导入增量数据到hive

    版本 hive:apache-hive-2.1.0 sqoop:sqoop-1.4.6 hadoop:hadoop-2.7.3 导入方式 1.append方式 2.lastmodified方式,必须要 ...

随机推荐

  1. windows server2012 nVME和网卡等驱动和不识别RAID10问题

    安装2012---不识别M.2 nVME,下官方驱动,注入到系统里 缺多驱动---用ITSK万能驱动添加:|Win8012R2.x64(可解决不支持操作系统,win10与server2012R2通用) ...

  2. 从输入URL到浏览器显示页面发生了哪些事情---个人理解

    经典面试题:从输入URL到页面显示发生了哪些事情 以前一直都记不住,这次自己理解了一下 用自己的话总结了一次,不对的地方希望大佬给我指出来 1.主机通过DHCP协议获取客户端的IP地址.子网掩码和DN ...

  3. 直击根源:微信小程序中web-view再次刷新后页面需要退两次

    背景 在上一章(直击根源:vue项目微信小程序页面跳转web-view不刷新)解决了vue在小程序回退不刷新的问题之后,会引出了一个刷新的页面需要点击返回两次才能返回上一个页面 问题描述 在A页面从B ...

  4. 讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  5. windbg 使用与技巧

    基本知识和常用命令 (1)       Windbg下载地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 安装完后执行w ...

  6. redis 有没有ACID事务

    看redis官网的介绍: redis确实是有事务的,但是和传统的ACID是否相同呢? 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致 ...

  7. Day 07--最终修改(三)

    2.明天着重学一下逻辑层的语法,以及界面层的数据绑定,与队友交流进度 3.今天修改也终于完成,除了搞c++以外的全部身心都放在这个东西身上也觉得它有点难搞,说明计算机不是吃素的.甚至在使用xml语法的 ...

  8. Springboot源码分析之@Transactional

    摘要: 对SpringBoot有多了解,其实就是看你对Spring Framework有多熟悉~ 比如SpringBoot大量的模块装配的设计模式,其实它属于Spring Framework提供的能力 ...

  9. HOWTO: Amira/Avizo中如何设置数据尺度单位

    很多朋友是数据量化完成后,问统计表中的数据尺度单位,这种情况恐怕需要从头再处理一次,所以对于Amira/Avizo的新用户来说,在准备进行量化分析之前就应该设置好尺度单位,设置步骤如下: 1.  在A ...

  10. python 实现多个线程间消息队列传递,一个简单的列子

    #-*-coding:utf8-*-"""Producer and consumer models: 1. There are many producers and co ...