【问题标题】:DataType issue from Synapse to Delta table in Databricks?从 Synapse 到 Databricks 中的 Delta 表的 DataType 问题?
【发布时间】:2021-12-15 04:42:11
【问题描述】:
  1. 将数据从 Synapse 复制到托管增量表。
  2. 我们启用了暂存并将数据从突触复制到托管增量表。
  3. 我们在突触中有一些日期列,并且在 delta 表中定义了相同的架构。
  4. 我们使用数据流设计了简单的管道,因为源是突触,而接收器是增量文件,但是在转换所有日期列时会在运行时更改为时间戳。

【问题讨论】:

  • 从突触到镶木地板文件的所有日期列都更改为时间戳。如何在映射数据流中克服这个问题

标签: pyspark azure-data-factory azure-data-factory-2 azure-databricks delta-lake


【解决方案1】:

在 Synapse 读取由 Azure 数据工厂数据流生成的 parquet 文件时,我遇到了类似的问题。在我的情况下,它使用的是 DATE 数据类型而不是 DATETIME2 数据类型,但我相信同样的问题可能适用。

如果您在 ADF 中输入类似 toDate('0001-01-01') 的日期,则日期“0000-12-30”实际上会记录到 parquet 文件中。这不是一个合法的日期,因为没有第 0 年(我们直接从公元前 1 年到公元 1 年)。该工具确定是否可以读取。 ADF 数据流会很高兴地读取它(如“0000-12-30”),但 Synapse 会发出错误消息“为列类型 DATE 插入值到批处理失败。”

但是,如果您在写入时使用 toDate('0001-01-03'),它将以 '0001-01-01' 的形式写入 parquet 文件,Synapse 将完美地读取它。此问题的原因是 ADF 无法准确处理从 1582 年开始的儒略历到公历的转换。在我看来,这是一个错误。支持 0001-01-01 HH:mm:ss 是保存无日期时间的最合理方法,因此非常受欢迎。 ToDate('1582-01-01') -> '1582-01-11', 然而 toDate('1583-01-01') -> '1583-01-01'

无服务器 Synapse SQL 池的查询 Delta Lake 格式现在采用 公开预览。

请注意,此预览版是在没有服务级别协议的情况下提供的,不适合生产工作负载。某些功能可能不受支持或功能有限。

此功能处于公开预览阶段,已知各种错误和限制。检查Synapse serverless SQL pool self-help page 是否存在已知困难。

有关详细信息,请参阅使用无服务器 SQL 池的 Azure Synapse Analytics 中的 Query Delta Lake files(预览版)。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2019-06-24
    • 2022-11-05
    • 2021-09-29
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多