我的會話時區是澳大利亞/悉尼
如果我運行下麵的查詢我的期望是第一列和第三列應該顯示相同的值。但它並不像預期的那樣工作了1753-01-01就是時間戳。
spark.conf.set (“spark.sql.session。時區”、“澳大利亞/悉尼”)
選擇“1753-01-01 00:0:00”original_timestamp to_utc_timestamp(“1753-01-01 00:0:00”,“澳大利亞/悉尼”)to_utc_from_aest, from_utc_timestamp (to_utc_timestamp(“1753-01-01 00:0:00”、“澳大利亞/悉尼”),“澳大利亞/悉尼”)from_utc_to_aest
UNION all
選擇“2023-01-01 00:0:00”,to_utc_timestamp(“2023-01-01 00:0:00”、“澳大利亞/悉尼”),from_utc_timestamp (to_utc_timestamp(“2023-01-01 00:0:00”,“澳大利亞/悉尼”),“澳大利亞/悉尼”)
嗨@Rahul Lalwani,這個問題你麵對時間戳的1753-01-01就是與火花支持的日期範圍的限製。火花的默認日期範圍從1900年開始,和任何更早的日期可能不準確的處理。
您可以使用一個不同的時間戳在火花支持的日期範圍來解決這個限製。這裏有一個更新版本的查詢,使用“1900-01-01就是”而不是“1753-01-01就是”:
spark.conf.set (“spark.sql.session。時區”、“澳大利亞/悉尼”)SELECT '1900-01-01 00:00:00' AS original_timestamp, to_utc_timestamp('1900-01-01 00:00:00', 'Australia/Sydney') AS to_utc_from_aest, from_utc_timestamp(to_utc_timestamp('1900-01-01 00:00:00', 'Australia/Sydney'), 'Australia/Sydney') AS from_utc_to_aest UNION ALL SELECT '2023-01-01 00:00:00', to_utc_timestamp('2023-01-01 00:00:00', 'Australia/Sydney'), from_utc_timestamp(to_utc_timestamp('2023-01-01 00:00:00', 'Australia/Sydney'), 'Australia/Sydney')
通過使用“1900-01-01”就是,您應該看到第一和第三列結果顯示相同的值。
嗨@Rahul Lalwani(客戶),
在集群spark.sql.datetime.java8API互動。當我們允許啟用被禁用spark.sql.datetime.java8API。啟用為true,我們可以看到crt值1753-01-01。
使上述配置的原因是因為在日期和時間戳字符串解析通過使用Java 8次API和火花的會話時區。在改變之前,收集日期/時間戳值作為遺產類型“java.sql.Date”/“java.sql。時間戳”,這種類型的值不尊重配置的spark.sql.session.timeZone”。有一致的視圖,用戶必須保持JVM時區和火花的會話時區同步。
所以請支持spark.sql.datetime.java8API。能真正的正確的時間格式。
5分鍾的差異的原因是由於時區的標準化,直到1895年,抵消UTC + 10:05帖子,我。從1896年開始偏移量是UTC + 10點。