数仓必会:Sqoop常用命令(全量/增量/全库同步)

Sqoop详解 Sqoop(SQL-to-Hadoop)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。 阅读详情

官方文档:Sqoop User Guide (v1.4.7)

还有很多其他参数如:分隔符,文件格式,编码等参数在下面没有具体列举出来,可根据实际需要按需配置。

查看RDBMS的所有库

# MySQL:   jdbc:mysql://HOST:PORT
sqoop-list-databases --connect jdbc:mysql://127.0.0.1:3306 --username u_wyk --password p_wyk

# Oracle:  jdbc:oracle:thin:@HOST:PORT:SID
sqoop-list-databases --connect jdbc:oracle:thin:@127.0.0.1:1521:csdn --username u_wyk --password p_wyk

查看RDBMS指定库下的所有表

# MySQL:  jdbc:mysql://HOST:PORT/DB
sqoop-list-tables --connect jdbc:mysql://127.0.0.1:3306/csdn --username u_wyk --password p_wyk

# Oracle: jdbc:oracle:thin:@HOST:PORT:SID
sqoop-list-tables --connect jdbc:oracle:thin:@127.0.0.1:1521:csdn --username u_wyk --password p_wyk

测试RDBMS连通性

控制台显示结果

sqoop eval --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --query "select *  from t_test limit 1" --username u_wyk --password p_wyk

替换空值和空字符串

# 字符串null值和非字符串null值都转为NULL
# 使用--null-string和--null-non-string指定'\\N'
sqoop ...
--null-string
'\\N'
--null-non-string
'\\N'

# 同时在hive中指定空值格式为'\\N'
alter table table_name SET SERDEPROPERTIES('serialization.null.format' = '\\N');

替换/删除特殊字符

# 将数据中的 特殊字符\u001和 回车换行符\n\r 替换成指定字符串
sqoop ...
--hive-delims-replacement ''

# 将数据中的 特殊字符\u001和 回车换行符\n\r 删除
sqoop ...
--hive-drop-import-delims

RDBMS全库同步到Hive

# 将指定库下的表全量同步到hive库内(自动建表,需要提前建好hive库)
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --hive-import --hive-overwrite --hive-database hive_csdn  -m 5

# 如果有表没有主键,则无法切分并行任务,使用参数--autoreset-to-one-mapper 自动将其变成1个mapper任务
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --hive-import --hive-overwrite --hive-database hive_csdn --autoreset-to-one-mapper -m 5

RDBMS全库同步到HDFS

# 将指定库下的表全量同步到HDFS库内
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --warehouse-dir "/path/to/csdn_db"  -m 5

# 如果有表没有主键,则无法切分并行任务,使用参数--autoreset-to-one-mapper 自动将其变成1个mapper任务
sqoop import-all-tables --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL" --username u_wyk --password p_wyk --warehouse-dir "/path/to/csdn_db" --autoreset-to-one-mapper -m 5

复制RDBMS表结构到Hive

仅根据RDBMS表结构创建Hive表,不同步数据

# 从MySQL库csdn中复制表source_table 的表结构,在hive中建表default.target_table
sqoop create-hive-table --connect "jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL"  --username u_wyk -–password p_wyk -–table source_table --hive-database default -–hive-table target_table

RDBMS全量同步到Hive

# 从MySQL数据库csdn同步表source_table到hive的default.target_table,自动建表
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table --hive-import --hive-overwrite  --hive-table default.target_table --null-string '\\N' --null-non-string '\\N' -m 5

RDBMS全量同步到HDFS

# 从MySQL数据库csdn同步表source_table到HDFS的/path/to/target_dir目录下
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?zeroDateTimeBehavior=CONVERT_TO_NULL&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai' --username u_wyk --password p_wyk --table source_table --target-dir /path/to/target_dir -m 5

RDBMS增量同步到Hive

# 创建一个sqoop任务:根据增量字段upd_ts,记录上一次的最大值,每次同步大于该值的数据增量同步数据至hive,创建任务后每次执行会自动更新--last-value的值
sqoop job --create wyk_csdn_job --import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table  --target-dir=/path/to/target_table --hive-import --hive-database default --hive-table target_table --incremental append --check-column upd_ts --last-value '2020-11-30 00:00:00'

# 使用下面的命令执行该任务
sqoop job --exec wyk_csdn_job 

# 删除任务
sqoop job --delete wyk_csdn_job 

RDBMS增量同步到HDFS

# 根据upd_ts增量处理,记录上一次的最大值,取大于该值的数据进行同步
sqoop job --create wyk_csdn_job --import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' --username u_wyk --password p_wyk --table source_table  --target-dir=/path/to/target_table --incremental append --check-column upd_ts --last-value '2020-11-30 00:00:00'

# 或者使用 SQL+shell 结合的方式将增量数据放置在HDFS路径下
sqoop-import --connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL'  --username u_wyk  --password p_wyk  --query 'SELECT * FROM csdn.source_table WHERE datediff(upd_ts,current_timestamp())<=3  AND $CONDITIONS'  --incremental append  --check-column id  --target-dir /path/to/target_table  --null-string '\\N'  --null-non-string '\\N' -m 5

HDFS全量同步到RDBMS

# 从HDFS中导出数据到MySQL表rdbms_table内(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table –-export-dir /path/to/hive_table

HDFS增量同步到RDBMS

--update-mode: 

   allowinsert :插入更新,等同于upsert操作。

   updateonly:更新,仅更新主键冲突的数据,新数据不做任何处理。

# 增量将HDFS数据导出至MySQL的rdbms_table表,按照id(若多个主键可以用逗号分隔)进行插入更新upsert(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table --update-key id --update-mode allowinsert –-export-dir /path/to/hive_table/pt=20201130

# 增量将HDFS数据导出至MySQL的rdbms_table表,按照id(若多个主键可以用逗号分隔)进行更新update(若主键冲突则更新,新数据不做任何操作)(表需要提前创建)
sqoop export –-connect 'jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL' -–username u_wyk –-password p_wyk -–table rdbms_table --update-key id --update-mode updateonly –-export-dir /path/to/hive_table/pt=20201130

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢

sqoop命令大全 Sqoop是一个用来将Hadoop(hdfs/hive/hbase)和关系型数据库(如MySQL,Oracle,SQL SERVER,Postgres等)中的数据相互转移的工具,可以将一个关系型数据库中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。 官网说明:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.ht... 阅读详情

相关推荐

Sqoop1.4.4实现关系型数据库多表同时导入HDFS或Hive中

问题导读:          1、使用Sqoop哪个工具实现多表导入?          2、满足多表导入的三个条件是?          3、如何指定导入HDFS某个目录?如何指定导入Hive某个数据库? 一、介绍         有时候我们需要将关系型数据库中多个表一起导入到HDFS或者Hive中,这个时候可以使用Sqoop的另一个工具sqoop-import-all-tables。

NIITYZU的专栏 4818

数据采集-sqoop-实战

一,sqoop同步数据的几种方案 1,全量同步 对于数据量小的表,采取全量同步的方式,不会对数据源造成压力,写入到目标时也不用太多处理。 2,首次全量,后增量 对于数据量大,历史数据不会更新的数据且每天有新增的数据,可以采用增量同步的方式。 3,首次全量,后增量+更新 对于数据量大,历史数据会更新的数据且每天有新增的数据,可以采用同步增量+更新的方式,这种方式需要数据有一个识别修改的字段,如modify_time。 二,sqoop同步的原理 sqoop底层是mapreduce,使用sqoop时需要指定数据源

epitomizelu的专栏 2215

面试/数仓:银行项目主题, 五级分类,逾期期数,ODS数据抽取,增量/全量,项目的各个阶段,指标:违约率/逾期率,Finereport ,

银行项目主题银行项目主题主题:客户、产品、交易、合同维度:渠道、地区、时间等贷款总额、应还款本金、应还款利息、实际还款本金、实际还款利息、逾期本金、逾期利息、逾期罚息五级分类正常,损失率 0关注,损失率 0,本金或利息逾期7天内次级,损失率>=20%,本金或利息逾期90 天可疑,损失率>=50%,贷款本金逾期270天以上损失,损失率90%以上, 贷款本金逾期360天以上后三类是不良贷款逾期期数· M0:当前未逾期(或用C表示,取自Current)· M1: 逾期1-30日。

weixin_40121264的博客 1712

【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档

本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。

赵延东的一亩三分地 16万+

数仓学习|几种常见的数据同步方式

目录前言(1)常见数据同步方式(1.1)直连同步(1.2)实时增量同步(日志解析)(2)流式数据集成实现 前言 数据仓库的特性之一是集成,即首先把未经过加工处理的、不同来源的、不同形式的数据同步到ODS层,一般情况下,这些ODS层数据包括日志数据和业务DB数据。对于业务DB数据而言(比如存储在MySQL中),将数据采集并导入到数仓中(通常是Hive或者MaxCompute)是非常重要的一个环节。 那么,该如何将业务DB数据高效准确地同步到数仓中呢? 一般企业会使用两种方案: 直连同步 实时增量同步(数据库

蔡政洁的博客 4579

ETL的使用(sqoop):数据导入,导出

ETLETL: 是数据抽取(Extract)、数据转换(Transform)和数据加载(Load)的整个过程常用的ETL工具1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目,旨在帮助用户高效地在 Hadoop 生态系统和关系型数据库之间传输大量数据2.可以将数据在关系型数据库(如MySQL、Oracle、PostgreSQL等)和 Hadoop生态系统(如HDFS、Hive、HBase等)中进行迁移sqoop官网更多内容,阅读文档Kettle。

weixin_40121264的博客 1416

有关数仓增量和全量同步的一些思考

背景 相信很多公司都是基于Hive做的数仓,从而对外提供数据服务。这里只讨论离线数仓,做数仓必然离不开对大量数据的ETL处理工作。目前的ETL种类繁多,可选择的工具也有很多,比如使用Sqoop, DataX做离线的T+1数据同步, Spark或者Flink做T+0的实时数据同步等。 目前有很多公司业务是T+1的,每天需要同步昨天的业务库(MySQL、mongodb等)的数据到Hive数据仓库中,...

欲望以提升热忱 毅力以磨平高山 2978

【Kay】2 ETL及数仓分层(ODS、DWD、DWS、ADS)

ETL 1.ETL简介 ●将数据从业务数据库经过抽取(extract) 、转换( transform)、加载(load) 至ODS层的过程 ●整个ETL的实施占的工作量非常大,基本占整个数仓工作的70%。ETL做好了才能进行后续的数据分析。 ➢数据抽取(Extraction) ●抽取的数据源可以分为结构化数据、非结构化数据、半结构化数据 ➢抽取方式 ●数据抽取方式有全量同步(初始化装载)、增量同步(数据库只需要第一次全量,之后增量就可以了)两种方式 ●全量同步会将全部数据进行抽取,一般用

m0_54115636的博客 3686

大数据-数仓-数据采集-业务数据(一):全量同步(DataX、Sqoop) v.s. 增量同步(Maxwell、Canal)

1.种类繁多的数据同步工具中,大致可以分为两大类:① 基于Select查询的离线、批量同步工具,代表:DataX、Sqoop;② 基于数据库数据变更日志(mysql的binlog)的实时流式同步工具,代表:Maxwell、Canal;同步类型DataX、SqoopMaxwell、Canal全量同步Ö增量同步ÖÖ3.同步工具之间对增量同步不同方案的对比对比增量同步方案DataX、SqoopMaxwell、Canal对数据库的要求。

u013250861的博客 2350

数仓(七):全量、 增量、缓慢变化维、拉链表

一、解决增量导入由于数据修改导致数据重复问题 方案一:全量更新 目标表只保留最新的一份,比如我们每天用sqoop抽取最新的一份全量数据到hive 全量表 全量表没有分区,表中的数据是前一天的所有数据,比如说今天是24号,那么全量表里面拥有的数据是23号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量表不能记录历史的数据情况,只有截止到当前最新的、全量的数据。 方式:每天drop掉前一天的数据,重新抽一份最新的。 优点:节省空间,一些普通的使用也很方便,不用在选择表的时候加一个时间分

. 5939

数仓建模—数据同步方案设计

数据同步方案设计 通过前面的学习数据仓库的特性之一是集成,关于一点你可以参考我们前面的文章 数仓建模—数仓初识 数仓建模—数据集成 数据集成狭义上来说就是把未经过加工处理的、不同来源的、不同形式的的原始业务数据同步到ODS层,在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据,一般情况下,这些ODS层数据包括日志数据(埋点)和业务DB数据。对于业务DB数据而言(比如存储在MySQL中),将数据采集并导入到数仓中是非常重要的一个环节。

6万+

MySQL/Kafka数据集成同步,增量同步及全量同步

ChunJun(原FlinkX)是基于Apache Flink的批流一体数据集成工具,能同时处理静态数据(如MySQL到HDFS的定时同步)和实时数据(如Binlog到Kafka的实时捕获)。相比传统工具需维护多套系统,它通过统一架构支持30+数据源,提供精确一次语义,并降低开发和运维难度。典型场景包括离线数仓构建、实时风控和大屏展示,特别适合需要同时管理批流任务并简化技术栈的团队。该工具在国产化替代方面也展现出良好兼容性。

ejinxian的专栏 1227

深入数仓离线数据同步:问题分析与优化措施

深入数仓离线数据同步:问题分析与优化措施

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 2679

数仓工具:Sqoop

Sqoop 是一个数据库数据导入导出工具Sqoop 即 sql + hadoopSqoop执行时,底层使用的MR中的map,所以输出文件的名字都是part-msqoop底层默认开启4个map任务,所以如果不指定的话就默认有四个文件sqoop分割也不是按照平均分割的,而是根据主键的值,除以 4 份 (默认分割四个文件)根据每一份的跨度进行文件中值的存入Sqoop的。也就是说Sqoop的导入和导出功能是通过基于(只有map)的MapReduce作业实现的。

qq_62984376的博客 1477

【爬虫】Python实现爬取淘宝商品信息(超详细)

项目基于Python的第三方库Selenium模拟浏览器运行、PyQuery解析和操作HTML文档,获取淘宝平台中某类商品的详细信息(商品标题、价格、销量、商铺名称、地区、商品详情页链接、商铺链接等),并基于第三方库openpyxl建立、存储于Excel表格中。# 全局变量count = 1 # 写入Excel商品计数# 启动ChromeDriver服务# 关闭自动测试状态显示 // 会导致浏览器报:请停用开发者模式# 把chrome设为selenium驱动的浏览器代理;# 窗口最大化。

qq_46315152的博客 4万+

Dobot Magician机械臂二次开发指南:如何利用Python脚本和I/O接口实现自动化任务

本文详细介绍了Dobot Magician机械臂的二次开发方法,重点讲解如何通过Python脚本和I/O接口实现高级自动化任务。内容包括开发环境搭建、运动控制API解析、I/O接口应用以及典型场景实现,帮助开发者充分发挥Dobot Magician的潜力,适用于工业自动化、教育科研等领域。

weixin_26968079的博客 267

Oracle到Hadoop迁移实战:Sqoop全量增量同步与踩坑指南

数据迁移是企业数字化转型中绕不开的工程实践,尤其是从Oracle等传统关系型数据库向Hadoop生态的数仓迁移,涉及ETL流程重构、存储格式选型、增量同步策略与数据一致性校验等多个环节。在大数据技术体系中,Sqoop作为离线批量数据迁移的经典工具,凭借与Hive、HDFS的良好集成,成为众多团队的首选方案。然而,实际迁移过程中往往面临字段类型映射错误、字符集乱码、并行度调优、驱动兼容性等隐性坑点,甚至可能触发ORA-28547等数据库连接异常,或遇到身份证等超长数字被科学计数法截断的诡异问题。掌握从全量导入

weixin_33767813的博客 340

开关电源环路稳定性分析(01)-Buck变换器

这篇文章主要是根据Buck变换器的拓扑结构,利用欧姆定律,基尔霍夫定律,积分微分,这些我们所熟悉的理论推导出了开关电源输入和输出关系的表达式,我相信看完这篇文章,应该是可以自己推导一次。在后面的文章中,我们同样会按照这样的风格,尽量使用大家都已经掌握的知识,来一步一步的拆解晦涩难懂的环路稳定性的问题,在前面先把积木搭起来,后面综合分析的时候就不会显得那么困难!

D_Katter的博客 3833

Sqoop全量数据导入、增量数据导入、并发导入

Sqoop支持两种方式的全量数据导入和增量数据导入,同时可以指定数据是否以并发形式导入。下面依次来看: 全量数据导入 全量数据导入就是一次性将所有需要导入的数据,从关系型数据库一次性地导入到Hadoop中(可以是HDFS、Hive等)。全量导入形式使用场景为一次性离线分析场景。用sqoop import命令,具体如下: ### 全量数据导入 sqoop import \ --connect jd...

ChengYanan的博客 1811

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9054

69、SAP数据库归档重做日志备份策略与工具详解

本文详细解析了SAP数据库归档重做日志备份的重要性及策略,介绍了SAP提供的备份工具brarchive及其配置和使用方法,探讨了BRBACKUP与BRARCHIVE的联合运行、一致在线备份、备用数据库备份场景以及备份策略的综合应用与优化。此外,还分析了备份过程中常见问题的解决方法、备份监控与评估流程、与第三方备份解决方案的集成方式,以及未来备份技术的发展趋势和应对策略。通过合理运用这些策略和工具,可以有效保障SAP数据库的安全性和可恢复性。

peace的博客 135

告别全量导入:Sqoop大表增量同步实战指南

数据仓库建设中,随着业务数据量增长,全量数据导入面临耗时长、资源占用高等挑战。增量导入通过只同步变化数据,能显著降低同步开销,成为大表同步的常见方案。Sqoop作为Hadoop生态的经典数据同步工具,支持append和lastmodified两种增量模式,借助check-column、last-value等参数实现高效精准的增量抽取。本文从增量同步原理出发,结合大表场景,详细讲解了从全量到增量的平滑演进步骤、核心参数配置、性能调优方法以及常见问题排查实录,并给出实践中的水位管理与数据校验闭环经验,帮助数据工

weixin_29061041的博客 251

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值)【含Matlab源码 4887期】

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值) 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 810
上一篇: scala中下划线的几种含义
下一篇: Hive行转列、列转行
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值