配置日期分区表-具有混合日期的S3中的流数据

问题描述 投票:1回答:1

我在使用Hive分区表方面拥有丰富的经验。我使用Hive2.X。我正在面试一个大数据解决方案架构师的角色,并被问到以下问题。

问题:您如何在按日期划分的Hive表中摄取流数据?流数据首先存储在S3存储桶中,然后加载到Hive。尽管S3存储桶名称具有日期标识符,例如S3_ingest_YYYYMMDD,但是内容中的数据可能超过1个日期。

我的回答:由于内容的日期可能超过1个,因此可能无法创建外部表,因为我们要读取文件并根据日期分发文件。我建议我们首先将S3存储桶加载到没有分区的外部登台表中,然后使用“动态分区”设置加载/插入最终日期分区表,该设置会将数据动态分配到正确的分区目录。

面试官说我的答案不正确,我很好奇知道正确的答案是什么,但是时间不够用。

我唯一要注意的是,随着时间的推移,分区日期目录将具有多个小文件,这些文件可能导致小文件问题,始终可以通过批处理维护过程来处理。

处理此情况的其他/正确选项有哪些?

谢谢。

amazon-s3 hive streaming database-partitioning hadoop-partitioning
1个回答
1
投票

取决于要求。

根据我的理解,如果一个文件或包含S3_ingest_YYYYMMDD文件的文件夹可以包含多个日期,那么某些事件会在第二天甚至以后加载。这是很常见的情况。

摄取日期和事件日期是两个不同的日期。将提取的文件放入按提取日期(LZ)划分的表中。您可以跟踪初始数据。如果可以进行重新处理,则将ingestion_date用作重新处理LZ表的书签。

然后安排一个过程,该过程将花费摄取日期的最后两天或更长时间,并将其加载到按event_date分区的表中。最后一天总是不完整,可能是您需要将回溯期增加到3或更多摄取天数(使用ingestion_date> = current_date-2天过滤器),这取决于多少次追溯摄取日期可以加载事件日期。在此过程中,您将按event_date使用动态分区,并应用一些逻辑-清理等并将其加载到ODS或DM中。

此方法与您建议的方法非常相似。区别在于第一个表中,应该对其进行分区,以使您可以增量方式处理数据,并且如果需要更改逻辑或者上游数据也已在LZ中重新加载并重新加载,则可以轻松地重述。

© www.soinside.com 2019 - 2024. All rights reserved.