1. はじめに
皆さんこんにちは。
今回は、パイプライン関数での日付操作方法について説明していきます。
※ 前提条件
- ADFパイプラインが作成されたこと。
2. タイムスタンプを任意の形式に変換する方法
タイムスタンプを任意の形式に変換するには、formatDateTime関数を利用します。
1 |
formatDateTime('<timestamp>', '<format>'?) |
- <timestamp>: タイムスタンプを含む文字列
- <format>: 単一の書式指定子またはカスタム書式パターン。
※パイプラインの文字列変数へタイムスタンプを直接設定すると、意図しないフォーマットで格納されてしまう場合があります。
そのため、タイムスタンプはformatDateTime関数を利用し、変数へ格納することを推奨します。
下図は、文字列変数へタイムスタンプを直接設定した場合の参考画像になります。
【before:変数の設定】
値へ、直接タイムスタンプを設定しています。
【after:変数の設定結果】
タイムスタンプのフォーマットが変更され、文字列変数へ格納されてしまいました。
formatDateTime関数の具体的な利用例をご紹介します。
① 日付データを格納するString型の変数を作成します。パイプライン画面で「変数」をクリックします。「新規」をクリックします。
②「名前」項目で任意の変数名(例では「jikoku」)を入力して、「種類」項目で「文字列」を選択します。
③「変数の設定」を検索して、変数の設定アクティビティをパイプラインにドラッグアンドドロップします。
④「設定」タブをクリックして、変「数の種類」項目で「パイプライン変数」を選択します。「名前」項目で作成した変数を選択します。「値」項目で「動的なコンテンツの追加」を選択します。
⑤ 以下の関数を入力します。
1 |
@formatDateTime('01/01/1999', 'yyyy-MM-dd') |
上記の関数で「01/01/1999」を「1999-01-01」に変換します。「OK」をクリックします。
⑥「デバッグ」をクリックします。
⑦ 結果が以下の画像通りです。「01/01/1999」が「1999-01-01」に変換されました。
3. UTCからJSTへ変換する方法
タイムスタンプをUTCからJSTへ変換するには、convertTimeZone関数を利用します。
1 |
convertTimeZone('<timestamp>', '<sourceTimeZone>', '<destinationTimeZone>', '<format>'?) |
- <timestamp>: タイムスタンプを含む文字列
- <sourceTimeZone>: ソース タイム ゾーンの名前
- <destinationTimeZone>: ターゲット タイム ゾーンの名前
- <format>: 単一の書式指定子またはカスタム書式パターン
① UTCからJSTへ変換します。パイプライン画面で変数の「設定」タブをクリックします。「値」をクリックします。
② 以下の関数を入力します。現時刻を取得するutcNow関数はUTC時間を返して、convertTimeZone()関数はUTC時間からJST時刻へ変換します。「OK」をクリックします。
1 |
@convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time') |
③「デバッグ」をクリックします。
④ 結果が以下の画像通りです。 UTCからJSTへ変換しました。
4. 月単位の計算方法 減算
以下の関数を使用して、指定期間から1ヶ月を減算することができます。
1 2 3 4 |
@formatDateTime( addDays(formatDateTime(<timestamp>, 'yyyy-MM'), -1), 'yyyy-MM' ) |
- <timestamp>:タイムスタンプを含む文字列
① パイプライン画面で変数の「設定」タブをクリックします。「値」をクリックします。
② 以下の関数を入力します。
1 2 3 4 |
@formatDateTime( addDays(formatDateTime('1999-05-13', 'yyyy-MM'), -1), 'yyyy-MM' ) |
※「yyyy-MM」型を利用するformatDateTime(‘1999-05-13’, ‘yyyy-MM’)関数は「1999-05」を 返します。
※ 次に、「1999-05」を入力してaddDays()関数を使用して、1日単位を減算します。「1999-04-30」4月末日という結果が返されました。
※ @formatDateTime()を利用して、「1999-04-30」から「1999-04」へ変換します。
③「デバッグ」をクリックします。
④ 結果が以下の画像通りです。指定期間から1ヶ月を減算しました。
5. 月単位の計算方法 加算
以下の関数を利用して、1ヶ月を加算します。
1 2 3 4 |
@formatDateTime( addDays(formatDateTime('1999-05-13', 'yyyy-MM'), 31), 'yyyy-MM' ) |
※加算方法の解説
「yyyy-MM」型を利用するformatDateTime(‘1999-05-13’, ‘yyyy-MM’)関数は「1999-05」を 返します。
次に、「1999-05」を入力してaddDays()関数を使用して、31日単位を加算します。「1999-06-01」6月初日という結果が返されました。
@formatDateTime()を利用して、「1999-06-01」から「1999-06」へ変換します。
6. 曜日を用いた判定処理
タイムスタンプの曜日を取得するには、dayOfWeek関数を利用します。
1 |
dayOfWeek('<timestamp>') |
- <timestamp>:タイムスタンプを含む文字列
- 戻り値:月曜日~日曜日を、1~7で表現したint型の整数
利用例:日本時刻ベースで、本日の曜日を取得します。
1 |
dayOfWeek(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time')) |
利用例:日本時刻ベースで、本日が金曜日か判定します。
下記のコマンド例では、dayOfWeek関数の戻り値が、金曜日を意味するint型の「5」であるかを判定しています。
1 |
@equals(dayOfWeek(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time')), 5) |
7. まとめ
Azure Data Factoryでパイプライン関数での日付操作方法について説明しました。
今回の記事が少しでもAzure Data Factoryを知るきっかけや、業務のご参考になれば幸いです。
Azure Data FactoryやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!
・Azure Data Factory連載シリーズはこちら
この記事を書いた人
- quanna