动态改变雅典娜分区投影的范围
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 个分区(dt
和 client
)
到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
我想了解如何准确地使用 Athena Partition Projection 来处理最新的滚动动态时间段,例如 3 个月。据我了解,我需要在 table 创建时指定静态日期范围。随着时间的推移,我将如何更新这个日期范围?我是否需要更改 table 以使其保持最新状态?
示例:
数据存储为 s3://bucket-foo/path-bar/dt=2020-01-01/client=acme
,有 2 个分区(dt
和 client
)
到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