ここでは、SET コマンドを使用して MaxCompute プロジェクトのタイムゾーンを設定する方法について説明します。
タイムゾーン設定機能をサポートするジョブの種類は次のとおりです。
MapReduce
MaxCompute の Spark
タスクが MaxCompute コンピューティングクラスターにサブミットされると、プロジェクトのタイムゾーンが自動的に取得されます。
タスクがspark-shell、spark-sql、またはpysparkからyarn-clientモードで送信される場合、ドライバーのspark-defaults.confファイルにパラメーターを設定し、
spark.driver.extraJavaOptions -Duser.timezone=America/Los_Angeles
を追加する必要があります。 timezoneパラメーターは、使用するタイムゾーンを示します。
AI向け機械学習プラットフォーム (PAI)
グラフ
設定方法
デフォルトでは、MaxCompute プロジェクトのタイムゾーンは UTC+8 です。 DATETIME、TIMESTAMP、および DATE フィールドと関連する組み込みの時間関数はすべて、UTC+8 を基準に計算されます。 タイムゾーンを設定するには、下記のいずれかの方法を使用します。
セッションレベル:
set odps.sql.timezone=<timezoneid>;
ステートメントを実行用のコンピューティングステートメントとともに送信します。--Set the time zone to Asia/Tokyo. SET odps.sql.timezone=Asia/Tokyo; --Query the current time zone. SELECT getdate(); output: +------------+ | _c0 | +------------+ | 2018-10-30 23:49:50 | +------------+
プロジェクトレベル:
setProject odps.sql.timezone=<timezoneid>;
ステートメントを実行します。 プロジェクト所有者だけがこのステートメントの実行権限を持っています。重要プロジェクトのタイムゾーンが設定された後、それはすべての時間計算に使用され、既存のジョブのデータが影響を受けます。 したがって、必要な場合にのみタイムゾーンを設定してください。 新しいプロジェクトにのみタイムゾーンを設定することを推奨します。
制限と使用に関する注意事項
SQL組み込み日付関数、ユーザー定義関数 (UDF) 、ユーザー定義型 (UDT) 、ユーザー定義結合 (UDJ) 、および
SELECT TRANSFORM
ステートメントを使用すると、プロジェクトのタイムゾーン属性を取得してタイムゾーンを設定できます。タイムゾーンは、夏時間をサポートする
Asia/Shanghai
などの形式で設定する必要があります。 タイムゾーンをGMT + 9形式で設定しないでください。SDK のタイムゾーンがプロジェクトのタイムゾーンと異なる場合は、GMT タイムゾーンを設定して、データ型を DATETIME から STRING に変換する必要があります。
タイムゾーンを設定すると、DataWorksで実行する関連SQL文のリアルタイムと出力時間に違いが生じます。 1900 年から 1928 年までの時間差は 352 秒です。 1900 年より前の時間差は 9 秒です。
MaxCompute、SDK for Java、および関連クライアントが更新され、MaxComputeに保存されているDATETIMEデータが複数のタイムゾーンで正しいことが保証されます。 Javaおよび関連クライアントに必要なSDKのバージョンには、-overseaというサフィックスが付いています。 この更新は、MaxComputeで1928された1月1日より前のDATETIMEデータの表示に影響する可能性があります。
MaxComputeを更新するときにローカルタイムゾーンがUTC + 8でない場合は、SDK for Javaおよび関連クライアントを更新することを推奨します。 これにより、1900年1月1日以降にTunnelコマンドを使用して転送されるSQLベースのコンピューティング結果とデータが正確で一貫性があります。 更新後、1900年1月1日より前のDATETIMEデータの場合、SQLベースのコンピューティング結果とTunnelコマンドを使用して転送されたデータの差は343秒です。 SDK For Javaおよび関連クライアントが更新される前に1928およびアップロードされる1月1日より前のDATETIMEデータの場合、新しいバージョンの時刻は352秒前です。
SDK for Javaとクライアントを -overseaサフィックスのバージョンに更新しない場合、SQLベースのコンピューティング結果は、Tunnelコマンドを使用して転送されたデータとは異なります。 1900年1月1日より前のデータの場合、時差は9秒です。 1900年1月1日から1928年1月1日までのデータの場合、時差は352秒です。
説明SDK for Javaまたは関連クライアントでタイムゾーン設定を変更しても、DataWorksのタイムゾーン設定には影響しません。 したがって、タイムゾーンは異なります。 DataWorksでスケジュールされたジョブの影響を評価する必要があります。 日本 (東京) リージョンのDataWorksサーバーのタイムゾーンはGMT + 9、シンガポール (シンガポール) リージョンのタイムゾーンはGMT + 8です。
Java Database Connectivity (JDBC) を使用してMaxComputeに接続されているサードパーティクライアントを使用する場合、クライアントとサーバー間の時間の整合性を確保するために、クライアントのタイムゾーンを設定する必要があります。