当前位置:网站首页>Sqoop【付诸实践 02】Sqoop1最新版 全库导入 + 数据过滤 + 字段类型支持 说明及举例代码(query参数及字段类型强制转换)
Sqoop【付诸实践 02】Sqoop1最新版 全库导入 + 数据过滤 + 字段类型支持 说明及举例代码(query参数及字段类型强制转换)
2022-07-26 09:40:00 【シ風】
1.环境说明
还是之前的环境:
# 不必要信息不再贴出
# JDK
[[email protected] ~]# java -version
java version "1.8.0_251"
# MySQL
[[email protected] ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.28
# Hadoop
[[email protected] ~]# hadoop version
Hadoop 3.1.3
# Hive
[[email protected] ~]# hive --version
Hive 3.1.2
# Sqoop
[[email protected] ~]# sqoop version
Sqoop 1.4.7
2.import-all-tables
Sqoop1支持通过 import-all-tables 命令进行全库导出到 HDFS/Hive,但需要注意有以下两个限制:
- 所有表必须有主键;或者使用 --autoreset-to-one-mapper ,代表只启动一个 map task,即不并行执行。【若仍希望并行执行,则可以使用 --split-by 指明拆分数据的参考列】 ;
- 你不能使用非默认的分割列,也不能通过 WHERE 子句添加任何限制。官方原文
You must not intend to use non-default splitting column, nor impose any conditionsvia a WHERE clause.
导入的默认路径是:/user/用户名/若干数据表名/数据文件和_SUCCESS,如果想要指定目录需要使用指定的参数【具体参数可以使用 sqoop help import-all-tables 查看】
【实例 1️⃣ 】全库导入到 HDFS:
# 注意:指定导入目录使用的是 --warehouse-dir 不是 --target-dir 参数
sqoop import-all-tables \
--connect jdbc:mysql://tcloud:3306/mysql \
--username root \
--password [email protected]\
--warehouse-dir /sqoop_all \
--fields-terminated-by '\t' \
--bindir /usr/local/sqoop/lib/ \
-m 1
# 所有表都有主键时 可以设置-m 的参数大于1 否则只能为 1
【实例 2️⃣ 】全库导出到 Hive:
# 注意:指定导入的数据库使用 --hive-database
sqoop import-all-tables \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://tcloud:3306/mysql \
--username root \
--password [email protected]\
--hive-database sqoop_test \
--hive-import \
--hive-overwrite \
--bindir /usr/local/sqoop/lib/ \
-m 1
3.query
Sqoop1 支持使用 query 参数定义查询 SQL实现对数据的过滤,从而可以导入任何想要的结果集。实例:
sqoop import \
--connect jdbc:mysql://tcloud:3306/mysql \
--username root \
--password [email protected]\
--query 'select * from help_keyword where $CONDITIONS and help_keyword_id < 50' \
--delete-target-dir \
--target-dir /sqoop_hive \
--hive-database sqoop_test \ # 指定导入目标数据库 不指定则默认使用Hive中的default库
--hive-table filter_help_keyword \ # 指定导入目标表
--split-by help_keyword_id \ # 指定用于 split 的列
--hive-import \ # 导入到 Hive
--hive-overwrite \
--bindir /usr/local/sqoop/lib/ \
-m 1
在使用 query 进行数据过滤时,需要注意以下三点:
- 必须用 --hive-table 指明目标表;
- 如果并行度 -m 不为 1 或者没有指定 --autoreset-to-one-mapper ,则需要用 --split-by 指明参考列;
- SQL 的 where 字句必须包含 $CONDITIONS ,这是固定写法,作用是动态替换。
4.字段类型支持
Sqoop1默认支持数据库的大多数字段类型,但是某些特殊类型是不支持的。遇到不支持的类型,程序会抛出异常 Hive does not support the SQL type for column xxx
异常,此时可以通过下面两个参数进行强制类型转换:
- –map-column-java :重写 SQL 到 Java 类型的映射;
- –map-column-hive :重写 Hive 到 Java 类型的映射。
示例如下,将原先 id 字段强制转为 String 类型, value 字段强制转为 Integer 类型:
$ sqoop import ... --map-column-java id=String,value=Integer
边栏推荐
猜你喜欢
matlab中的AR模型短时预测交通流
Alibaba cloud technology expert haochendong: cloud observability - problem discovery and positioning practice
Jmeter配置元件之CSV数据文件设置
matlab simulink实现模糊pid对中央空调时延温度控制系统控制
Fiddler packet capturing tool for mobile packet capturing
SSG框架Gatsby访问数据库,并显示到页面上
在Blazor 中自定义权限验证
Development to testing: a six-year road to automation starting from 0
The problem of accessing certsrv after configuring ADCs
Fiddler抓包工具之移动端抓包
随机推荐
The combination of officially issued SSL certificate and self signed certificate realizes website two-way authentication
wap端微信h5支付,用于非微信浏览器
Qt随手笔记(三)在vs中使用QtCharts画折线图
antd TreeSelect获取父节点的值
解决ProxyError: Conda cannot proceed due to an error in your proxy configuration.
E. Two Small Strings
服务器、客户端双认证(2)
MFC handy notes
V-permission add permission
MQTT X CLI 正式发布:强大易用的 MQTT 5.0 命令行工具
高斯消元
The whole process of server environment configuration
Redis sentinel mode setup under Windows
Table extraction for opencv table recognition (2)
Great reward for interview questions
Jmeter配置元件之CSV数据文件设置
Interview shock 68: why does TCP need three handshakes?
Mo team learning notes (I)
编写一个在bash / shell 和 PowerShell中均可运行的脚本
QT handy notes (III) use qtcharts to draw a line chart in VS