1

我有一个管道分隔的文本文件,它是360GB压缩文件(gzip)。 它有超过1,620列。我不能准确显示字段名,但这里是它基本上是什么:在aws的360gb文本文件中将1620列转换为360gb文本文件中的行

primary_key|property1_name|property1_value|property800_name|property800_value 
12345|is_male|1|is_college_educated|1 

严重的是,有超过这些属性名称/值字段800。 大约有2.8亿行。 该文件位于S3存储桶中。 我需要将数据导入Redshift,但Redshift中的列限制为1,600。

用户希望我转发数据。例如:

primary_key|key|value 
12345|is_male|1 
12345|is_college_educated|1 

什么是转动的AWS环境中的文件的好办法?数据在一个文件中,但我计划将数据分成许多不同的文件以允许并行处理。

我考虑过使用雅典娜。我找不到任何说明雅典娜允许的最大列数的内容。但是,我发现了一个关于普雷斯托(Presto)(雅典娜是基于此)的网页,上面写着“没有确切的硬限制,但我们已经看到有超过几千的东西突破。”(https://groups.google.com/forum/#!topic/presto-users/7tv8l6MsbzI)。

谢谢。

回答

1

我从AWS的大部分时间里所了解到的,如果达到极限,就会以错误的方式或不以可扩展的方式进行。大多数时候架构师的设计都是考虑到可扩展性和性能。

我们有类似的问题,有2000列。这是我们如何解决它。

  1. 将文件分成20个不同的表,每个100 + 1(主键)列。
  2. 在单个查询中对所有这些表进行选择以返回所需的所有数据。
  3. 如果您说您希望查看选择中的所有1600列,那么业务用户正在查看错误的列以进行分析甚至是机器学习。

要加载10TB +数据我们已经将数据分割成多个文件,并在并行加载它们,装载这种方式也较快。

在雅典娜和红移之间,表现是唯一的区别。其余的都是一样的。红移比雅典娜表现更好。初始加载时间和扫描时间高于红移。

希望它有帮助。

2

首先,调整您的数据,然后加载到Redshift。

更详细地,所述步骤是:

  1. (使用EMR或可能AWS胶),其读取在 源S3数据并写出(到不同的S3文件夹)枢转的运行火花作业 版本。通过这个我的意思是如果你有800个值对,那么你会 写出800行。同时,您可以将文件分成多个部分以启用并行加载。
  2. “COPY”将此数据转化为Redshift