Hadoop 将数据插入Greenplum物理表

Hadoop 将数据插入Greenplum物理表,hadoop,hive,greenplum,Hadoop,Hive,Greenplum,我试图将数据从Greenplum外部表插入到物理(或普通表)表中。外部表指向一个包含大约1.32亿数据的配置单元文件。但是,当我的外部表仅显示6600万个计数时。因此,当插入到物理表中时,我只插入了6600万条记录。为什么会这样?是否与外部表的表属性有关?如果是这样,如何计算?通过hive计算时,您会看到6600万条记录。假设您刚刚做了一次count(*),这应该足够严格了 现在你不满意这个,因为你有1.32亿“数据”,正好是两倍 我不会担心任何只允许加载前6600万条记录的设置,所以让我们看看

我试图将数据从Greenplum外部表插入到物理(或普通表)表中。外部表指向一个包含大约1.32亿数据的配置单元文件。但是,当我的外部表仅显示6600万个计数时。因此,当插入到物理表中时,我只插入了6600万条记录。为什么会这样?是否与外部表的表属性有关?如果是这样,如何计算?

通过hive计算时,您会看到6600万条记录。假设您刚刚做了一次
count(*)
,这应该足够严格了

现在你不满意这个,因为你有1.32亿“数据”,正好是两倍

我不会担心任何只允许加载前6600万条记录的设置,所以让我们看看可能的嫌疑犯

  • 两个“数据”(行?)对应一条记录
  • 数据中有一些奇怪的东西,当您将其作为一个表进行评估时,会丢失一半的记录。(可能是6600万行之后的中断,也可能是奇怪的行尾)
  • 实际上并没有加载所有的输入文件
  • 仔细的检查应该能让你找到真正的罪犯。如果您不知道从哪里开始:

  • 查看文件中的第一行和最后几行,并将其完整内容与表中的第一行和最后几行记录进行比较
  • 检查输出中是否表示每个输入文件中的行
  • 如果确定缺少某些数据,请尝试推断输入文件中应该缺少哪一行,并查看是否可以在表中找到该行

  • 您的蜂巢表终于分区了!这个问题似乎已经解决了。我继续对此进行研究,问题似乎是w.r.t数据冗余。(正如丹尼斯在前面的回答中所建议的)。该表具有重复的值(在所有列上重复)。每个记录都有另外一组11个重复记录(这在我的情况下是可以接受的)。为了避免冗余,我又添加了一列作为主键(自动生成的代理键)。现在,当我尝试从外部表加载greenplum物理表时,我可以看到所有1.32亿条插入的记录,没有任何问题


    然而,尽管我的问题已经解决,但为了进行更深入的分析,问题仍然是阈值(6600万条记录)。一个新的问题将发布在这个页面上

    我不认为这是双重数据的问题。对于有1亿数据的表,我也面临同样的问题。当我尝试将数据从具有100百万行的外部表插入到普通表时。我看到只插入了6600万个。@SriBharath当您只尝试插入10个“数据”时会发生什么?如果你真的复制了你的输入文件并尝试插入2.64亿,会发生什么?当我插入10个时,我没有问题。类似地,Data insert可以完美地处理1000万个数据。任何超过6600万的数据量都不会被插入。2.64亿数据也是如此。当我的文件被复制到2.64亿,并试图插入到我的外部表中时,我只看到6600万个被插入的文件。@SriBharath这太令人惊讶了。根据您分割和复制数据的方式,数据中仍然可能有某种“奇怪”的东西停止加载。假设您的表在读取后正好有N行,您能检查原始数据中的N-1到N+2行吗?--作为解决方法,您可能可以将数据拆分为不到6600万个部分,然后合并它们。或者您可以尝试使用pig以文本文件的形式加载文件。-值得一提的是:我以前使用过超过6600万行的外部表,所以这至少不是一个简单的约束。此文件似乎有问题。当我查询我的表时,它显示了1.32亿,但是当使用wc-l选项查看文件时,我只能看到3600万。知道是什么导致了这种中断吗?请显示用于确定文件大小、表大小以及从一个文件到另一个表的命令的命令。您确定配置单元表有1.32亿条记录吗?当Hive看到count(*)查询时,它将使用元数据来确定表中的行数,而不是实际计算行数。我会分析您的配置单元表,然后再次进行计数(*),以确保正确。另一个要查找的是格式不正确的行。Hive允许您将任何内容粘贴到表中,而GPDB不会出现错误。您也可以查看“坏”行。查看文档:@JonRoberts谢谢你的提示。看起来问题出在配置单元文件上。当我查询我的配置单元表时,它显示了1.32亿的计数,但是当在文件级别再次验证时,我可以看到3600万,这很奇怪。下面是我用来检查文件计数的命令。hadoop fs-cathdfs://DLDEVELOPMENT/data/wcdl/new/database_1/gpsample_table_test/*| wc-lIn配置单元,运行以下命令:“分析表_name计算列的统计信息”;然后运行“从表_name中选择计数(*)”;配置单元应在更新统计信息后显示正确的计数。欢迎使用堆栈溢出!这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时对自己的帖子发表评论,一旦你的评论足够,你就可以发表评论了。请阅读