
【IICS】マッピングのパラメータに現在日付を指定する方法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
データアナリティクス事業本部ビッグデータチームのyosh-kです。
前回、IICS CDIのマッピング作成時にソースタイプにクエリを選択し、クエリの中でパラメータを使用できないか検討しましたが、今回は、そのパラメータに現在日付を設定していきたいと思います。
IICS CDI Mappingでクエリ選択時にパラメータを使用する方法
前提条件
- 設定は前回のブログと同様ですので、割愛させていただきます。
- Redshift tableには、現在の日付を指定するため、
flight_dateカラムがブログ執筆日付の2023-06-03のレコードを用意します。
INSERT INTO public.flightdata(
select
'2023-06-03',
flight_number,
origin_city,
origin_state,
destination_city,
destination_state,
departure_delay,
arrival_delay,
cancelled,
diverted,
air_time,
distance,
distance_group,
carrier_delay,
weather_delay,
security_delay,
late_aircraft_delay,
origin_airport_name,
cancellation_reason,
destination_airport_name,
carrier_name
from public.flightdata
limit 10
)
結論
結論から言いますと、データタスクの入力フィールドに、該当のパラメータを指定し、式の中で以下の設定をすることで、JSTの現在日付を取得することが可能です。
fn:substring(fn:string(fn:adjust-dateTime-to-timezone(fn:current-dateTime(), xs:dayTimeDuration("PT9H")))
, 1, 10)

設定内容の確認
設定内容の確認のため、テスト用のパラメータをマッピングから作成し、割り当てステップで出力を確認していきます。

fn:current-dateTime
公式的なIICSのドキュメントは見つけることはできませんでしたが、IICS Knowledgeから現在の日付と時刻を、サーバーの暗黙的なタイムゾーンで返していると想定しています。
- HOW TO change the timezone of the time returned by fn:current-dateTime() in ICAI (ICRT)?
- Convert time into 24 hour clock using fn:current-dateTime() in Application integration process

マッピング実行結果のペイロードからも日本時間2023-06-03T18:55から-9時間されたUTC時間2023-06-03T09:55:18.003Zであることを確認しています。

fn:adjust-dateTime-to-timezone
fn:adjust-dateTime-to-timezone(arg, timezone)については、こちらも公式ドキュメントを見つけられませんでしたが、IICS Knowledgeから読み解くと、argにdatetime型の値を指定し、timezoneでxs:dayTimeDuration型の値を指定することで、与えられた日時を指定されたタイムゾーンに変換するために使用されます。xs:dayTimeDurationは、XML Schemaで定義されたデータ型の1つです。これは、期間を表現するために使用されます。具体的には、時間、分、秒を表す値を持ちます。
xs:dayTimeDurationは、以下の形式で表現されます:
PnDTnHnMnS
ここで、nは数値を表し、以下の要素が含まれます:
P: 期間を示すことを示すプレフィックス D: 日数 T: 時間を示すことを示すセパレータ H: 時間 M: 分 S: 秒
例えば、PT5H30Mは、5時間30分の期間を表し、UTCはPT0H、JSTはPT9Hとなります。
- HOW TO: Covert the time to a different time zone in IICS Advance Taskflow
- HOW TO: Convert DateTime Property to Different Time Zone using XQuery in Cloud Application Integration (CAI)
- fn:adjust-dateTime-to-timezone 関数

想定通り、日本時間のcurrent_timeが出力されています。

fn:stringとfn:substring
fn:stringとfn:substringについても公式な記載は見つけられませんでしたが、以下の認識でいます。
fn:string(arg): argをstring型に変換fn:substring(sourceString, startingLoc, length):sourceStringで検索したい文字列を、startingLocで開始位置を、lengthで開始位置からの数を指定し、値を抽出
今回の用途として、これまでに取得した、datetime型の値をstringに変換し、その中から日付箇所だけを抽出するため、以下の設定とします。

想定通り、JSTの日付型で取得できています。

実行結果
最後にデータタスクの入力パラメータに、作成した式を入力し、ジョブを実行してみます。

date_paramsが現在日付の2023-06-03"となり出力されています。レコード件数も10件なので想定通りです。
CSVファイルの出力も確認

最後に
fn:current-dateTimeの値はおそらく、サーバー上の時間だと思いますので、もしサーバー上の時間がJSTである場合は、fn:adjust-dateTime-to-timezone処理は不要であると思います。このブログが少しでも誰かの役に立てば幸いです。






