我有一个关于 Apache Sqoop 的独特查询。我已使用 apache Sqoop 导入工具将数据导入到我的 HDFS 文件中。
接下来,。我需要使用 Hadoop (Sqoop) 将数据放回另一个数据库(基本上我正在执行从一个数据库供应商到另一个数据库供应商的数据传输)。
Put data into Sql Server,有两个选项。
1) 使用 Sqoop 导出工具连接到我的 RDBMS(SQL 服务器)并直接导出数据。
2) 使用 copyToLocal 命令将 HDFS 数据文件(CSV 格式)复制到我的本地机器,然后对这些 CSV 文件执行 BCP(或批量插入查询)以将数据放入 SQL 服务器数据库。
我想了解哪种方法是完美的(或者更确切地说是正确的)方法,以及两者中哪一种更快 - 从 HDFS 到 RDBMS 的批量插入或 Apache Sqoop 导出。 ??
除了上面提到的这两种方式之外,还有其他方式可以更快地从一个数据库供应商转移到另一个数据库供应商吗?
我正在使用 6-7 个映射器(要传输的记录大约为 20-25 百万)
如果我的问题不清楚,请提出建议并请告诉我。
提前致谢。
最佳答案
如果您所做的只是从一个供应商到另一个供应商的 ETL,那么通过 Sqoop/HDFS 是一个糟糕的选择。如果数据源自 HDFS 或打算保留在 HDFS 中,则 Sqoop 非常有意义。如果集合大到需要一个大集群用于转换阶段,我也会考虑 sqoop。但区区 2500 万条记录并不值得。
使用 SQL Server 导入时,对于大型导入,必须实现 minimally logging ,这需要批量插入。尽管 2500 万还没有大到必须使用批量选项,但 AFAIK sqoop 和 sqoop2 仍然不支持 SQL Server 的批量插入。
我推荐SSIS反而。比sqoop成熟多了,有bulk insert task并且有一个 rich transformation featureset .您的小导入完全在 SSIS 可以处理的大小范围内。
关于sql-server - Sqoop 导出到 Sql Server VS 批量插入到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24217363/
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
我有一个放在lib/network中的类:moduleNetworkApiclassNetworkProxyendend然后在另一个类中,我引用了这个类:network_proxy=::NetworkApi::NetworkProxy.new(params)一切都在我的开发环境中正常运行,但是当我部署到服务器时,我在上面一行收到错误消息:NameError:uninitializedconstantNetworkApi::NetworkProxy我不知道为什么会出现这个奇怪的错误。请告诉我为什么。 最佳答案 请注意Rails5dis
在我的用户模型中,我有一堆属性,例如is_foos_admin和is_bars_admin,它们决定允许用户编辑哪些类型的记录。我想干掉我的编辑链接,目前看起来像这样:'edit'ifcurrent_user.is_foos_admin?%>...'edit'ifcurrent_user.is_bars_admin?%>我想做一个帮助程序,让我传入一个foo或bar并返回一个链接来编辑它,就像这样:助手可能看起来像这样(这不起作用):defedit_link_for(thing)ifcurrent_user.is_things_admin?link_to'Edit',edit_poly
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我有以下现有的Dog对象数组,它们按age属性排序:classDogattr_accessor:agedefinitialize(age)@age=ageendenddogs=[Dog.new(1),Dog.new(4),Dog.new(10)]我现在想插入一条新的狗记录,并将它放在数组中的正确位置。假设我想插入这个对象:another_dog=Dog.new(8)我想把它插入到数组中,让它成为数组中的第三项。这是一个人为的示例,旨在演示我特别想如何将一个项目插入到现有的有序数组中。我意识到我可以创建一个全新的数组并重新对所有对象进行排序,但这不是我的目标。谢谢!
在字符串连接中,是否可以直接在语句中包含条件?在下面的示例中,我希望仅当dear列表不为空时才连接"mydear"。dear=""string="hello"+"mydear"unlessdear.empty?+",goodmorning!"但是结果报错:undefinedmethod'+'fortrue我知道另一种方法是在这条语句之前定义一个额外的变量,但我想避免这种情况。 最佳答案 使用插值而不是连接更容易和更具可读性:dear=""string="hello#{'mydear'unlessdear.empty?},goodmo