Sqoop实用linux脚本

 Sqoop实用linux脚本_第1张图片

1、通用脚本
1.1、Sqoop导入DATADB数据到HIVE

sqoop_load_data.sh

#!/bin/bash
################################################################################
#脚本功能:通用脚本 SQOOP导入DATADB数据到HIVE 
#脚本参数:DATADB连接串 DATADB取数用户名 DATADB口令 DATADB表名 WHERE条件 HIVE库名 HIVE表名 
#编写日期:2024-01-22                                                          
#功能实现:                                                                    
#        1.通过sqoop程序将数据库中字段按条件导入到HIVE中
#        
#修    改:
#
################################################################################


#初始化用户变量
source $TEST_HOME/shell/config/bash_profile

#参数个数判断
if [ $# -ne 7 ];then
        echo "请输入参数:DATADB连接串 DATADB取数用户名 DATADB口令 DATADB表名 WHERE条件 HIVE库名 HIVE表名"
        echo "例如:sh sqoop_load_data.sh oracle:thin:@192.168.xx.xx:1521/database user password table_name \"1=1\" hive_db hive_table"
        echo "例如:sh sqoop_load_data.sh mysql://128.64.xxx.xxx:13306/database user password table_name \"1=1\" hive_db hive_table"
        exit 1
fi

#变量赋值
datadb_str=$1
datadb_user=$2
datadb_passwd=$3
datadb_table=$4
#datadb_pk=$5
condition=$5
hive_db=$6
hive_table=$7

start_time=`date +%s`

#按条件从DATADB拉取数据,导入Hive贴源层
sqoop import \
--connect jdbc:${datadb_str} \
--username ${datadb_user} \
--password ${datadb_passwd} \
--create-hive-table \
--table ${datadb_table} \
--delete-target-dir \
-m 1 \
--where "${condition}" \
--hive-overwrite \
--hive-import \
--null-string '\\N' \
--null-non-string '\\N' \
--target-dir ${HIVE_DIR}${hive_table} \
--hive-database ${hive_db} \
--hive-table ${hive_table} \
--hive-drop-import-delims 


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop load table ."
exit 1;
fi

end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End load datadb ${datadb_str} ${datadb_table} to hive ${hive_db}.${hive_table}, execution time was `expr $end_time - $start_time` s"
exit 0;

1.2、通用脚本 SQOOP导出HIVE数据到DATADB

sqoop_export_data.sh

#!/bin/bash
################################################################################
#通用脚本:SQOOP导出HIVE数据到DATADB
#脚本名称:sqoop_export_data.sh                                              
#脚本功能:通过sqoop程序将hive数据仓库表导出到数据库中。   
#脚本参数:
#编写人:                                                                 
#编写日期:2024-01-22                                                        
#注:      1、需要先在数据库中有对应的表结构,字段长度合理。
#          2、数据库表名大小写
################################################################################

if [ $# -ne 8 ];then
        echo "请输入参数:HIVE库名 HIVE表名 WHERE条件 EXP-HIVE库名 DATADB连接串 DATADB用户名 DATADB口令 DATADB表名"
        echo "例如:sh sqoop_export_data.sh database table_name \"1=1\" exp oracle:thin:@192.168.xx.xx:1521/database user password table_name"
        exit 1
fi
#export PATH=$PATH:/usr/hdp/3.0.1.0-187/hive/lib/*


#变量赋值
hive_db=$1
hive_table=$2
condition=$3
exp_hive_db=$4
datadb_str=$5
datadb_user=$6
datadb_passwd=$7
datadb_table=$8

start_time=`date +%s`

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Create export table ${exp_hive_db}.exp_${hive_table}"

#beeline -e "set role admin;"
#增加外部表删除语句 alter ... external=false

beeline -e "ALTER TABLE ${exp_hive_db}.exp_${hive_table} SET TBLPROPERTIES('EXTERNAL'='False'); drop table if exists ${exp_hive_db}.exp_${hive_table};"

#创建外部临时表
beeline -e "create external table ${exp_hive_db}.exp_${hive_table} like ${hive_db}.${hive_table};insert into ${exp_hive_db}.exp_${hive_table} select * from  ${hive_db}.${hive_table} where ${condition};"


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed create export table  ${exp_hive_db}.exp_${hive_table} ."
exit 1;
fi

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Run sqoop export."

#sqoop导出
sqoop export \
-D mapreduce.map.java.opts="-Duser.timezone=GMT" \
--null-string '\\N' \
--null-non-string '\\N' \
--hcatalog-database ${exp_hive_db} \
--hcatalog-table exp_${hive_table} \
--connect jdbc:${datadb_str} \
--username ${datadb_user} \
--password ${datadb_passwd} \
--table ${datadb_table} 


if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop export."
exit 1;
fi

end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End export hive ${hive_db}.${hive_table} to datadb ${datadb_str} ${datadb_table}, execution time was `expr $end_time - $start_time` s"
exit 0;
2、导入导出到Oracle
2.1、Oracle抽取数据到Hive

load_data_oracle.sh

#!/bin/bash
################################################################################
#脚本功能:从oracle的数据库下抽取表数据到大数据平台hive的HLOAD库上 
#脚本参数:  
#编写日期:2024-01-22                                                          
#功能实现:                                                                    
#        1.通过sqoop程序将应用ORACLE库中字段按条件全部导入到HIVE的HLOAD库中
#修    改:
################################################################################

if [ $# -ne 2 ];then
        echo "请输入参数:源系统编码 DATADB表名 取数条件 "
        echo "例如:sh load_data_oracle.sh table_name \"data_dt='20190701000001'\" "
        echo "例如:sh load_data_oracle.sh table_name \"1=1\" "
        exit 1
fi

#初始化用户变量,根据个人需要
#source $TEST_HOME/shell/config/bash_profile


datadb_table=$1
datadb_where=$2

start_time=`date +%s`

#删除HLOAD中此表同批次表
#beeline -e "set role admin;"
beeline -e "drop table if exists ${HLOAD}.${datadb_table};"

echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]Run Sqoop load."
sh $HLWJG_HOME/shell/tools/sqoop_load_data.sh ${SRC_ORACLE} ${SRC_ORACLE_USER} ${SRC_ORACLE_PWD} ${datadb_table} "${datadb_where}" ${HLOAD} ${datadb_table}

if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`]Failed sqoop load stage table."
exit 1;
fi

#结束
end_time=`date +%s`
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`]End load  ${SRC_ORACLE} ${datadb_table} condition:${datadb_where} to ${HLOAD}.${datadb_table} , execution time was `expr $end_time - $start_time` s"

exit 0;
2.2、Hive导出数据到Oracle

export_data_oracle.sh

#!/bin/bash
################################################################################
##脚本功能:从大数据平台导出数据到oracle
#脚本参数:  
#编写日期:2024-01-22                                                           
#功能实现:                                                                    
#        1.通过sqoop程序将HIVE的APP库中数据按条件全部导出oracle库 
################################################################################

if [ $# -ne 4 ];then
        echo "请输入参数:HIVE库名 HIVE表名 WHERE条件 DATADB表名 "
        echo "例如:sh export_data_oracle.sh database table_name \"data_dt='20190709040000'\" table_name"
        exit 1
fi
source $HLWJG_HOME/shell/config/bash_profile

hive_db=$1
hive_table=$2
condition=$3
datadb_table=$4

start_time=`date +%s`

#按条件清除原表数据
echo "开始按条件${condition}清除oracle表${datadb_table}的数据"
#修改0920 删除oracle表对应条件的数据
sqlplus -s ${DST_ORACLE_USER}/${DST_ORACLE_PWD}@${DST_ORACLE_IP}:${DST_ORACLE_PORT}/${DST_ORACLE_DB} <

你可能感兴趣的:(sqoop,sqoop,linux,数据仓库,数据库,分布式,大数据,hive)