如何解决Athena 根据 S3 中引入的分区动态查询更改
我在 S3 中对我的 DATA_BUCKET 进行了分区,其结构为
db.messages.aggregate([
{
$addFields: {
'phone_number': { "$substr": ["$Tel",4,-1] }
}
},{
$lookup: {
from: "contacts",let: { "phone": "$phone_number" },pipeline: [
{
$match: {
$expr: { $eq: ["$phone","$$phone"] }
}
}
],as: "contact"
}
},{ $unwind: "$contact" }
]);
现在我在 table_1 中有另外三个列,它们在 Athena 中显示为“partition_0”、“partition_1”和“partition_2”(分别表示年、月和日)。
到目前为止,我的应用程序正在根据表中的“time_stamp”列进行时间相关查询:
S3/DATA_BUCKET/table_1/YYYY/MM/DD/files.parquet
现在为了利用分区的性能,相应的新查询是:
select * from table_1 where time_stamp like '2023-01-17%'
问题: 由于在我的应用程序中对 time_stamp 进行了许多先前的查询,因此我不想更改它们,但仍以某种方式将这些查询转换为我的“分区类型查询”,如上所示。
在 Athena 内部有什么类似的方法吗?
TIA
解决方法
您可以使用新的“time_stamp”列从原始表创建视图。 此列从日期部分计算日期:
CREATE OR REPLACE VIEW my_view AS
SELECT mytable.col1,mytable.col2,cast(date_add('day',trans_day - 1,date_add('month',trans_month - 1,date_add('year',trans_year - 1970,from_unixtime(0)))) as Date) as time_stamp
FROM my_db.my_table mytable
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。