动态改变雅典娜分区投影的范围

Dynamically alter range of Athena Partition Projection

我想了解如何准确地使用 Athena Partition Projection 来处理最新的滚动动态时间段,例如 3 个月。据我了解,我需要在 table 创建时指定静态日期范围。随着时间的推移,我将如何更新这个日期范围?我是否需要更改 table 以使其保持最新状态?

示例: 数据存储为 s3://bucket-foo/path-bar/dt=2020-01-01/client=acme,有 2 个分区(dtclient) 到2020年4月,我不是特别在意2020年1月的数据。

这与我只更改 table 然后删除 old/obsolete 分区的传统 Athena 分区有何不同?不知道我是不是把这些概念搞混了

在阅读了很多次文档后,它非常简单。

日期类型的动态开始和结束:"projection.dt.range": "NOW-90DAYS,NOW"

因为我总是从每个客户(而不是 set/range 个客户)获取数据,所以我可以这样做:"projection.client.type": "injected"

这个 CloudFormation 模板对我有用:

FooTable:
    Type: AWS::Glue::Table
    DependsOn: FooDB
    Properties:
      DatabaseName: !Ref FooDB
      CatalogId: !Ref AWS::AccountId
      TableInput:
        Name: FooTable
        Parameters: {
          "classification" : "json",
          "projection.enabled": true,
          "projection.client.type": "injected",
          "projection.dt.type": "date",
          "projection.dt.format": "yyyy-MM-dd",
          "projection.dt.range": "NOW-90DAYS,NOW",
          "projection.dt.interval.unit": "DAYS",
          "projection.dt.interval": 1,
          "storage.location.template": "s3://BUCKET_NAME/clients/client=${client}/dt=${dt}"
        }
        TableType: EXTERNAL_TABLE
        PartitionKeys:
          - Name: client
            Type: string
          - Name: dt
            Type: string
        StorageDescriptor:
          Location: s3://BUCKET_NAME/clients/
          InputFormat: org.apache.hadoop.mapred.TextInputFormat
          OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
          SerdeInfo:
            SerializationLibrary: org.openx.data.jsonserde.JsonSerDe
            Parameters: { "serialization.format": 1 }
          Columns:
            - Name: ...
              Type: string
            - Name: ...
              Type: string