【发布时间】:2021-09-10 00:17:55
【问题描述】:
我有一个包含多列的镶木地板文件,其中之一是例如:带有数据类型时间戳的 col A。在 S3 路径上创建了外部 Athena 非分区表。我想将 col A 的数据类型从 timestamp 更改为 date ,而不必重新运行或影响现有数据。
有什么办法吗?
谢谢!
【问题讨论】:
标签: apache-spark pyspark parquet amazon-athena
我有一个包含多列的镶木地板文件,其中之一是例如:带有数据类型时间戳的 col A。在 S3 路径上创建了外部 Athena 非分区表。我想将 col A 的数据类型从 timestamp 更改为 date ,而不必重新运行或影响现有数据。
有什么办法吗?
谢谢!
【问题讨论】:
标签: apache-spark pyspark parquet amazon-athena
如果您不添加新文件,或者新文件也带有时间戳,请在使用时进行投射:
SELECT DATE(a) AS a, ... FROM table
如果您将拥有带有日期列的新文件,那就更复杂了。您不能有混合类型的列。它必须是日期或时间戳。
一种解决方法是创建一个名为 a2 且具有日期类型的新列,在新文件中使用它,并将其添加到胶合模式中。 Glue 可以处理缺失的列,因此旧文件中的一行将填充 a,但空 a2,反之亦然。
从现在开始,您可以将所有文件用作:
SELECT COALESCE(DATE(a), a2) AS a, ... FROM table
但我更建议保持文件整洁,并使用一些 ETL 工具将旧 parquet 文件转换为当前架构。
【讨论】: