【问题标题】:Update datatype of parquet file without affecting existing data在不影响现有数据的情况下更新 parquet 文件的数据类型
【发布时间】:2021-09-10 00:17:55
【问题描述】:

我有一个包含多列的镶木地板文件,其中之一是例如:带有数据类型时间戳的 col A。在 S3 路径上创建了外部 Athena 非分区表。我想将 col A 的数据类型从 timestamp 更改为 date ,而不必重新运行或影响现有数据。

有什么办法吗?

谢谢!

【问题讨论】:

    标签: apache-spark pyspark parquet amazon-athena


    【解决方案1】:

    如果您不添加新文件,或者新文件也带有时间戳,请在使用时进行投射:

    SELECT DATE(a) AS a, ... FROM table
    

    如果您将拥有带有日期列的新文件,那就更复杂了。您不能有混合类型的列。它必须是日期或时间戳。

    一种解决方法是创建一个名为 a2 且具有日期类型的新列,在新文件中使用它,并将其添加到胶合模式中。 Glue 可以处理缺失的列,因此旧文件中的一行将填充 a,但空 a2,反之亦然。

    从现在开始,您可以将所有文件用作:

    SELECT COALESCE(DATE(a), a2) AS a, ... FROM table
    

    但我更建议保持文件整洁,并使用一些 ETL 工具将旧 parquet 文件转换为当前架构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多