sqoop oracle到hive,动态分区一次操作记录

sqoop,将oracle数据传递到hive,可以直接将表数据覆盖传递,也可以按select传递,这里我用的是select查询的

脚本如下:

1、创建分区表,按c1分区

 CREATE TABLE `xx.cc`(
  `c1` string)
PARTITIONED BY(`c2` string); 

2、通过sqoop将数据导入临时表中

sqoop import -D oraoop.jdbc.url.verbatim=true --hive-import --hive-overwrite  --connect jdbc:oracle:thin:@ip:port:实例名 --username xx_name --password xx_password --query "select c1,c2  from table_name where c1=1 and \$CONDITIONS" \--hive-database hive_database_name --hive-table cc_temp --target-dir /user/hive/warehouse/xx.db/cc_temp_target --delete-target-dir --num-mappers 1 --fetch-size 5000 --hive-drop-import-delims --null-string ‘\\N‘ --null-non-string ‘\\N‘ 

sqoop说明:

  • query里面,必须有where条件,同时必须添加 \$CONDITIONS, \$CONDITIONS在执行时会自动替换位 (1= 0),但是不影响查询
  • target-dir 对应的目录,需要当前用户有操作权限,同时,target-dir对应的目录,不可存在,或者对应即将生成的表文件;原因如下
    • target-dir是sqoop将oracle导入数据生成的临时文件(是文件,不是目录),如果已存在,则会报错
    • sqoop将oracle导入到hive后,会将target-dir删除,如果target-dir对应的是即将生成的表文件,则数据会删除

3、将临时表,导入分区表

set hive.exec.dynamic.partition.mode=nonstrictinsert overwrite table xx.cc partition(c1) select * from xx.cc_temp;

原文地址:https://www.cnblogs.com/jaxlove-it/p/12581141.html

时间: 2024-11-05 19:26:01

sqoop oracle到hive,动态分区一次操作记录的相关文章

HIVE动态分区实战

一)hive中支持两种类型的分区: 静态分区SP(static partition) 动态分区DP(dynamic partition) 静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断.详细来说,静态分区的列实在编译时期,通过用户传递来决定的:动态分区只有在SQL执行时才能决定. 二)实战演示如何在hive中使用动态分区 1.创建一张分区表,包含两个分区dt和ht表示日期和小时 CREATE TABLE partition_table001 ( name ST

hive 动态分区与混合分区

使用hive分区,可以在查询的只查询对应分区的数据,避免了全表扫描.大大提升了查询速度. 今天我们讨论下,hive分区中的两个用法,动态分区和混合分区. hive混合分区 就是多级分区.在某个分区下继续创建分区. 比如 分区 dt=2019-03-10的fruit销售表中,继续区分apple,orange,banana的销售数据. 我们经常分开统计 各种水果的销售情况,那么使用混合分区就非常合适.    代码: 混合分区建表语句: hive动态分区: 根据指定字段,hive自动生成分区. 原文地

Hive动态分区

Hive默认是静态分区,我们在插入数据的时候要手动设置分区,如果源数据量很大的时候,那么针对一个分区就要写一个insert,比如说,我们有很多日志数据,我们要按日期作为分区字段,在插入数据的时候我们不可能手动的去添加分区,那样太麻烦了.还好,Hive提供了动态分区,动态分区简化了我们插入数据时的繁琐操作. 使用动态分区的时候必须开启动态分区(动态分区默认是关闭的),语句如下: [java] view plain copy set hive.exec.hynamic.partition=true;

hive 动态分区

非常重要的动态分区属性: hive.exec.dynamic.partition  是否启动动态分区.false(不开启) true(开启)默认是 false hive.exec.dynamic.partition.mode  打开动态分区后,动态分区的模式,有 strict和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict则无此要求.各自的好处,大家自己查看哈. hive.exec.max.dynamic.partitions 允许的最大的动态分区

大数据--hive动态分区调整

1.创建一张普通表加载数据 ------------------------------------------------ hive (default)> create table person(id int,name string,location string) > row format delimited fields terminated by '\t';OKTime taken: 0.415 seconds -------------------------------------

Spark+Hadoop+Hive集群上数据操作记录

[[email protected] ~]$ hadoop fs -ls / drwxr-xr-x+ - jc_rc supergroup 0 2016-11-03 11:46 /dt [rc@vq18ptkh01 ~]$ hadoop fs -copyFromLocal wifi_phone_list_1030.csv /dt [rc@vq18ptkh01 ~]$ hadoop fs -copyFromLocal wifi_phone_list_1031.csv /dt [rc@vq18ptk

Hive学习之动态分区及HQL

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从查询中获取数据插入到表或动态分区

(前人写的不错,很实用,负责任转发)转自:http://www.crazyant.net/1197.html Hive的insert语句能够从查询语句中获取数据,并同时将数据Load到目标表中.现在假定有一个已有数据的表staged_employees(雇员信息全量表),所属国家cnty和所属州st是该表的两个属性,我们做个试验将该表中的数据查询出来插入到另一个表employees中. 1 2 3 4 INSERT OVERWRITE TABLE employees PARTITION (cou

Hive分区(静态分区+动态分区)

Hive分区的概念与传统关系型数据库分区不同. 传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区. Hive的分区方式:由于Hive实际是存储在HDFS上的抽象,Hive的一个分区名对应一个目录名,子分区名就是子目录名,并不是一个实际字段. 所以可以这样理解,当我们在插入数据的时候指定分区,其实就是新建一个目录或者子目录,或者在原有的目录上添加数据文件. Hive分区的创建 Hive分区是在创建表的时候用Partitioned b