美文网首页
5.3sqoop对语义的导出

5.3sqoop对语义的导出

作者: NEO_X | 来源:发表于2019-06-09 11:17 被阅读0次

    Apache Sqoop Cookbook 英文版-翻译学习!!
    更多信息https://blue-shadow.top/

    5.3对语义的导出

    问题

    需要确保Sqoop可以将Hadoop中的所有数据导出到数据库中, 或者不导出任何数据(也就是说, 目标表将保持为空)。

    解决方案

    在对实际表进行更改之前, 可以使用临时表先将数据加载到临时表中。临时表名称是通过--staging-table参数指定的,在下面的示例中, 我们将其设置为 staging_cities:

    sqoop export \
    --connect jdbc:mysql://mysql.example.com/sqoop \
    --username sqoop \
    --password sqoop \
    --table cities \
    --staging-table staging_cities
    

    <h3>讨论</h3>
    使用临时表时, Sqoop 将首先将所有数据导出到此临时表中, 而不是参数表中存在的主表。如果且仅当所有并行任务成功传输数据, Sqoop 将打开一个新事务, 以便
    将数据从临时表移动到最终目标。一方面, 此方法保证了导出操作的全部或全部语义, 但也暴露了数据库端的其他限制。

    由于 Sqoop 将将数据导出到临时表中, 然后将其移动到最后一个表中, 因此有一段时间内, 所有数据都存储在数据库中两次 (临时表中的一个副本和最后一个表中的
    一个拷贝)。为了使用此方法, 系统上必须有足够的可用空间来容纳两个副本。由于数据首先加载位置, 然后移到最后一个表中, 所以使用临时表总是比直接导出到最
    终表的速度慢。

    Sqoop 要求临时表的结构与目标表的构造相同。列数及其类型必须相同;否则,导出操作将失败。其他特性没有强制执行, 因为Sqoop使用户能够利用高级数据库功能。
    可以将临时表存储在不同的逻辑数据库 (在同一物理框中) 或其他文件组中。某些扩展属性不会对 Sqoop 产生影响: 目标表可能已分区, 而临时表可能不存在, 或者
    两个表都可能使用不同的存储引擎。

    临时表不是由 Sqoop 自动创建的, 必须在启动导出过程之前存在。此外, 它需要是空的, 以便以一致的数据结束。可以指定参数--清除临时表以指示 Sqoop 自动清
    除临时表。如果数据库支持, Sqoop将使用截断操作尽快清理临时表

    相关文章

      网友评论

          本文标题:5.3sqoop对语义的导出

          本文链接:https://www.haomeiwen.com/subject/urwcxctx.html