我们将 S3 数据存储用于一天内摄取的所有事件数据。每天的事件数据以 parquet 格式存储。出于分析目的,我们使用 AWS GLUE 和 Athena 来查询事件数据。每个事件都有特定的属性,这些属性将继续成为 AWS Athena 中的一个列
最近随着系统中摄取新事件,新列已添加到存储在 S3 中的文件中。我已经使用这些配置重新运行 GLUE 爬虫,以便为 S3 中的所有文件(按日期分区)提供单一模式。
我们面临的问题是查询数据中模式更改发生在其间的日期范围。例如,我们正在尝试这些查询。
SELECT *
FROM
"data_lake"."events_version1_0"
where
"event_dt" >= CAST('2023-03-03' AS DATE)
and "event_dt" <= CAST('2023-03-05' AS DATE)
limit 20;
上面的查询运行良好,下面的查询也是如此 -
SELECT *
FROM
"data_lake"."events_version1_0"
WHERE
event_dt >= CAST('2023-03-15' AS DATE)
AND
event_dt <= CAST('2023-03-18' AS DATE)
但是我们在触发这个查询时遇到错误 -
SELECT *
FROM
"data_lake"."events_version1_0"
WHERE
event_dt >= CAST('2023-03-03' AS DATE)
AND
event_dt <= CAST('2023-03-06' AS DATE)
日期
2023-03-06
的 S3 文件具有新的事件数据,因此具有不同的架构(2023-03-06
之前的 S3 文件具有不同的架构)。我们得到的错误是
HIVE_CURSOR_ERROR: Failed to read Parquet file: s3://data-lake/Events/Version1-0/2023-03-06/events/data.parquet
This query ran against the "data_lake" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 3c42f396-f1c4-4f38-b32e-48a3bf2405a8