AWS Spectrum 真的需要 = in s3 location 才能将其理解为 hive 格式吗?
Posted
技术标签:
【中文标题】AWS Spectrum 真的需要 = in s3 location 才能将其理解为 hive 格式吗?【英文标题】:Do AWS Spectrum really need = in s3 location to understand it as hive format? 【发布时间】:2021-03-02 15:09:21 【问题描述】:我用spectrum
运行了一些测试。
我创建了两个AWS Glue crawler
。
第一个名为hive-tst
的扫描:
s3://hive-test/type='a'/year='2021'/month='01'
s3://hive-test/type='b'/year='2021'/month='01'
s3://hive-test/type='c'/year='2021'/month='01'
s3://hive-test/type='d'/year='2021'/month='01'
s3://hive-test/type='e'/year='2021'/month='01'
第二个扫描:
s3://non-hive-test/a/2021/01
s3://non-hive-test/b/2021/01
s3://non-hive-test/c/2021/01
s3://non-hive-test/d/2021/01
s3://non-hive-test/e/2021/01
每个bucket分区都有两个文件,两个文件都是parquet
文件,大小为50mb。
然后我运行一个查询每个spectrum
表的第一个分区的测试:
select distinct event from test.hive_tst;
花了 8s 272
select distinct partition_0 from test.nonhive_tst;
耗时 8s 66ms
所以添加=
似乎并没有提高性能。
还检查了两个表在分区中都有Hive
格式。
select *
from svv_external_partitions
where schemaname='test'
and tablename='hive_tst';
values | location | input_format | output_format | serialization_lib |
---|---|---|---|---|
["a","2021","01"] | s3://hive-test/event=a/year=2021/month=01/ | org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat | org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat | org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe |
select *
from svv_external_partitions
where schemaname='test'
and tablename='nonhive_tst';
values | location | input_format | output_format | serialization_lib |
---|---|---|---|---|
["a","2021","01"] | s3://hive-test/a/2021/01/ | org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat | org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat | org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe |
也许文件夹中的数据量不足以测试它,但使用svv_external_partitions
的所有内容、执行时间和分区格式似乎都一样。
那么问题是:
AWS Spectrum 真的需要在 s3 位置中将 = 理解为 hive 格式吗?
【问题讨论】:
两个存储桶的分区名称及其值之间都有=
。哪里应该有区别?顺便说一句,我不希望 '
围绕这些值。
@luk2302 输入错误,已修复
【参考方案1】:
最后,经过大量搜索和阅读,我得出一个结论:
S3
两个桶都有分区,当我们使用AWS Glue
时,所有分区都会自动添加。
唯一的区别是year=2020
这样的前缀对应于hive命名约定,所以AWS Glue
在添加分区时知道如何处理,然后分区有一个漂亮的名字比如year
而不是@987654328 @。
然后,回答:AWS Spectrum 真的需要在 s3 位置将 = 理解为 hive 格式吗?
不,您不需要将其理解为hive
格式,而是通过Hive
命名约定来理解它
来源
-
上面我自己的测试
AWS Glue partitioned data post
Hive naming convention on S3
【讨论】:
以上是关于AWS Spectrum 真的需要 = in s3 location 才能将其理解为 hive 格式吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换
AWS Spectrum 为 AWS Glue 生成的镶木地板文件提供空白结果
如何通过 AWS Quicksight 连接到 Redshift Spectrum 上的外部架构/表?