MaxCompute プロジェクトのタイムゾーンを、SET コマンドを使用して構成します。デフォルトでは、MaxCompute はすべての DATETIME、TIMESTAMP、および DATE フィールドと、それらに関連する組み込み時刻関数に対して UTC + 08:00 を使用します。
対応するジョブタイプ
タイムゾーンの構成は、以下のジョブタイプに適用されます:
MapReduce
MaxCompute 上の Spark
MaxCompute 計算クラスターに送信されたタスクは、プロジェクトのタイムゾーンを自動的に継承します。
YARN クライアントモード(spark-shell、spark-sql、または pyspark)で実行されるタスクでは、追加のドライバー構成が必要です。
spark-defaults.confにspark.driver.extraJavaOptions -Duser.timezone=America/Los_Angelesを追加し、America/Los_Angelesの部分をご使用になるタイムゾーンに置き換えます。
AI 向けマシンラーニングプラットフォーム (PAI)
Graph
タイムゾーンの構成
MaxCompute では、以下の 2 種類の構成範囲がサポートされています:
| 範囲 | 設定可能なユーザー |
|---|---|
| セッションレベル | すべてのユーザー |
| プロジェクトレベル | プロジェクトオーナーのみ |
セッション単位でタイムゾーンを設定する
SET odps.sql.timezone=<timezoneid>; をクエリ文とともに送信します。
-- このセッションのタイムゾーンを Asia/Tokyo に設定します。
SET odps.sql.timezone=Asia/Tokyo;現在アクティブなタイムゾーンを確認するには、SELECT getdate(); を実行します:
SELECT getdate();期待される出力:
+---------------------+
| _c0 |
+---------------------+
| 2018-10-30 23:49:50 |
+---------------------+プロジェクト単位でタイムゾーンを設定する
プロジェクトオーナーとして、以下のコマンドを実行します:
setProject odps.sql.timezone=<timezoneid>;プロジェクトのタイムゾーンを変更した後は、既存のジョブから取得したデータを含め、プロジェクト内のすべての時刻計算で新しいタイムゾーンが使用されます。影響を最小限に抑えるため、プロジェクトのタイムゾーンは必要に応じてのみ構成してください。また、既存の稼働中のプロジェクトよりも、新規プロジェクトでの構成を推奨します。
制限事項と注意事項
タイムゾーンのフォーマット
Asia/Shanghai のような IANA タイムゾーン名を使用してください。GMT+9 のようなオフセット形式は使用しないでください。
GMT+N 形式では夏時間がサポートされないため、誤った時刻計算を引き起こす可能性があります。IANA タイムゾーン名は夏時間を自動的に処理し、曖昧さを回避します。
SDK およびクライアントの互換性
SQL 組み込み日付関数、ユーザー定義関数 (UDF)、ユーザー定義型 (UDT)、ユーザー定義結合 (UDJ)、および
SELECT TRANSFORMステートメントは、いずれもプロジェクトのタイムゾーン属性を読み取ることができます。Java SDK で構成されたタイムゾーンとプロジェクトのタイムゾーンが異なる場合、DATETIME を STRING に正しく変換するために、SDK で GMT タイムゾーンを構成してください。
MaxCompute を更新する際のローカルタイムゾーンが UTC + 08:00 でない場合は、
-overseaサフィックス付きの Java SDK および関連クライアントを最新版に更新してください。これにより、1900 年 1 月 1 日以降の SQL 結果および Tunnel コマンドによるデータ転送が正確かつ一貫したものになります。
過去の日時における差異
UTC + 08:00 以外のタイムゾーンを構成した場合、DataWorks で実行される SQL ステートメントの出力と実際の時刻との間に差異が生じる可能性があります:
| 日付範囲 | 時刻差 |
|---|---|
| 1900 年 1 月 1 日より前 | 9 秒 |
| 1900 年 1 月 1 日~1928 年 1 月 1 日 | 352 秒 |
-oversea サフィックス付きバージョンへの更新後:
1900 年 1 月 1 日より前の DATETIME データは、最大で 343 秒の差異が生じる場合があります。
アップデート前にアップロードされた 1928 年 1 月 1 日より前の DATETIME データは、新しいバージョンで 352 秒前になります。
`-oversea` サフィックス更新なし:
SQL 結果と Tunnel コマンドによるデータ転送結果が異なる場合があります。
1900 年 1 月 1 日より前:9 秒の差異。
1900 年 1 月 1 日~1928 年 1 月 1 日:352 秒の差異。
DataWorks のタイムゾーン
Java SDK またはクライアントのタイムゾーンを変更しても、DataWorks サーバーのタイムゾーンには影響しません。この点がスケジュール済みの DataWorks ジョブに与える影響を評価してください。DataWorks サーバーのタイムゾーンはリージョンごとに異なります:
| リージョン | タイムゾーン |
|---|---|
| 日本 (東京) | GMT + 09:00 |
| シンガポール (シンガポール) | GMT+8 |
サードパーティ製 JDBC クライアント
Java Database Connectivity (JDBC) を介してサードパーティ製クライアントから MaxCompute に接続する場合、サーバーとの整合性を保つために、クライアント側でも対応するタイムゾーンを構成してください。