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
最新文章
- Ajaxupload.js上传插件使用
- Linux之保留yum安装软件后的RPM包
- paypal之nodejs 框架 Kraken-js 源码分析
- libevent 定时器timer
- 理解Android系统的进程间通信原理(一)----RPC中的代理模式
- 拼音操作工具类 - PinyinUtil.java
- ios 判断,qq,银行卡,手机号,邮编,生日,数字,字符串,护照, email
- Q promise API简单翻译
- 并行设计模式(一)-- Future模式
- C++11 带来的新特性 (1)
- C++—程序的内存分区
- SpringBoot读取application.properties文件内容
- java入门--4111:判断游戏胜者-Who Is the Winner
- Windows下LuaJIT的编译和使用
- Ionic实战三:Ionic 图片预览可放大缩小左右滑动demo-iClub图片预览
- C++开发安卓、windows下搭建Android NDK开发环境
- sharepoint 搜索报错
- log4cpp安装
- JVM(四) G1 收集器工作原理介绍
- 解决windows下文件拷贝到ubuntu下文件名乱码的问题
热门文章
- 洛谷 P2157 [SDOI2009]学校食堂
- Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)
- 前端数据双向绑定原理:Object.defineProperty()
- 2019牛客暑期多校训练营(第十场)F-Popping Balloons
- Django-内置用户系统
- notepad 写html乱码,已解决
- 循环 与 分支语句 和 字符函数库cctype 文件简单处理
- error LNK2001: unresolved external symbol ";__declspec(dllimport)
- native-echarts 问题总结
- .net测试篇之测试神器Autofixture在几个复杂场景下的使用示例以及与Moq结合