Import data from SQLServer with Sqoop
author: luciuz
date: 2013/11/15
-----------------------------------------------------------------------------------------------------------------
假定: 用户database:InsideTSQL2008, tablename:Employees
注意:如果需要导入的table “No primary key could be found”, 则需要“specify one with --split-by or perform a quential import with '-m 1'.”
准备:从Microsoft官网下载jdbc驱动, 将sqljdbc_3.0/enu/下的sqljdbc4.jar和sqljdbc.jar包导入到$SQOOP_HOME/lib下。
下载地址:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=2505
!! 以下代码中加"\"是便于查看,实际运行时注意断行的位置,最好将"\"去掉,因为有可能将'\'符号包含在引号中,比如: “ jdbc:sqlserver://172.16.102.30 \ ", 这样便会出错。
1. import all-tables
${Installation}/bin/sqoop import-all-tables\ --connect \ --target-dir /user/grid/mydb/
2. import some tables
${Installation}/bin/sqoop import --verbose \ --driver com.microsoft.sqlserver.jdbc.SQLServerDriver\ --connect 'jdbc:sqlserver://172.16.102.30; username=sa;\ password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees --target-
3. list-tables
$SQOOP_HOME/bin/sqoop list-tables \ --connect 'jdbc:sqlserver://172.16.102.30; username=sa; \ password=1qaz!QAZ; database=InsideTSQL2008'
4. create-hive-table
sqoop import --warehouse-dir "/user/hive/MyWareHouse" \ --hive-overwrite --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa;password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees --hive-table tblFoo --hive-import -m
注意:导入hive以后因为Hive官方默认的配置问题,是看不到已导入的tables的,需要做如下修改:
$HIVE_HOME/conf/hive-site.xml中修改配置如下:
修改一
将:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property>
修改为:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=/home/grid/hive/metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property>
注意:databaseName的地址为metastore_db
存放的地方,默认在$HIVE_HOME/下面。
修改二
官方配置文档有错误,做如下修改:
将:
<property> <name>hive.server2.thrift.sasl.qop</name> <value>auth</auth>
跟正为:
<property> <name>hive.server2.thrift.sasl.qop</name> <value>auth</value>
修改以上两项后重启hive 即可。
5. list-databases
sqoop list-databases --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'
6. list-columns-of-a-table
sqoop import -connect 'jdbc:sqlserver://172.16.102.30; \ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --table Employees --columns "empid, lastname, firstname, title"\ -m
7. Storing data in SequenceFiles, and setting the generated class name to com.foo.Employee
sqoop import -connect 'jdbc:sqlserver://172.16.102.30; \ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --table Employees --class-name com.foo.Employee \ --as-sequencefile -m
8.Specifying the delimiters to use in a text-mode import
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees --fields-terminated-by ',' \ --lines-terminated-by '\n' --optionally-enclosed-by '\"' -m
9. import data like "select ... where..." and with user-defined-delimiters
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees --where "mgrid = 5" --fields-terminated-by ','\ --lines-terminated-by
10. Changing the splitting column from the default(default is the primary key)
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --table Employees --where "mgrid = 5" --split-by empi\ --fields-terminated-by ',' --lines-terminated-by '\n' \ --optionally-enclosed-by '\"'
11. append data to an existed table
qoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees --where "mgrid <> 5" --fields-terminated-by ','\ --lines-terminated-by '\n' --optionally-enclosed-by '\"' \ --split-by empid --append
12 uses validation to validate the import using the table row count and number of rows copied into HDFS
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --table Employees --validate -m
13. Query Imports
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --query "SELECT a.empid, a.lastname FROM Employees AS a WHERE\ a.empid > AND \$CONDITIONS" -split-by a.empid \ --target-dir /user/grid/query_results
注意,--target-dir,-split-by(或m 1)不能少,$CONDITIONS必须有,且为保险起见加反斜杠;
程序执行时会将以上命令展开为:
)
14. delete-target-dir
sqoop import --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008'\ --table Employees -m --delete-target-dir
Delete the import target directory if it exists.
注意,不需要指定要删除哪个directory, “delete-target-dir”删除的就是需要import数据的那个directory
15. codegen
sqoop codegen --connect 'jdbc:sqlserver://172.16.102.30;\ username=sa; password=1qaz!QAZ; database=InsideTSQL2008' \ --table Employees
注意 codegen的argument, 不含delete-target-dir, 请参考codegen的common argument, codegen arguments, Output line formatting arguments, Input parsing arguments和Hive arguments
Import data from SQLServer with Sqoop的更多相关文章
- 6 ways to import data into SQL Server
I’m going to go over some methods to import data from text files into SQL Server today. The particul ...
- The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name
可以强迫部署EntityFramework.SqlServer.dll这个文件到输出目录 找到1个老外的帖子,戳这里(本人测试无效,大家有可能试一下..) 解决方案以下: 在EF的上下文代码CS文件( ...
- 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.m
Windows服务中程序发布之后会如下错误: 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“Syste ...
- Import Data from *.xlsx file to DB Table through OAF page(转)
Use Poi.jar Import Data from *.xlsx file to DB Table through OAF page Use Jxl.jar Import Data from ...
- Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' does not have an implementation
一.错误信息 Entity Framework 6.0数据迁移:Add-Migration XXXX 命令发生错误 System.Reflection.TargetInvocationExceptio ...
- (MySQL里的数据)通过Sqoop Import Hive 里 和 通过Sqoop Export Hive 里的数据到(MySQL)
Sqoop 可以与Hive系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HIVE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sqoo ...
- (MySQL里的数据)通过Sqoop Import HDFS 里 和 通过Sqoop Export HDFS 里的数据到(MySQL)(五)
下面我们结合 HDFS,介绍 Sqoop 从关系型数据库的导入和导出 一.MySQL里的数据通过Sqoop import HDFS 它的功能是将数据从关系型数据库导入 HDFS 中,其流程图如下所示. ...
- (MySQL里的数据)通过Sqoop Import HBase 里 和 通过Sqoop Export HBase 里的数据到(MySQL)
Sqoop 可以与HBase系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HBASE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sq ...
- Ubuntu中用bitbake core-image-minimal时,出错:from bb import data
问题描述: 在准备ARM交叉编译环境时,执行完命令: DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b bu ...
随机推荐
- 【开发】Form Validate 表单验证 扩展应用
目录: ★.文本输入框(easyui-textbox) ★.数字框(easyui-numberbox) ★.时间(easyui-datebox) ★.文本域(easyui-textbox easyui ...
- [PR & ML 6] [Introduction] Information Theory
- [getLongestLength] 加和为0的最长子串长度
点击这里查看原文 假设一个数组仅仅由1和-1组成,求该数组的和为0的最长子串的长度. 例如: {1,-1,1,-1,1,1,1} 输出:4. 昨天机试的时候做到这道题,不会做,今天思考一下. 普通的解 ...
- ssh连接失败解决方法
执行如下命令: ssh-keygen -t dsa -P '' -f /etc/ssh/ssh_host_dsa_key ssh-keygen -t rsa -P '' -f /etc/ssh/ssh ...
- 第二章 Qt常用工具的介绍
第二章 Qt常用工具的介绍 (1)No.1 qmake 相信编写过Makefile的开发人员,随着工程中源码的级数递增和以类型.功能.模块组织源码的子目录的增多,都不愿意重复机械地手工编写这个工程管理 ...
- apply()与call()的区别
一直都没太明白apply()与call()的具体使用原理,今日闲来无事,决定好好研究一番. JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语 ...
- 纯javascript 回到 顶部 实例
很多网站都会采用瀑布式的加载模式,像qq空间加载好友动态,为了用户体验更好,很多网站会加上回到顶部的连接,但大多数网站都是一下子就回到了顶部,当然,这样有这样的好处,但是我是个比较喜欢很炫的东西的人, ...
- Linux文件保护禁止修改、删除、移动文件等,使用chattr +i保护
不让用户修改.删除文件等,使用 chattr保护 chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files… 最关键的是在[mode]部分,[m ...
- 微信获取用户的openid和详细信息
获取用户的信息的原理,首先用户会点击一个url,这个url会包含一个参数redirect_uri,这个url是指向微信那边的服务器的,然后微信会把这个http请求重定向到redirect_uri,即我 ...
- C++ 实现设计模式之观察者模式
1. 什么是观察者模式? 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在 ...