【问题标题】:Hive partitioning for data on s3s3 上数据的 Hive 分区
【发布时间】:2019-02-24 05:20:56
【问题描述】:

我们的数据是使用 s3://bucket/YYYY/MM/DD/HH 存储的,我们正在使用 aws firehouse 近乎实时地将镶木地板数据放到那里的位置。我可以很好地使用 AWS athena 查询数据,但是我们有一个配置单元查询集群,它在启用分区时给查询数据带来了麻烦。

这就是我正在做的事情: PARTITIONED BY ( `year` string, `month` string, `day` string, `hour` string)

当 s3 上的数据存储为 s3:bucket/YYYY/MM/DD/HH 时,这似乎不起作用

但这对s3:bucket/year=YYYY/month=MM/day=DD/hour=HH 确实有效

鉴于 firehose 严格的存储桶路径,我无法修改 s3 路径。所以我的问题是,当您的数据路径上没有明确定义的列名(例如 year = 或 month= 时,hive ddl 中正确的分区方案是什么?

【问题讨论】:

    标签: amazon-s3 hive partitioning ddl amazon-kinesis-firehose


    【解决方案1】:

    现在您可以在 firehose 中指定 S3 前缀。https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html

    myPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/
    

    【讨论】:

      【解决方案2】:

      如果无法按照 hive 命名约定获取文件夹名称,则需要手动映射所有分区

      ALTER TABLE tableName ADD PARTITION (year='YYYY') LOCATION 's3:bucket/YYYY'
      

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 2016-03-09
        • 2022-01-18
        相关资源
        最近更新 更多