sqoop导oracle数据到hive中并动态分区
静态分区:
在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中并动态分区的更多相关文章
- sqoop 从oracle导数据到hive中,date型数据时分秒截断问题
oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案 1.问题描述: 用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了 ...
- sqoop将oracle数据导入hdfs集群
使用sqoop将oracle数据导入hdfs集群 集群环境: hadoop1.0.0 hbase0.92.1 zookeeper3.4.3 hive0.8.1 sqoop-1.4.1-incubati ...
- hdfs数据到hive中,以及hdfs数据隐身理解
hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...
- 使用sqoop把mysql数据导入hive
使用sqoop把mysql数据导入hive export HADOOP_COMMON_HOME=/hadoop export HADOOP_MAPRED_HOME=/hadoop cp /hive ...
- sqoop1.4.4从oracle导数据到hive中
sqoop从oracle定时增量导入数据到hive 感谢: http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.htmlhttp://f.dataguru. ...
- 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- 使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案
在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb ...
- python脚本 用sqoop把mysql数据导入hive
转:https://blog.csdn.net/wulantian/article/details/53064123 用python把mysql数据库的数据导入到hive中,该过程主要是通过pytho ...
- sqoop 导入增量数据到hive
版本 hive:apache-hive-2.1.0 sqoop:sqoop-1.4.6 hadoop:hadoop-2.7.3 导入方式 1.append方式 2.lastmodified方式,必须要 ...
随机推荐
- JavaScript 数组、字符串、Map、Set 方法整理
在线阅读 https://www.kancloud.cn/chenmk/web-knowledges/1080519 数组 isArray():Array.isArray(value) 用于检测变量是 ...
- C#连接sqlserver分页查询的两个简单的方法
/// <summary> /// 分页查询函数 /// </summary> /// <param name="co ...
- (六)c#Winform自定义控件-单选框
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- ATX agent+UIautomation2 自动化测试介绍
纯搬运贴,内容几乎来源于作者的几篇介绍文章,这里做了整合 目前ATX+UIautomator2 处于自动化界的浪口风尖,现在有幸终于有时间对ATX进行了粗浅的了解 为什么要用ATX ATX+UIaut ...
- Unity进阶之ET网络游戏开发框架 05-搭建自己的第一个Scene
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Python变量类型说明
Python中的变量不需要声明,直接赋值便是声明和定义的过程 每个变量在内存中创建,都包括变量的标识.名称和数据这些信息 每个变量在使用前必须赋值 counter = 100 #正数变量 miles ...
- LoRaWAN_stack移植笔记(七)_数据包的接收发送
以下的代码适用于LoRa sx1276点对点的通讯,纯粹的考虑在非发射模式下即为接收模式 配置sx1276的射频参数,并且切换到接收模式 //bandwidth [0:125 1:250 2:500] ...
- 关于Function和Object之间先后问题的相关研究
文章说明,博主是一个前端小白,本片文章是博主在学习的过程中碰到的疑惑,根据查找的资料,之后得出的个人结论,文中如果出现错误,欢迎指正. -------路漫漫其修远兮吾将上下而求索,与诸君共勉----- ...
- 变量、常量、input、if语句
Chapter2 Python基础 2.1 变量命名规则 字母.数字.下划线组成 不能数字开头 不能使用python中的关键字 变量名具有意义 推荐驼峰(ArvinGood).或者下划线方式 (arv ...
- LInux ACL权限控制
1.ACL简介 ACL是一种可以实现灵活的权限管理(文件的额外赋权机制)除了文件所有者,所属组和其他人,可以对更多的用户设置权限,这就是访问控制列表(Access Control List) 2.AC ...