首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Kinesis或Crawler要在我的数据中创建分区?

为什么Kinesis或Crawler要在我的数据中创建分区?
EN

Stack Overflow用户
提问于 2022-07-26 18:44:01
回答 1查看 87关注 0票数 0

上下文:根据胶水模式,我使用动态技术将来自lambda的数据流到一个S3桶中。然后,我在我的S3桶上运行一个爬虫来编目我的数据。我的数据,当写入运动消防软管时,有以下属性:'dataset_datetime,attr1,attr2,attr3,attr2 4.‘。我没有在从lambda编写的数据中,在我的运动消防软管中,也没有在我的胶水目录中定义任何分区。但是,当数据存储在我的S3桶中时,数据存储在以下dir结构中:

-year -month -day -hour -dataFile.parquet

然后,当我在上面运行我的爬虫时,我的爬虫会创建4个额外的分区键,这些键映射到年、月、日和小时。我不希望这些属性被创建..。

问:为什么胶水爬虫要创建这些附加属性,我如何阻止它创建它们?或者,如何防止动态在S3中创建上面的dir结构,而只是转储带有时间戳的文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-27 15:27:54

为什么Kinesis或Crawler要在我的数据中创建分区?

为了澄清,Kinesis在将数据写入S3时正在对其进行分区。默认行为是通过yearmonthdayhour对数据进行分区。

为什么胶水爬虫要创建这些附加属性,我如何阻止它创建它们?

Glue Crawler基于正在爬行的数据的架构创建分区(或表)。如果包含路径中的文件的模式类似,那么爬虫将为每个子文件夹创建一个表,其中包含从包含路径到文件的每个子文件夹的分区。

示例:如果include paths3://<bucket>/prefix/,而file1.parquetfile2.parquet有类似的模式,那么爬虫将创建一个包含4个分区列的表( 2022子文件夹1列,07子文件夹1列,等等)。

代码语言:javascript
复制
s3://<bucket>/prefix/2022/07/27/08/file1.parquet
s3://<bucket>/prefix/2022/07/27/09/file2.parquet

不能直接阻止爬虫创建分区。您可以操作包含路径以深入子文件夹目录(例如,将包含路径设置为s3://<bucket>/prefix/2022/07/27/08),这将根据包含路径的深度阻止分区的创建。但是,这可能不是您想要做的,因为它将导致创建多个表。

参考资料:爬虫如何确定何时创建分区?(AWS)

或者,如何防止动态在S3中创建上面的dir结构,而只是转储带有时间戳的文件?

您可以通过动态分区实现您想要的结果。动态分区允许您覆盖默认的year/month/day/hour分区。如果您的模式有一些静态值字段,理论上可以将Firehose配置为基于该字段对数据进行分区,然后配置Glue Crawler include path以包含该分区子文件夹。

示例:将消防软管配置为基于static_field模式动态划分数据(static_field始终具有相同的值)。如果Glue Crawler 包含路径设置为s3://<bucket>/static_field=value/,那么将创建一个表,其中只包含模式中的列(没有分区)。

代码语言:javascript
复制
s3://<bucket>/static_field=value/file1.parquet
s3://<bucket>/static_field=value/file2.parquet

参考资料:动态数据防火墙(AWS)中的动态分区

建议:有几种不同的操作数据/分区的方法。我的建议是,不要违背火龙带和Glue Crawler的默认行为。相反,请考虑如何从此数据的客户端/使用者中抽象分区实现。例如,创建一个排除分区列的物化视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73128328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档