`

sqoop 常用写法

 
阅读更多

 

 

0 参考链接:

 

http://www.cnblogs.com/cenyuhai/p/3306037.html    sqoop 常用命令整理(一)

 

http://www.cnblogs.com/cenyuhai/p/3306056.html    sqoop 常用命令整理(二)

 

如下是 我工作中遇到的东西,每条语句都本机测试通过:

 

 

1 查看所有数据库:

 

sqoop list-databases --connect  jdbc:mysql://192.168.1.1:3306/ --username root --password 123456

 

2 查看具体数据库内的表

 

sqoop list-tables --connect jdbc:mysql://localhost:3306/kellte --username root --password 123456

 

3  将关系型数据表结构users复制到Hive默认库的表users(此时如果不创建users表的话,那么表是内部表)中:

 

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table users 

--username root  --password 123456  --hive-table users

  --fields-terminated-by "\0001"  --lines-terminated-by "\n";

 

参数说明:  这两个参数可以不加

--fields-terminated-by "\0001"  是设置每列之间的分隔符,"\0001"是ASCII码中的1,

它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为"," 

--lines-terminated-by "\n"  设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;

 

 

 

4  将mysql表student数据拷贝到hive默认库的student表中:  这里使用一个mapreduce来执行

 

sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --passwd 123456

 --table  student  --hive-import --hive-table student -m 1;

 

5 根据列导入数据:   将kettle库下student表的name属性 写入到 hive表的student1中

 

 

 sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

   --table student  --column 'name'  --hive-import --hive-table student1 -m1;

 

 

 5.1  column 和  where合用在 mysql导出到hive中:

 

这是写到hive中的

 sqoop import  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

    --table student --columns "id,name"  --where "id > 3 and (age = 88 or age = 80)"  -m 1 

    --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";

 

 

 这是写到hdfs中的

 sqoop import  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

    --table student --columns "id,name"  --where "id > 3 and (age = 88 or age = 80)"  -m 1 

    --hive-import   --hive-table student5;

注意:--target-dir /user/hive/warehouse/userinfos2   可以用  --hive-import --hive-table userinfos2 进行替换

 

 

  6  增量添加数据:    将Mysql表student5从在主键大于2的基础上导出数据到hive表student5中,其中

                                     mysql表student5的id必须是自增,否则无法执行

 

 

 sqoop import  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

    --table student5  --hive-import --hive-table student5 -m 1 --incremental append --check-column 'id'

 --last-value 2;

 

 

7    query过滤条件使用:    将mysql表3个字段写到hdfs中,写入到hdfs后,字段以:间隔,各行之间以id间隔

 

 sqoop import  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

    --query "select id,name,kc_name from student5 where \$CONDITIONS"

   --target-dir /opt/hadoop/hive/warehouse/student5

  --fields-terminated-by  “:”  --split-by student5.id;

注意:   上述代码在命令行中需要写在一行, 并且 $CONDITIONS 在 ""内的时候,需要\来转义

               使用' 则不需要\转义,  $CONDITIONS和 query必须同时出现。

               在oozie 拼接的 sqoop  workflow.xml中 拼接的 sqoop query 时, $CONDITIONS 不需要转义

 

 

8  query 将数据写到Hive中  : 

 

 

 sqoop import  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

    --query "select id,name,kc_name from student5 where \$CONDITIONS  and id>3"

   --target-dir /opt/hadoop/hive/warehouse/student5

  --fields-terminated-by  “,”  --split-by student5.id
  --hive-import  --hive-table student5 -m 1;
 
  需要注意的:   --query 必须和 --target-dir 一起使用,   
                         在写出到hive表时, --target-dir即使不指定hive表student5所在的HDFS路径,
                           hive表数据也会写进来,不过不建议这样吧,至少我试验时会出现这种现象
                           hive 表创建时用什么分隔符分割字段,那么--target-dir 也需要指定同样的分隔符。
 query方式导入(hdfs/hive)数据要比 import+column方式复杂,但是query方式提供了在其内写复杂sql的能
 
9   没有主键表插入:
 
其中hive标student创建为:
create table student(address string,name string,s_id string) row format delimited fields terminated by '\t';
 这里以 s_id作为行间隔
sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --passwd 123456
--table student  --split-by s_id --hive-import --hive-table student -m 1
--fields-terminated-by "\t"  --null-string "**"  --null-non-string "##";
 
10 分区导入:
 
 
14 关联多表无关系全量进行查询:
sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --passwd 123456
--query 'select name,age from student1 union all select name,age from student2 where $CONDITIONS'
--target-dir /user/hdfs/test1 --split-by name  --fields-terminated-by  "\t"
--null-string "**"  --null-non-string "##"  -m  1;
 
15 关联多张表关系查询:
sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --passwd 123456
--query 'select name,kc_name,c_cj from student1 join cjb on s_id = student1.student_id
join kcb on kc_id = cjb.c_id where $CONDITIONS'
--target-dir /user/hdfs/test1 --split-by name  --fields-terminated-by  "\t"
--null-string "**"  --null-non-string "##"  -m  1;
 
 
 
 
 
 
 
16 hdfs导出到mysql:
sqoop export --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456
--table student  --export-dir '/user/hdfs/part/part-m-00000'  --fields-terminated-by ":" -m 1;
 
19 从 oracle导入数据:
sqoop import --connect 'jdbc:oracle:thin:@192.168.1.1:1521:dbname' --username root --passwd 123456
--table student   -m 1
--target-dir /user/hdfs/oracle/student
--fields-terminated-by "\t"  --null-string "**"  --null-non-string "##";
 
20 从sqlserver导入数据:
sqoop import --connect 'jdbc:sqlserver://192.168.1.1;database=test;username=sa;password=123' 
--query 'select top 10 * from zm where $CONDITIONS'
 -m 1
--target-dir /user/hdfs/sqlserver/student
--split-by id
--hive-table zm
--fields-terminated-by "\t"  --null-string "**"  --null-non-string "##";
 
 
sqoop 将mysql表生成 javabean
sqoop codegen  --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456
--table student --outdir /opt/sqoopbean
 
这样会在linux的/opt/sqoopbean 下生成 表同名的javabean  student.java
同时会把生成的class文件自动放在:
/tmp/sqoop-root/compile/e4......7277/student.jar中
 
生成了 javabean后 可以修改javabean 比如 name为Null时 默认值为 zm,
 
然后使用生成的 jar对应的class 反编译后,得到java 修改添加自己的逻辑后,
在编译成class jar 然后利如下命令来执行提交 sqoop任务:
 
sqoop import --connect jdbc:mysql://172.16.252.131:3306/etl
--username root --password root --table  user --jar-file /tmp/sqoop-root/compile/31adf......557f/user.jar
--class-name user --target-dir /user/root/sqoopout --fields-terminated-by "\t"
-m 1;
 
 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    sqoop常用命令.xlsx

    sqoop的常用指令操作

    sqoop常用命令文件

    以下是 Sqoop 常用的一些核心命令及其详细解释: 1. **安装与配置**: 在使用 Sqoop 命令之前,需要确保已经正确安装了 Hadoop 和 Sqoop,并且在环境变量中配置了 `HADOOP_HOME` 和 `SQOOP_HOME`。 2. **连接...

    Sqoop 常用方法及参数总结

    常用的sqoop操作方法,主要是import与export的常用参数

    sqoop常用命令参数-中文1

    在这个场景中,我们将详细探讨 Sqoop 的常用命令参数。 1. **通用参数**: - `--connect`:这是连接关系型数据库的 URL,用于指定要导入或导出数据的数据库地址。 - `--connection-manager`:用于指定使用的连接...

    Sqoop安装与使用

    Sqoop 安装与使用 Sqoop 是一款方便的在传统型数据库与 Hadoop 之间进行数据迁移的工具,充分利用 MapReduce 并行特点以批处理的方式加快数据传输。Sqoop 工具是 Hadoop 下连接关系型数据库和 Hadoop 的桥梁,支持...

    sqoop-1.4.7.zip

    Sqoop是Apache Hadoop生态中的一个工具,用于在关系型数据库和Hadoop之间高效地导入导出数据。在这个场景中,我们遇到了一个关于Sqoop运行时的问题,即"找不到或无法加载主类 org.apache.sqoop.sqoop"。这个问题通常...

    Sqoop集群搭建.

    Sqoop集群搭建指南 Sqoop是一款开源的数据转换工具,由 Apache 软件基金会开发,主要用于在 Hadoop 集群和结构化数据存储之间移动数据。Sqoop 集群搭建是指在 Hadoop 集群环境中安装和配置 Sqoop,以实现数据的高效...

    sqoop-cdh安装包

    Sqoop是Apache Hadoop生态中的一个工具,用于在Hadoop和关系型数据库之间高效地导入导出数据。在CDH(Cloudera Distribution Including Apache Hadoop)环境下安装和使用Sqoop,可以方便地将结构化数据从传统的...

    sqoop安装详解以及sqoop介绍

    sqoop安装详解以及sqoop内容介绍使用介绍 集群介绍 sqoop:是一个工具,主要用于导入导出,实现MySQL到Hadoop之间数据的转换 2、导入数据:从结构化数据(Mysql,oracle,db2,)导入到半结构化或非结构化hadoop中...

    sqoop安装与使用

    ### Sqoop 安装与使用详解 #### 一、Sqoop功能概述 Sqoop是一款用于在Hadoop和关系型...以上介绍了如何安装和使用Sqoop的基本流程及常用命令,通过这些命令可以帮助用户轻松地在Hadoop与关系型数据库之间迁移数据。

    Hadoop-Sqoop配置

    Hadoop-Sqoop配置 Sqoop 是一种数据迁移工具,主要用于在结构化数据源和 Hadoop 之间进行数据迁移。Sqoop 可以连接各种数据源,如 MySQL、PostgreSQL、Oracle 等,并将数据导入 Hadoop 中。 Sqoop 的主要特点是...

    sqoop-1.4.6-cdh5.5.0.tar.gz

    以下是 Sqoop 常用的一些核心功能: 1. 数据导入:Sqoop 可以从 RDBMS 导入数据到 HDFS,支持全量导入和增量导入。增量导入允许用户仅导入自上次导入以来发生更改的数据,减少了不必要的数据传输。 2. 数据导出:...

    sqoop的原理及概念

    Sqoop 的原理及概念 Sqoop 是一个开源的工具,用于在关系型数据库(RDBMS)和 Hadoop 之间进行高效的大数据交流。下面是 Sqoop 的原理和概念: 一、Sqoop 的架构 Sqoop 的架构非常简单,整合了 Hive、Hbase 和 ...

    sqoop2安装文档

    ### Sqoop2安装与配置详解 #### 一、概述 Sqoop是一款开源工具,主要用于在Hadoop和关系型数据库之间高效地传输数据。Sqoop2是Sqoop的一个重大升级版本,它引入了全新的架构和改进的功能,使得数据迁移更加稳定...

    大数据技术基础实验报告-sqoop的安装配置与应用.doc

    【大数据技术基础实验报告——Sqoop的安装配置与应用】 Sqoop是一款用于在Apache Hadoop和关系型数据库之间传输数据的工具,它简化了大量数据的导入导出过程。本实验报告将详细介绍如何安装配置Sqoop以及如何使用...

    sqoop-1.4.7(可直接下载学习使用)附有安装配置教程!

    内容概要:Sqoop 1.4.7 安装包主要包括以下内容:Sqoop 命令行工具:用于执行数据迁移任务的客户端工具。连接器:Sqoop 支持多种数据库连接器,包括 MySQL、PostgreSQL、Oracle 等,用于连接目标数据库。元数据驱动...

    sqoop2的安装包

    Sqoop2是一款用于在Hadoop和关系数据库管理系统(RDBMS)之间进行数据迁移的工具。它是Apache Sqoop项目的第二代版本,旨在提供更高级的功能和更好的可扩展性,以支持大数据环境中的复杂数据导入导出任务。在这个...

    sqoop jdbc驱动包

    sqoop 导入数据时候报错ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: oracle.jdbc.OracleDriver 缺少驱动包。

    sqoop-1.4.7.jar

    sqoop框架开发工具使用的jar sqoop-1.4.7.jar 手动安装到maven <groupId>org.apache.sqoop <artifactId>sqoop <version>1.4.7 </dependency>

    Sqoop学习文档(1){Sqoop基本概念、Sqoop的安装配置}.docx

    Sqoop 是一个用于在 Apache Hadoop 和传统关系型数据库之间进行数据迁移的工具。它主要负责将结构化的数据从 RDBMS(例如 MySQL)导入到 Hadoop 分布式文件系统(HDFS)、HBase 或 Hive,同时也能将数据从 Hadoop ...

Global site tag (gtag.js) - Google Analytics