【AzureDataFactory】タイムスタンプと「代理キー」アクティビティから1カラムでユニークキーを追加する方法

## はじめに
Azure Data FactoryのDataFrowで、タイムスタンプと「代理キー」アクティビティを使って1カラムでユニークキーを作成する方法を記載します。

AzureDataFactoryの「代理キー」アクティビティを使うとパイプライン実行ごとに決めた開始値から一意の値を作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/054ed472-99e8-4ff2-82a5-183626f55f25.png)

通常上記のように代理キーを入れておけばレコードの識別ができるのですが、予期せぬ事象が発生し以下のようにBさんのレコードが以前と全く同じ情報で再度インポートされるとテーブル全体で一意のレコードではなくなってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/c0577aec-502d-1658-d22f-c1546e53d9a5.png)

上記のような事象に備えて可読性の高いタイムスタンプとAzureDataFactoryの「代理キー」アクティビティを組み合わせた項目の作成を検討したのでご紹介します。

なお当記事はAzureDataFactoryのDataFrowの設定から記載しております為、基本的な仕様や操作方法から確認する場合はMicrosoftLearn等をご確認ください。

## 方法
1.「代理キー」アクティビティを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/6181695c-96ff-fc91-7f81-1b1768a4bbf2.png)

2.「代理キーの設定」タブの「キー列」に項目名を入力し開始値、ステップ値を入力します。
（こちらの設定の場合代理キーは1,2,3,4....といった形で採番されます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/5ab4d6de-77d2-ac38-eaeb-82ea44b92243.png)

3.「派生列」アクティビティを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/126f6262-b328-5141-c09f-9d112875cc35.png)


4.「派生列の設定」タブで先ほど作成したKeyを追加します。
特に式を設定しない場合Keyは1,2,3,4と作成されるため、0001,0002,0003,0004....と常に4桁の文字列を作成するために追加しています。（上記のような作業が不要な場合は4.作業は不要です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/4e3d22fd-a6d2-3885-577f-f9a28bdfdf45.png)

5.続いてTimeStampを追加します。
式にTimeStamp()と入力すると、「2024-12-13 17:41:02.759」のように表示されます。
「20241213174102」のように「数字以外」、「小数点以下」の除去、「日本時間」で表示するように変換するためにTimeStampの式に以下を入力します。
concat(substring(toString(fromUTC(currentTimestamp(),'JST')), 0, 4), substring(toString(fromUTC(currentTimestamp(),'JST')), 6, 2), substring(toString(fromUTC(currentTimestamp(),'JST')), 9, 2), substring(toString(fromUTC(currentTimestamp(),'JST')), 12, 2), substring(toString(fromUTC(currentTimestamp(),'JST')), 15, 2), substring(toString(fromUTC(currentTimestamp(),'JST')), 18, 2))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/f746554b-30f1-dcf5-3a81-77c51f176710.png)

6.もう一つ「派生列」アクティビティを配置します。
　先ほど配置したものを合わせると以下のような順番です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/07ce9604-94c8-733e-690b-6fd66d4ba083.png)

7.「派生列の設定」タブでUNIQUEKEYを追加します。
　式には先ほど作成したTimeStampとKeyを組み合わせるために以下を入力します。
 concat(TimeStamp, Key)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/59be17cd-59b5-b7a3-5920-30fe01997880.png)

データのプレビューで確認すると以下のように[年月日時分秒代理キー]でデータが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/52b587a6-8fdd-c938-ec38-0b26824da646.png)

はじめにでご紹介した例で表現すると以下のようなデータが作成され、以前と全く同じ情報で再度インポートされた場合でもテーブル全体で一意のレコードにすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/e0287bf9-c466-01ea-fbca-982724ae9a54.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890637/1e04ae20-86e7-f21e-16c6-4c4b983feec4.png)

## まとめ
Azure Data FactoryのDataFrowで、タイムスタンプと「代理キー」アクティビティを使って1カラムでユニークキーを作成する方法を紹介しました。GUIDを利用したり、複数カラムで複合キーにするなど方法は他にもあるかと思います。このような方法もあるのかとご参考になれば幸いです。