Hive 中的增量/增量负载

2023-11-21

我有以下用例:

我的应用程序有一个表多年数据 in RDBMSD B。我们已经用过sqoop将数据获取到 HDFS 并加载到按以下分区的 hive 表中年、月.

现在,应用程序每天都会更新并将新记录插入 RDBMS 表中。这些更新的记录可以跨越历史月份。更新的记录和新的插入记录可以通过更新的时间戳字段来确定(它将具有当天时间戳)。

现在的问题是:如何使用这些更新的记录每天进行增量/增量加载配置单元表。

-> 我知道有一个 sqoop 功能允许增量导入。但是,仅仅新增增量进口对我们来说还不够。

因为 -

-> 我不能直接在hive表中插入这些记录(使用insert into),因为这会导致重复记录(更新记录)。

-> 同样,我不能使用插入覆盖语句,因为这些只是跨多个月的更新和插入记录。插入覆盖将删除较早的记录。

当然,最简单的选择是每天使用 sqoop 获取完整数据,但我们不想这样做,因为数据量很大。

因此,基本上我们只想完全加载那些我们已收到更新/插入记录的分区。

我们愿意探索 hive 或 sqoop 端的选项。您能告诉我们吗?

提前致谢。


对于任何基于 Hive 的系统来说,更新都是一个众所周知的难题。

一种典型的方法是两步过程

  1. 将任何已更改的数据插入到一张表中。正如您所说,更新行时这将导致重复。
  2. 定期用第一个表中的“删除重复”数据覆盖第二个表。

第二步可能会很痛苦,但确实没有办法解决。在某种程度上,您必须覆盖,因为 Hive 不进行就地更新。不过,根据您的数据,您也许能够足够巧妙地对表进行分区,以避免完全覆盖。例如,如果步骤 1 仅插入到少数分区,则只需将这些分区覆盖到第二个表中。

此外,根据访问模式,将第二个“去重”表作为视图而不具体化也是有意义的。不过,通常这只会延迟查询时间的痛苦。

我见过的唯一另一种方法是使用非常自定义的输入和输出格式。您可以在这里阅读:http://pkghosh.wordpress.com/2012/07/08/making-hive-squawk-like-a-real-database/

Owen O'Malley 也一直致力于将这个想法的一个版本添加到标准 Hive 中,但这仍在开发中:https://issues.apache.org/jira/browse/HIVE-5317

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive 中的增量/增量负载 的相关文章

随机推荐

  • 当选择下拉列表发生onchange(从数据库填充)时,如何自动提交Rails formhelper

    我的视图中有一个表单 其中有两个下拉菜单 两者都从数据库表填充 我想在任一下拉菜单上发生 onchange 事件时自动提交表单 div class act div
  • IE6 + IE7 CSS 溢出问题:隐藏; - 位置:相对;组合

    因此 我为主页创建了一个滑块 使用 jQuery 滑动一些带有标题和预告文本的图像 一切正常 我去检查 IE 发现 IE 6 和 7 完全杀死了我的滑块 css 我不明白为什么 但由于某种原因 我无法使用 Overflow hidden 隐
  • 如何知道 SoundPlayer 何时完成播放声音

    我使用以下代码在内存中动态创建频率音并异步播放该音 public static void PlayTone UInt16 frequency int msDuration UInt16 volume 16383 using var mStr
  • 购物车,可以使用Devise的会话功能吗?

    我正在编写一个电子商务网站 我需要实现购物车功能 我希望客户能够在不事先注册的情况下将产品添加到购物车 所以我想我可以通过会话来实现这一点 这可以在 Devise gem 中完成吗 还是我必须实现我自己的会话模型才能使其工作 您需要处理自己
  • SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败

    declare a varchar 40 set a 1 23e 4 declare b decimal 27 12 if isnumeric a 1 begin select b cast a as decimal 27 12 end e
  • data.frame 中的唯一/排序

    我有一个像这样的数据框 x c 01 01 01 22 22 03 03 03 35 35 y c f f f m m m m m f f df data frame spn x sex y 似乎 spn sex 1 01 f 2 01 f
  • Java 中的两个数组声明有什么区别? [复制]

    这个问题在这里已经有答案了 在我的书中 他们一直在以下两种方法之间切换声明数组的方式 int array1 1 2 3 int array2 1 2 3 我想知道两个括号的位置有什么区别 为什么当我将括号放在名称后面 例如在数组 1 中 时
  • Android - 从代码中引用当前应用的主题中的属性值

    Android 开发指南explains如何使用问号 而不是 at 来引用当前应用的主题中的属性值 有谁知道如何从代码中做到这一点 例如在定制组件中 在 XML 中 它看起来像这样 style header background 以编程方式
  • Django 自定义左外连接

    我用这个查询了 Django 模型 news News objects filter Q likes user isnull True Q likes user user extra select is liked NewsLikes me
  • 使用 PHP 将 CSV 转换为 JSON?

    我需要转换一个CSV文件到JSON在服务器上使用 PHP 我正在使用这个有效的脚本 function csvToJSON csv rows explode n csv i 0 len count rows json n data forea
  • 有办法防止 cookie 被盗吗?

    在 Web 2 0 应用程序中 许多用户通常希望保持登录状态 记住我 标志 而另一方面 他们的 cookie 可以访问非常私密的数据 有没有办法防止有人直接从计算机或通过嗅探窃取 cookie 从而使用 cookie 来访问用户的数据 始终
  • “in”运算符或 obj.hasOwnProperty(prop) 的 Big O 表示法的效率是多少

    Mozilla的网站上清楚地描述了hasOwnProperty 和in操作员 但是 它没有提供有关其效率的任何实施细节 我怀疑他们会是O 1 恒定时间 但希望看到任何可能存在的参考或测试 将我的评论变成答案 hasOwnProperty s
  • 使用自己的应用程序打开自定义文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何将文件扩展名与 C 中的当前可执行文件关联 所以 我正在申请学校 最终项目 在这个应用程序中 我有一个Project 班级 这可以保存为自定义文件 例如测试 gpr gpr 是扩展名 如何让 Wi
  • 将静态参数传递给类

    据我所知 你不能将参数传递给 C 中的静态构造函数 但是 在创建类的实例之前 我确实需要传递两个参数并将它们分配给静态字段 我该怎么办 这可能是对 工厂方法的调用 class Foo private int bar private stat
  • Python场景变化检测

    我想知道是否有人有Python和视频处理的经验 本质上 我想知道是否有任何库可以让我在视频中进行场景检测 如果没有 是否有任何可以让我将视频分成一系列帧并让我处理像素 Thanks OpenCV有 Python 绑定 我不认为它有任何内置的
  • 如果我在 PHP 中执行 print_r ,它会以垃圾形式打印数组

    如何以树状格式打印数组 使其更易于阅读 Try pre pre 它将提供 HTML 的空白策略修剪掉的正确树结构
  • Rails 当前页面?当方法为 POST 时“失败”

    我有一个非常简单的问题 我有一页报告 每个报告都有自己的选项卡 我在用着current page 以确定应突出显示哪个选项卡 当我提交任何报告时 current page 似乎不再起作用 显然是因为请求方法是POST 这是预期的行为吗cur
  • 在 OSX Catalina 上安装用于 gem 安装的 Ruby 开发工具

    我知道这个问题有很多例子 我已经完成了这些答案中的所有内容 但 4 小时后却一无所获 我正在尝试在 Catalina 10 15 7 上安装 gem 并获得非常流行的 System Library Frameworks Ruby frame
  • 如何在 WPF 中删除鼠标悬停时按钮的发光

    我在 WPF 中使用一个简单的按钮 我已经在背景上放置了按钮的图像 我的问题是 当我将鼠标指针移动到按钮时 它会获得默认发光并覆盖作为背景给出的图像
  • Hive 中的增量/增量负载

    我有以下用例 我的应用程序有一个表多年数据 in RDBMSD B 我们已经用过sqoop将数据获取到 HDFS 并加载到按以下分区的 hive 表中年 月 现在 应用程序每天都会更新并将新记录插入 RDBMS 表中 这些更新的记录可以跨越