1. はじめに
皆さんこんにちは。
今回では、目的に応じた関数を探す手間が省け、ADF実装を効率化するためにパイプラインとデータフローでできることが異なるについて説明していきます。
2. 使える関数についてまとめ
2.1 データ関数
2.2 文字列関数
2.3 コレクション関数
機能 | パイプライン | データフロー |
コレクションに特定の項目があるかどうかを確認する | contains([1,2,3,4], 3) | contains([1, 2, 3, 4], #item == 3) |
コレクションが空かどうかを調べる | empty(‘my-string’), empty([1,2,3]) | iif(“my-string”==””,true(),false()), iif(size([1,2,3])==0,true(),false()) |
文字列または配列から最初の項目を返す | first([0,1,2]) | at([0,1,2], 1) |
指定したコレクションすべてに共通する項目 “のみ” を含むコレクションを返す | intersection(‘<collection1>’, ‘<collection2>’, …) | intersect(<value1> : array, <value2> : array) |
配列のすべての項目を含み、各文字が “区切り記号” で区切られた文字列を返す | join([<collection>], ‘<delimiter>’) | – |
コレクションから最後の項目を返す | last([0,1,2]) | at([0,1,2], size[0,1,2]) |
コレクション内の項目の数を返す | length(‘<collection>’) | size(<value1> : any) |
コレクションの先頭から項目を削除し、”他のすべて” の項目を返す | skip([<collection>], <count>) | – |
コレクションの先頭から項目を返す | take([1,2,3], 2) | slice([1,2,3], 1, 2) |
指定した複数のコレクションの “すべての” 項目を含む 1 つのコレクションを返す | union(‘<collection1>’, ‘<collection2>’, …) | union(<value1>: array, <value2> : array) |
2.4 論理関数
機能 | パイプライン | データフロー |
両方の式が true であるかどうかを確認する | and(<expression1>, <expression2>) | &&, and(<value1> : boolean, <value2> : boolean) |
両方の値、式、またはオブジェクトが等しいかどうかを調べる | equals(‘<object1>’, ‘<object2>’) | ==, equals(<value1> : any, <value2> : any) |
1 番目の値が 2 番目の値より大きいかどうかを調べる | greater(<value>, <compareTo>) | >, greater(<value1> : any, <value2> : any) |
1 番目の値が 2 番目の値以上かどうかを調べる | greaterOrEquals(<value>, <compareTo>) | >=, greaterOrEqual(<value1> : any, <value2> : any) |
式が true か false かを調べる 結果に基づき、指定された値を返す | if(<expression>, <valueIfTrue>, <valueIfFalse>) | iif(<condition> : boolean, <true_expression> : any, [<false_expression> : any]) |
1 番目の値が 2 番目の値より小さいかどうかを調べる | less(<value>, <compareTo>) | <, lesser(<value1> : any, <value2> : any) |
1 番目の値が 2 番目の値以下かどうかを調べる | lessOrEquals(<value>, <compareTo>) | <=, lesserOrEqual(<value1> : any, <value2> : any) |
式が false かどうかを調べる | not(<expression>) | !, not(<value1> : boolean) |
少なくとも 1 つの式が true かどうかを調べる | or(<expression1>, <expression2>) | ||, or(<value1> : boolean, <value2> : boolean) |
2.5 変換関数
2.6 算術関数
機能 | パイプライン | データフロー |
2 つの数値を加算した結果を返す | add(<summand_1>, <summand_2>) | +, add(<value1> : any, <value2> : any) |
2 つの数値を除算した結果の整数値を返す | div(<dividend>, <divisor>) | /, divide(<value1> : any, <value2> : any) |
両端を含む数値のリストまたは配列から最大の値を返す | max(<number1>, <number2>, …) | – |
数値のセットまたは配列から最小の値を返す | min(<number1>, <number2>, …) | – |
2 つの数値を除算した剰余を返す | mod(<dividend>, <divisor>) | %, mod(<value1> : any, <value2> : any) |
2 つの数値を乗算した積を返す | mul(<multiplicand1>, <multiplicand2>) | *, multiply(<value1> : any, <value2> : any) |
指定した範囲からランダムな整数を返す | rand(<minValue>, <maxValue>) | – |
指定した整数から始まる整数の配列を返す | range(<startIndex>, <count>) | – |
1 番目の数値から 2 番目の数値を減算して、結果を返す | sub(<minuend>, <subtrahend>) | -, minus(<value1> : any, <value2> : any) |
2.7 集計関数
2.8 配列関数
2.9 キャッシュされた lookup 関数
機能 | パイプライン | データフロー |
キャッシュされたシンクのキーと一致する特定のキーを使用して、キャッシュされたシンクの最初の行が検索される | – | lookup(key, key2, …) |
キャッシュされたシンクのキーと一致する特定のキーを使用して、キャッシュされたシンクの一致するすべての行が検索される | – | mlookup(key, key2, …) |
キャッシュ シンクの結果の最初の行を返す | – | output() |
キャッシュ シンクの結果の出力行セット全体を返す | – | outputs() |
2.10 日付と時刻関数
2.11 式関数
2.12 マップ関数
機能 | パイプライン | データフロー |
キーと値のマップを作成する | – | associate(<value1> : map, <value2> : binaryFunction) |
キーと値のマップを作成する | – | keyValues(<value1> : array, <value2> : array) |
キーを新しい値に関連付け、マップを変換する | – | mapAssociation(<value1> : map, <value2> : binaryFunction) |
キーを新しい値に関連付け、マップを変換する | – | reassociate(<value1> : map, <value2> : binaryFunction) |
2.13 メタ関数
機能 | パイプライン | データフロー |
構造体または構造体の配列内のサブ項目を検索する | – | byItem(<parent column> : any, <column name> : string) |
元のストリームでの名前で列の値を選択する | – | byOrigin(<column name> : string, [<origin stream name> : string]) |
ストリーム内の名前を指定して列の配列を選択する | – | byOrigins(<column names> : array, [<origin stream name> : string]) |
ストリームでの名前で列の値を選択する | – | byName(<column name> : string, [<stream name> : string]) |
ストリーム内の名前を指定して列の配列を選択する | – | byNames(<column names> : array, [<stream name> : string]) |
ストリームでの名前で階層パスを見つける | – | byPath(<value1> : string, [<streamName> : string]) |
ストリーム内の相対位置 (1 から始まる) で列の値を選択する | – | byPosition(<position> : integer) |
ストリームでの名前で特定の階層パスが存在するかどうかを確認する | – | hasPath(<value1> : string, [<streamName> : string]) |
列が作成された配信元ストリームのすべての出力列を取得する | – | originColumns(<streamName> : string) |
バイナリ値の 16 進数文字列表記を返す | – | hex(<value1>: binary) |
バイナリ値を 16 進数文字列表記から数値に変換する | – | unhex(<value1>: string) |
2.14 ウィンドウ関数
機能 | パイプライン | データフロー |
CumeDist 関数は、パーティション内のすべての値の相対値を計算する | – | cumeDist() |
ウィンドウの order by 句で指定した値のグループ内の値の順位を計算する | – | denseRank() |
現在の行の n 行前を評価した最初のパラメーターの値を取得する | – | lag(<value> : any, [<number of rows to look before> : number], [<default value> : any]) |
現在の行の n 行後を評価した最初のパラメーターの値を取得する | – | lead(<value> : any, [<number of rows to look after> : number], [<default value> : any]) |
NTile 関数は、各ウィンドウ パーティションの行を n バケット (1 から最大 n) に分割する | – | nTile([<value1> : integer]) |
ウィンドウの order by 句で指定した値のグループ内の値の順位を計算する | – | rank() |
ウィンドウ内の行のシーケンシャル行番号を 1 から順番に割り当てる | – | rowNumber() |
3. 使える変数&パラメータの型についてまとめ
注釈:O : 存在、X:存在しない
データ型 | パイプライン | データフロー | |
パラメーター | String | ○ | ○ |
Int | ○ | ○ | |
Float | ○ | ○ | |
Bool | ○ | ○ | |
Array | ○ | ○ | |
Object | ○ | × | |
SecureString | ○ | × | |
Date | × | ○ | |
Timestamp | × | ○ | |
Any | × | ○ | |
Short | × | ○ | |
Double | × | ○ | |
Long | × | ○ | |
Decimal | × | ○ | |
Map | × | ○ | |
変数 | String | ○ | × |
Int | × | × | |
Float | × | × | |
Bool | ○ | × | |
Array | ○ | × | |
Object | × | × |
4. まとめ
Azure Data Factoryでパイプラインとデータフローでできることが違うについて説明しました
今回の記事が少しでもAzure Data Factoryを知るきっかけや、業務のご参考になれば幸いである
Azure Data FactoryやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!
・Azure Data Factory連載シリーズはこちら
この記事を書いた人
- quanna