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方式,必须要 ...
随机推荐
- Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解
如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 最近一段时间生病了,整天往医院跑,也没状态学东西了,现在是好了不少了,也该继续学习啦!!! ...
- 通过Blazor使用C#开发SPA单页面应用程序(3)
今天我们来看看Blazor开发的一些基本知识. 一.Blazor组件结构 Blazor中组件的基本结构可以分为3个部分,如下所示: //Counter.razor //Directives secti ...
- ArrayList用法整理
System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变数组的长度. 一.优点 1.支持自动改变大小的功能 2.可以灵活的插入元素 3.可以灵活的 ...
- HTTP与HTTPS之面试必备
本文主要讲解Http与https的区别,以及https是怎样加密来保证安全的. 首先讲这俩个协议的简单区别: HTTP:超文本传输协议. HTTPS:安全套接字层超文本传输协议HTTP+SSL HTT ...
- wordpress修改登录密码
wordpress忘记密码更改 网上搜到的方法: 1.后台邮件重置: 2,phpmyadmin登录数据库,执行mysql语句或者在wp_users表中重置密码: 3,利用php文件重置. 这是提供一种 ...
- Day 01--选题与设计(一)
1.第一天我们主要确定了软件课设的项目,做一个学校内食堂订送餐的微信小程序.我们大体的设计思路是:可以实现学生身份的认证,幷使学生们能自行选择校园内的食堂,挑选各个食堂各个窗口菜谱上可以选择的菜,选择 ...
- Homebrew 安装 Docker Desktop for Mac
无意中发现Homebrew现在已经支持Docker Desktop for Mac了,因此特意把原来通过 https://docs.docker.com/docker-for-mac/install/ ...
- ASP.NET Core on K8S深入学习(7)Dashboard知多少
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 在第二篇<部署过程解析与Dashboard>中介绍了如何部署Das ...
- PIXIJS的一些使用
我发现pixijs在国内简直就是一片静土啊,只有那么一点点的微弱的不能再微弱的声音. 我在这里整理了下我使用过程中解决和可能理解的一些问题吧,都是一个个点,而不是完整的示例. 先放官网示例: http ...
- Flink快速入门--安装与示例运行
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行. 首先要想运行Flin ...