全部產品
Search
文件中心

MaxCompute:時區配置操作

更新時間:Feb 28, 2024

本文為您介紹如何使用SET命令配置MaxCompute Project的時區。

支援時區功能的作業如下:

  • MapReduce支援時區功能。

  • Spark支援時區功能。

    • 對於提交到MaxCompute計算叢集的任務,可自動擷取Project的時區。

    • 對於通過yarn-client模式啟動(例如spark-shell,spark-sql,pyspark等)的設定,您需要手動設定Driver的啟動參數(spark-defaults.conf),增加spark.driver.extraJavaOptions -Duser.timezone=America/Los_Angelestimezone的值為將要使用的時區。

  • PAI支援時區功能。

  • Graph支援時區功能。

配置時區

MaxCompute Project時區預設是中國的東八區,DATETIME、TIMESTAMP、DATE類型欄位以及相關時間內建函數按照東八區進行計算。您可以通過以下兩種方式配置時區:

  • Session層級:執行SET odps.sql.timezone=<timezoneid>;語句,需要與計算語句一起提交。

    --設定時區為Asia/Tokyo。
    SET odps.sql.timezone=Asia/Tokyo;
    --查詢當前時區。
    SELECT getdate();
    output:
    +------------+
    | _c0        |
    +------------+
    | 2018-10-30 23:49:50 |
    +------------+
  • Project層級:執行setproject odps.sql.timezone=<timezoneid>;語句,此命令需要專案所有者(Project Owner)執行。

    重要

    Project的時區一旦被設定,相關的時間計算會取設定後的時區,原有的作業資料將會受到影響。因此,請您謹慎考慮是否有必要設定時區。如果必要,建議只對新增的Project進行時區設定,不對已有資料的Project進行設定。

使用限制及注意事項

  • SQL內建日期函數、UDF、UDT、UDJ、SELECT TRANSFORM支援擷取Project Timezone屬性來配置時區。

  • 時區支援的格式類型為Asia/Shanghai(存在夏令時跳變),不支援GMT+9格式。

  • 當SDK時區與Project時區不同時,DATETIME類型轉換為STRING類型的操作需設定GMT時區。

  • 時區配置後,通過DataWorks執行相關SQL時,某些時間段的日期顯示會存在差異。例如,1900~1928年的日期時間差異為5分52秒,1900年之前的日期時間差異為9秒。

  • 為了保證MaxCompute在多個時區DATETIME類型資料的正確性,MaxCompute服務、Java SDK以及用戶端將會進行版本更新(-oversea尾碼的Java SDK或用戶端版本),更新後可能影響MaxCompute中已經儲存的早於1928年的DATETIME類型資料的顯示。

  • 對於非中國東八區的地區,建議您同步更新Java SDK或用戶端版本,以保證在1900-01-01之後的SQL計算結果及Tunnel傳輸資料的準確性和一致性。對於早於1900-01-01的DATETIME資料,SQL的計算顯示結果和Tunnel傳輸資料仍然可能存在343秒的差異。對於新版本SDK或用戶端,之前已經上傳的早於1928-01-01的DATETIME資料,在新版本中日期時間會減少352秒。

  • 如果繼續使用不帶有-oversea尾碼的SDK或用戶端,SQL計算結果和Tunnel傳輸資料將存在差異。早於1900-01-01的資料差異為9秒,1900-01-01~1928-01-01的資料差異為352秒。

    說明

    Java SDK或用戶端版本更新配置時區不影響DataWorks的時區配置,因此時區會存在差異,需要您對DataWorks中定時任務調度的影響進行計算評估。DataWorks伺服器在日本地區的時區是GMT+9,在新加坡Region的時區是GMT+8。

  • 通過JDBC串連的第三方用戶端需要在用戶端設定時區,保證與服務端時區設定的一致性。