我有一个数据湖存储帐户。我有一个充满包含 JSON 格式数据的文件的目录,其中包括一些包含 ISO 8601 格式时间的字符串值,即:{ "reading_time": "2008-09-15T15:53:00.91077" }
现在,当我使用数据工厂创建管道并使用这些 JSON 文件作为输入数据集时,它会看到以下值reading_time
采用典型的美国格式:"9/15/2008 3:53:00 PM"
。具体来说,当我尝试填充时收到此消息DateTime
输出数据集中的字段:
列“reports.reading_time”包含无效值“9/15/2008 3:53:00 PM”。无法将“9/15/2008 3:53:00 PM”转换为类型“DateTime”
我想嘿,如果我告诉我的输入数据集特别期望 ISO 输入日期怎么办?所以我在我的管道规范中尝试了这个:
"datasets": [
{
"name": "ImprovedInputDataset",
"properties": {
"structure": [
{
"name": "reports.reading_time",
"type": "Datetime",
"format": "ISO"
}
]
}
}
}
]
我对自己收到的略有不同的错误消息印象非常深刻(请参阅最后的“格式为‘ISO’”):
列“reports.reading_time”包含无效值“9/15/2008 3:53:00 PM”。无法将“9/15/2008 3:53:00 PM”转换为格式为“ISO”的类型“DateTime”
长话短说,似乎有什么东西注意到了我原始输入中的 ISO 日期格式,并给我带来了可疑的“帮助”,将其转换为美国风格的日期字符串before我的管道可以看到它。我在 Azure 在线文档中找不到任何内容来准确解释在管道规范执行之前我的输入数据集会发生什么情况。
如果有人a)向我解释是什么将我的ISO日期/时间字符串转换为美国类型的日期/时间字符串以及如何更正它,我将不胜感激;或者 b) 向我指出有关“预处理”的文档,该文档在运行管道规范之前必须在数据工厂内进行。
我可以重现此问题,但使用“String”数据类型作为输入数据集使其正常工作。您也可以不指定数据类型,例如
{
"name": "InputDataset-9ad",
"properties": {
"structure": [
{
"name": "reading_time"
}
],
...
这符合我目前的想法,即 JSON 本身没有日期时间数据类型。文档 https://learn.microsoft.com/en-us/azure/data-factory/data-factory-azure-blob-connector#specifying-structure-definition-for-rectangular-datasets建议格式为 .net 格式,“ISO”将永远不起作用。我花了一些时间尝试调试许多不同的日期格式,例如“yyyy-MM-ddTHH:mm:ss.fffffff”,但它们都不起作用。我的猜测是,要么 JSON 根本不支持日期时间,要么它有问题/“T”有问题,并且基本上忽略格式并默认为某些内容,在您的示例中看起来像“en-US”。
我确实发现大多数日期格式在不指定结构的情况下“正常工作”。如果您确实有一些非国际化或不可移植的内容,例如“01/04/2017”(是 4 月 1 日还是 1 月 4 日?),那么解决方法是将其作为字符串导入到临时表中并从那里进行转换。
我确实有一个内部新闻组未解决的问题,如果我收到任何进一步的信息,我将更新这篇文章。注意我不在微软工作。
HTH
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)