hive-date分区表-s3中混合日期的流数据

hec6srdp  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(450)

我在使用配置单元分区表方面有丰富的经验。我用Hive2.x。我正在面试一个大数据解决方案架构师的职位,我被问到了下面的问题。
问题:如何在按日期分区的配置单元表中接收流数据?流数据首先存储在s3 bucket中,然后加载到hive中。尽管s3 bucket名称有一个日期标识符,比如s3\u insect\u yyyymmdd,但是内容可能有一个以上的日期的数据。
我的回答是:由于内容可能有一个以上的日期,创建外部表可能是不可能的,因为我们希望读取文件并根据日期分发文件。我建议我们首先在没有分区的外部暂存表中加载s3 bucket,然后使用动态分区设置加载/插入最终日期分区表,动态分区设置将数据分发到正确的分区目录。
面试官说我的答案不正确,我很想知道正确答案是什么,但时间不够了。
我的回答中唯一需要注意的是,随着时间的推移,分区的日期目录将有多个小文件,这些文件可能会导致小文件问题,这些问题总是可以通过批维护过程来处理。
处理这种情况的其他/正确选项是什么?
谢谢。

3j86kqsm

3j86kqsm1#

这取决于要求。
据我所知,如果一个文件或文件夹中的s3\u insect\u yyymmdd文件可以包含多个日期,那么有些事件会在第二天甚至更晚的时候加载。这是很常见的情况。
摄入日期和事件日期是两个不同的日期。将摄取的文件放入按摄取日期(lz)分区的表中。您可以跟踪初始数据。如果可以重新处理,则使用摄取日期作为重新处理lz表的书签。
然后安排一个进程,该进程将占用摄取日期的最后两天或更长时间,并加载到按事件\日期分区的表中。最后一天总是不完整的,可能您需要将回溯期增加到3天甚至更多的摄取天(使用摄取日期>=当前摄取日期-2天筛选器),这取决于摄取可以加载事件日期的回溯日期。在这个过程中,您将使用按事件日期的动态分区,并应用一些逻辑清理等,然后加载到ods或dm中。
这个方法和你提议的非常相似。不同的是在第一个表中,应该对它进行分区,以允许您以增量方式处理数据,并在需要更改逻辑或上游数据也在lz中重述和重新加载时进行轻松重述。

相关问题