Azure Data Lake Analytics:将日期输出为+0000而非-0800
解决ADLA导出CSV时datetime时区自动转换的问题
这个问题其实挺常见的——Azure Data Lake Analytics的Outputters.Text()输出器默认会把datetime类型的值转换为集群所在的本地时区(绝大多数情况下是太平洋标准时间,也就是UTC-8),哪怕你的原始输入是UTC+0的时间。因为U-SQL里的datetime类型本身是不带时区信息的,输出时会自动套用集群的时区来格式化,这就是为什么你看到时间偏移变成了-0800。
想要控制日期输出格式,有几种可行的方法:
1. 强制输出UTC格式的时间字符串
在导出前,把datetime列显式转换为带UTC标记的字符串,这样就能保留原始的UTC时间:
SELECT -- 用ToString指定UTC格式,Z代表UTC时区 YourDateTimeColumn.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ") AS UtcFormattedDate, -- 其他需要导出的列 INTO @data FROM YourSourceTable; OUTPUT @data TO @"/data.csv" USING Outputters.Text(quoting : false, delimiter : '|');
这样输出的日期会是类似2018-01-15T12:20:13.0000000Z的格式,明确标记为UTC时间。
2. 自定义任意日期格式
如果不需要时区偏移,只想输出固定格式的纯日期时间字符串,可以直接指定你想要的格式:
SELECT -- 自定义格式,比如不带时区的ISO格式 YourDateTimeColumn.ToString("yyyy-MM-ddTHH:mm:ss.fffffff") AS CustomFormattedDate, -- 其他列 INTO @data FROM YourSourceTable;
这种方式输出的时间不会带有任何时区偏移,完全按照你指定的格式生成。
3. 改用datetimeoffset类型存储(如果可行)
如果你的数据源支持,建议把列类型改为datetimeoffset,这种类型会存储时区信息。当你导出datetimeoffset类型的数据时,Outputters.Text()会保留原始的时区偏移,不会自动转换为集群时区。
内容的提问来源于stack exchange,提问作者Neil P
相关产品推荐
相关产品推荐

