sqoop导入数据到hive ods层

这是一个bash脚本,用于根据参数从MySQL数据库将数据导入到Hive的ODS层。脚本支持全量(a)和增量(i)导入,根据指定日期和增量字段进行数据筛选。如果未提供日期,则默认为昨日数据。脚本首先检查参数,然后连接MySQL获取数据,并使用sqoop将数据导入HDFS,最后将数据加载到Hive表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# !/bin/bash
# 功能:把源数据表加载到hive ods层
# 输入参数据:$1 源数据库 $2 源表名 $3 增全量 $4加载数据日期 $5增量字段1 $6增量字段2 $增量字段3
# 如果是全量 增量字段不需要输入
# $4加载日期如果不输入 则认为是加载昨日数据
# $5,$6,$7 根据实时情况输入
# 例:sh sqoop_mysql_hive_table.sh athletics c_banner i 2017-11-29 end_time start_time create_time


# 开始判断参数据 参数个数


if [ $# -lt 3 ];then
    echo "wrong arg[] number"
    exit 1
fi


#输入数据库名,表名
dbname=$1
tab_name=$2


if [ -z "$dbname" ] || [ -z "$tab_name" ]; then
       echo "The auth info of has not been configured"
        exit 1;
fi


# 判断日期输入 $7


if [  -z "$4" ];then
   yesterday=`date -d yesterday +%Y-%m-%d`
   stat_date=${yesterday}
 else
   stat_date="$4"
fi


"加载数据的日期是:"$stat_date  &>> /disk4/azkaban/logs/sqoopimplog/${stat_date}_${tab_name}.log


# 判断增全量数据 并处理查询条件
if [ "$3" = "a" ];then
    contn=""
  elif [ "$3" = "i" ];then
   #处理增量参数据
    cont0=" WHERE 1=0 "
    if [ -z "$5"  ];then
      echo  $5" is null"
     else
      cont1="or date_format($5,'%Y-%m-%d')='$stat_date' "
    fi


    if [ -z "$6" ];then
       echo $6" is null"
     else
    &
### 如何使用 SqoopHive 数据导入 Oracle 数据库 #### 方法概述 为了实现从 Hive 到 Oracle 的数据传输,通常采用先将 Hive 表的数据出至 HDFS 文件系统中的临时文件夹,再利用 Sqoop 工具读取这些文件并将其写入到 Oracle 中的方式[^1]。 #### 配置环境准备 确保已经安装好 Java、Hadoop 和 Sqoop,并且能够正常连接到 Oracle 数据库。还需要确认 Oracle JDBC Driver (ojdbc.jar) 被放置于 Sqoop 安装目录下的 lib 文件夹内以便加载驱动程序支持[^2]。 #### 实际操作流程 ##### 创建目标表结构 在执行任何导入之前,在 Oracle 中创建相应的表格来接收来自 Hive 的记录是非常重要的一步。这可以通过 SQL*Plus 或其他 DBA 工具完成: ```sql CREATE TABLE ods_sqoop_bitcoin_ds ( id NUMBER, name VARCHAR2(255), value NUMBER -- 假设字段类型匹配实际情况 ); ``` ##### 执行出命令 下面给出的是一个典型的 Sqoop 出语句模板,用于把存储在 Hive 中的结果集转移到远程 RDBMS 上面去: ```bash sqoop export \ --connect jdbc:oracle:thin:@//<host>:<port>/<service_name> \ --username <your_username> \ --password-file hdfs://path/to/password/file \ --table ods_sqoop_bitcoin_ds \ --export-dir /user/hive/warehouse/<database>.db/<table>/ \ --input-fields-terminated-by '\001' \ --columns "id,name,value" ``` 请注意替换 `<host>`、`<port>`、`<service_name>` 等占位符为实际值;同时 `-password-file` 参数指定密码的安全路径以保护敏感信息不被泄露[^4]。 ##### 处理复杂情况 如果遇到更复杂的场景比如存在分区表,则可能需要额外处理逻辑如通过 `WHERE` 子句筛选特定日期范围内的数据条目或是调整列映射规则等措施加以应对[^3]。 #### 注意事项 在整个过程中要特别留意字符编码一致性问题以免引起乱码现象发生;另外考虑到性能因素建议合理设置批量大小 (`--batch`) 及并发线程数 (`--num-mappers`) 来优化整个作业效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值