数据类型问题从Synapse到Delta表在Databricks?


  1. 从Synapse复制数据到Managed Delta表
  2. 我们启用了暂存和复制数据从突触到托管增量表。
  3. 我们在突触中有一些日期列,在增量表中定义了相同的模式。
  4. 我们设计了一个简单的管道,使用数据流作为源是突触,接收是增量文件,但在转换所有的日期列时,在运行时更改为时间戳。

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

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

但是,如果在写入时使用toDate('0001-01-03'),它将以'0001-01-01'的形式写入parquet文件,Synapse将完全正常地读取它。造成这个问题的原因是ADF不能准确地处理从1582年开始的从儒略历到公历的转换。在我看来,这是一个bug。支持0001-01-01 HH:mm:ss是节省无日期时间的最合理的方法,因此非常受欢迎。迄今为止,("1582-01-01")→'1582-01-11',但至今('1583-01-01')->"1583-01-01">

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

请记住,这个预览版本没有提供服务水平协议,不适合生产工作负载。某些功能可能不被支持或功能有限。

此功能处于公开预览状态,并且已知各种错误和限制。查看Synapse无服务器SQL池自助页面,了解已知的困难。

有关详细信息,请参阅使用无服务器SQL池在Azure Synapse Analytics中查询Delta Lake文件(预览)。

相关内容

  • 没有找到相关文章

最新更新