0

我正在尝试探索一个用例,例如“我们在文件中有大量数据(50B 条记录),每个文件有大约 50M 条记录,每条记录都有一个唯一标识符。文件 10 中存在的记录也可能存在于文件 100 中,但该记录的最新状态存在于文件 100 中。文件位于 AWS S3 中。

现在假设 50B 记录中的大约 1B 记录需要重新处理,一旦重新处理完成,我们需要识别曾经有这些 1B 记录的所有文件,并将这些文件的内容替换为这些 1B 唯一 ID。

挑战:目前,我们没有一个映射来告诉哪个文件包含所有唯一 ID。并且整个文件替换需要在一天内完成,这意味着我们需要并行执行。

我们已经启动了一项维护文件到唯一 ID 的映射的任务,我们需要在处理 1B 记录时加载此数据,并在此数据集中查找并确定需要内容替换的所有不同文件日期。

映射将是巨大的,因为它必须保存 50B 记录并且可能会增加,因为它是一个不断增长的系统。

有什么想法吗?

4

1 回答 1

1

您可能需要编写一个自定义脚本来对您的所有文件进行 ETL。

Amazon EMR (Hadoop) 和 Amazon Athena (Presto) 等工具非常适合处理文件中的数据。但是,您根据文件名识别最新版本数据的要求与这些工具通常处理数据的方式不兼容。(他们查看文件内部,而不是文件名。)

如果记录只是有一个额外的时间戳字段,那么 EMR 或 Presto 读取文件并输出一组新文件,每个唯一 ID(具有最新日期)只有一条记录,这将是相当简单的。

您应该让系统输出一个时间戳,而不是创建一个系统来查找文件中的唯一 ID。这样,数据不会绑定到特定文件,并且可以根据文件的内容轻松加载和转换。

我会建议:

  • 处理每个现有文件(是的,我知道你有很多!)并添加一个代表文件名的列
  • 一旦您拥有一组带有文件名列(用于识别最新记录)的新输入文件,使用Amazon Athena读取所有记录并为每个唯一 ID 输出一行(带有最新日期)。这将是一个普通的 SELECT... GROUP BY 语句,只是为了获得最新记录而稍作修改。
  • Athena 会将新文件输出到Amazon S3,其中将包含具有唯一记录的数据。这些将成为您将来执行的任何处理的源记录。
于 2017-09-05T07:22:58.217 回答