1. はじめに

皆さんこんにちは。

今回では、目的に応じた関数を探す手間が省け、ADF実装を効率化するためにパイプラインとデータフローでできることが異なるについて説明していきます。

2. 使える関数についてまとめ

2.1 データ関数

機能 パイプライン データフロー
タイムスタンプに時間数を加算する addDays(‘<timestamp>’, <days>, ‘<format>’?) addDays(<date/timestamp> : datetime, <days to add> : integral)
タイムスタンプに日数を加算する addHours(‘<timestamp>’, <hours>, ‘<format>’?) toTimestamp(‘timestamp’, ‘format’) +  hours(<hours>)
タイムスタンプに分数を加算する addMinutes(‘<timestamp>’, <minutes>, ‘<format>’?) toTimestamp(‘timestamp’, ‘format’) + minutes(<minutes>)
タイムスタンプに秒数を加算する addSeconds(‘<timestamp>’, <seconds>, ‘<format>’?) toTimestamp(‘timestamp’, ‘format’) + seconds(<seconds>)
タイムスタンプに時間単位数を加算する addToTime(‘2018-01-01T00:00:00Z’, 1, ‘Day’) toTimestamp(‘2018-01-01T00:00:00Z’) + days(1)
タイムスタンプを協定世界時 (UTC) からターゲット タイム ゾーンに変換する convertFromUtc(‘<timestamp>’, ‘<destinationTimeZone>’, ‘<format>’?) fromUTC(<value1> : timestamp, [<value2> : string])
タイムスタンプをソース タイム ゾーンからターゲット タイム ゾーンに変換する convertTimeZone(‘<timestamp>’, ‘<sourceTimeZone>’, ‘<destinationTimeZone>’, ‘<format>’?)
タイムスタンプをソース タイム ゾーンから協定世界時 (UTC) に変換する convertToUtc(‘<timestamp>’, ‘<sourceTimeZone>’, ‘<format>’?) toUTC(<value1> : timestamp, [<value2> : string])
タイムスタンプから月の日付を返す dayOfMonth(‘<timestamp>’) dayOfMonth(<value1> : datetime)
タイムスタンプから曜日を返す dayOfWeek(‘<timestamp>’) dayOfWeek(<value1> : datetime)
タイムスタンプから年の何日目かを返す dayOfYear(‘<timestamp>’) dayOfYear(<value1> : datetime)
指定した形式でタイムスタンプを返す formatDateTime(‘<timestamp>’, ‘<format>’?) toDate(<string> : any, [<date format> : string])
現在のタイムスタンプに指定した時刻単位を加えて返す getFutureTime(5, ‘Day’) currentTimestamp() +  days(5)
現在のタイムスタンプから指定した時刻単位を引いて返す getPastTime(5, ‘Day’) currentTimestamp() –  days(5)
タイムスタンプの日の開始日時を返す startOfDay(‘<timestamp>’, ‘<format>’?)
タイムスタンプの時刻の開始を返す startOfHour(‘<timestamp>’, ‘<format>’?)
タイムスタンプの月の開始を返す startOfMonth(‘<timestamp>’, ‘<format>’?)
タイムスタンプから時間単位数を減算する getPastTime もご覧ください subtractFromTime(‘2018-01-02T00:00:00Z’, 1, ‘Day’) subDays(toDate(‘2018-01-02T00:00:00Z’), 1)
指定したタイムスタンプの ticks プロパティの値を返す “ティック” は 100 ナノ秒の間隔である ticks(‘<timestamp>’)
現在のタイムスタンプを返す utcNow(‘<format>’) currentUTC()

2.2 文字列関数

機能 パイプライン データフロー
2 つ以上の文字列を結合し、結合された文字列を返す concat(‘<text1>’, ‘<text2>’, …) concat(<this> : string, <that> : string, …)
文字列が特定の部分文字列で終わっているかどうかを調べる endsWith(‘<text>’, ‘<searchText>’) endsWith(<string> : string, <substring to check> : string)
グローバル一意識別子 (GUID) を文字列として生成する guid(‘<format>’) uuid()
部分文字列の開始位置またはインデックス値を返す indexOf(‘<text>’, ‘<searchText>’)
部分文字列の最後の出現箇所の開始位置またはインデックス値を返す lastIndexOf(‘<text>’, ‘<searchText>’)
部分文字列を指定した文字列で置換し、結果の文字列を返す replace(‘<text>’, ‘<oldText>’, ‘<newText>’) replace(<string> : string, <substring to find> : string, [<substring to replace> : string])
元の文字列で指定された区切り文字に基づいて、コンマで区切られた部分文字列を含む配列を返す split(‘<text>’, ‘<delimiter>’) split(<string to split> : string, <split characters> : string)
文字列が特定の部分文字列で始まっているかどうかを調べる startsWith(‘<text>’, ‘<searchText>’) startsWith(<string> : string, <substring to check> : string)
文字列から、指定された位置またはインデックスから始まる文字を返す substring(‘<text>’, <startIndex>, <length>) substring(<string to subset> : string, <from 1-based index> : integral, [<number of characters> : integral])
小文字の形式で文字列を返す toLower(‘<text>’) lower(<value1> : string)
大文字の形式で文字列を返す toUpper(‘<text>’) upper(<value1> : string)
文字列から先頭と末尾の空白を削除し、更新された文字列を返す trim(‘<text>’) trim(<string to trim> : string, [<trim characters> : string])

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 変換関数

機能 パイプライン データフロー
指定した 1 つの入力から配列を返す array(‘<value>’) array([<value1> : any], …)
文字列の base64 エンコード バージョンを返す base64(‘<value>’) toBase64(<value1> : string, <encoding type> : string])
base64 エンコード文字列のバイナリ バージョンを返す base64ToBinary(‘<value>’)
base64 エンコード文字列の文字列バージョンを返し、実質的に base64 の文字列をデコードする base64ToString(‘<value>’) fromBase64(<value1> : string, <encoding type> : string)
文字列のバイナリ バージョンを返す binary(‘<value>’) toBinary(<value1> : any)
値のブール値バージョンを返す bool(<value>) toBoolean(<value1> : string)
1 つまたは複数のパラメーターから、最初の null 以外の値を返す coalesce(<object_1>, <object_2>, …)
複数の入力から配列を作成して返す createArray(‘<object1>’, ‘<object2>’, …) array([<value1> : any], …)
文字列のデータ URI (Uniform Resource Identifier) を返す dataUri(‘<value>’)
データ URI (Uniform Resource Identifier) のバイナリ バージョンを返す dataUriToBinary(‘<value>’)
データ URI (Uniform Resource Identifier) の文字列バージョンを返す dataUriToString(‘<value>’)
base64 エンコード文字列の文字列バージョンを返し、実質的に base64 の文字列をデコードする decodeBase64(‘<value>’) fromBase64(<value1> : string, <encoding type> : string)
データ URI (Uniform Resource Identifier) のバイナリ バージョンを返す decodeDataUri(‘<value>’)
エスケープ文字をデコード バージョンに置き換えた文字列を返す decodeUriComponent(‘<value>’)
URL の安全でない文字がエスケープ文字に置き換えられた、文字列の URI (Uniform Resource Identifier) エンコード バージョンを返す encodeUriComponent(‘<value>’)
浮動小数点数の文字列バージョンを実際の浮動小数点数に変換する float(‘<value>’) toFloat(<value> : any, [<format> : string], [<locale> : string])
文字列の整数バージョンを返す int(‘<value>’) toInteger(<value> : any, [<format> : string], [<locale> : string])
文字列または XML に対する JSON (JavaScript Object Notation) 型の値またはオブジェクトを返す json(‘<value>’)
値の文字列バージョンを返す string(<value>) toString(<value> : any, [<number format/date format> : string], [<date locale> : string])
URL の安全でない文字がエスケープ文字に置き換えられた、文字列の URI (Uniform Resource Identifier) エンコード バージョンを返す uriComponent(‘<value>’)
URI (Uniform Resource Identifier) コンポーネントのバイナリ バージョンを返す uriComponentToBinary(‘<value>’)
URI (Uniform Resource Identifier) エンコード文字列の文字列バージョンを返す uriComponentToString(‘<value>’)
JSON オブジェクトを含む文字列の XML バージョンを返す xml(‘<value>’)
XML で XPath (XML Path Language) 式と一致するノードまたは値を調べて、一致するノードまたは値を返す xpath(‘<xml>’, ‘<xpath>’)
入力文字の数値を返す ascii(<Input> : string)
入力数値で表される ASCII 文字を返す char(<Input> : number)
エンコードされた入力データを、指定された文字セットに基づいて文字列にデコードする decode(<Input> : any, <Charset> : string)
文字セットに基づいて、入力文字列データをバイナリにエンコードする encode(<Input> : string, <Charset> : string)
ビット位置がこのビットセットに設定されているかどうかを確認する isBitSet (<value1> : array, <value2>:integer )
このビットセットにビット位置を設定する setBitSet (<value1>: array, <value2>:array)
文字列値が toBoolean() の規則に従ったブール値であるかどうかを確認する isBoolean(<value1>: string)
文字列値が toByte() の規則に従った省略可能な形式が指定されたバイト値であるかどうかを確認する isByte(<value1> : string)
入力日付文字列が、省略可能な入力日付形式を使用した日付であるかどうかを確認する isDate (<value1> : string, [<format>: string])
文字列値が toShort() の規則に従った省略可能な形式が指定された短整数型値であることを確認する isShort (<value1> : string, [<format>: string])
文字列値が toInteger() の規則に従った省略可能な形式が指定された整数値であることを確認する isInteger (<value1> : string, [<format>: string])
文字列値が toLong() の規則に従った省略可能な形式が指定された 長整数型値であることを確認する isLong (<value1> : string, [<format>: string])
これが数値ではないか確認する isNan (<value1> : integral)
文字列値が toFloat() の規則に従った省略可能な形式が指定された浮動小数点値であることを確認する isFloat (<value1> : string, [<format>: string])
文字列値が toDouble() の規則に従った省略可能な形式が指定された倍精度値であることを確認する isDouble (<value1> : string, [<format>: string])
文字列値が toDecimal() の規則に従った省略可能な形式が指定された 10 進数値であることを確認する isDecimal (<value1> : string)
入力日付文字列が、省略可能な入力タイムスタンプ形式を使用したタイムスタンプであるかどうかを確認する isTimestamp (<value1> : string, [<format>: string])
任意の数値または文字列をバイト値に変換する toByte(<value> : any, [<format> : string], [<locale> : string])
任意の数値または文字列を decimal 型の値に変換する toDecimal(<value> : any, [<precision> : integral], [<scale> : integral], [<format> : string], [<locale> : string])
任意の数値または文字列を double 型の値に変換する toDouble(<value> : any, [<format> : string], [<locale> : string])
任意の数値または文字列を long 型の値に変換する toLong(<value> : any, [<format> : string], [<locale> : string])
任意の数値または文字列を short 型の値に変換する toShort(<value> : any, [<format> : string], [<locale> : string])
省略可能なタイムスタンプ形式を指定して、文字列をタイムスタンプに変換する formatDateTime(‘<timestamp>’, ‘<format>’?) toTimestamp(<string> : any, [<timestamp format> : string], [<time zone> : string])

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 集計関数

機能 パイプライン データフロー
列の個別の値のおおよその集計数を取得する approxDistinctCount(<value1> : any, [ <value2> : double ])
列の値の平均を取得する avg(<value1> : number)
条件に基づいて、列の値の平均を取得する avgIf(<value1> : boolean, <value2> : number)
集計されたグループ内の式のすべての値を配列に収集する collect(<value1> : any)
集計されたグループ内の式のすべての値を一意の配列に収集する collectUnique(<value1> : any)
値の集計カウントを取得する count([<value1> : any])
null 値を含む値の集計カウントを取得する countAll([<value1> : any])
列セットの個別値の集計カウントを取得する countDistinct(<value1> : any, [<value2> : any], …)
null 値を含む列セットの個別の値の集計カウントを取得する countAllDistinct(<value1> : any, [<value2> : any], …)
条件に基づいて、値の集計カウントを取得する countIf(<value1> : boolean, [<value2> : any])
2 つの列の間の母共分散を取得する covariancePopulation(<value1> : number, <value2> : number)
条件に基づいて、2 つの列の間の母共分散を取得する covariancePopulationIf(<value1> : boolean, <value2> : number, <value3> : number)
2 つの列の標本共分散を取得する covarianceSample(<value1> : number, <value2> : number)
条件に基づいて、2 つの列の標本共分散を取得する covarianceSampleIf(<value1> : boolean, <value2> : number, <value3> : number)
列グループの最初の値を取得する first(<value1> : any, [<value2> : boolean])
列または列セットが個別かどうかを検出する isDistinct(<value1> : any , <value1> : any)
列の尖度を取得する kurtosis(<value1> : number)
条件に基づいて、列の尖度を取得する kurtosisIf(<value1> : boolean, <value2> : number)
列グループの最後の値を取得する last(<value1> : any, [<value2> : boolean])
列の最大値を取得する max(<value1> : any)
条件に基づいて、列の値の最大値を取得する maxIf(<value1> : boolean, <value2> : any)
列の値の平均を取得する mean(<value1> : number)
条件に基づいて、列の値の平均を取得する meanIf(<value1> : boolean, <value2> : number)
列の最小値を取得する min(<value1> : any)
条件に基づいて、列の値の最小値を取得する minIf(<value1> : boolean, <value2> : any)
列の歪度を取得する skewness(<value1> : number)
条件に基づいて、列の歪度を取得する skewnessIf(<value1> : boolean, <value2> : number)
列の標準偏差を取得する stddev(<value1> : number)
条件に基づいて、列の標準偏差を取得する stddevIf(<value1> : boolean, <value2> : number)
列の母標準偏差を取得する stddevPopulation(<value1> : number)
条件に基づいて、列の母標準偏差を取得する stddevPopulationIf(<value1> : boolean, <value2> : number)
列の標本標準偏差を取得する stddevSample(<value1> : number)
条件に基づいて、列の標本標準偏差を取得する stddevSampleIf(<value1> : boolean, <value2> : number)
数値列の集計を取得する sum(<value1> : number)
数値列の個別値の集計を取得する sumDistinct(<value1> : number)
条件に基づいて、数値列の集計を取得する sumDistinctIf(<value1> : boolean, <value2> : number)
条件に基づいて、数値列の集計を取得する sumIf(<value1> : boolean, <value2> : number)
count 引数に基づいて、この列の上位 N の値を取得する topN(<column/expression> : any, <count> : long, <n> : integer)
列の分散を取得する variance(<value1> : number)
条件に基づいて、列の分散を取得する varianceIf(<value1> : boolean, <value2> : number) 
列の母分散を取得する variancePopulation(<value1> : number)
条件に基づいて、列の母分散を取得する variancePopulationIf(<value1> : boolean, <value2> : number)
列の不偏分散を取得する varianceSample(<value1> : number)
条件に基づいて、列の不偏分散を取得する varianceSampleIf(<value1> : boolean, <value2> : number)

2.8 配列関数

機能 パイプライン データフロー
配列インデックスにある要素を検索する at(<value1> : array/map, <value2> : integer/key type)
配列から個別の項目セットを返す distinct(<value1> : array)
重複をドロップした 1 つの配列の差分セットを返す except(<value1> : array, <value2> : array)
指定された述語を満たさない要素を配列から除外する filter(<value1> : array, <value2> : unaryfunction)
配列から条件に一致する最初の項目を検索する find(<value1> : array, <value2> : unaryfunction)
つまたは複数の配列を単一の配列にフラット化する flatten(<array> : array, <value2> : array …, <value2> : boolean)
項目が配列内にあるかどうかをチェックする in(<array of items> : array, <item to find> : any)
2 つの配列からの、個別の項目の交差セットを返す intersect(<value1> : array, <value2> : array)
指定された式を使用して、配列の各要素を新しい要素にマップする map(<value1> : array, <value2> : unaryfunction)
配列を、同じ長さまたは短い長さの別の配列に条件付きでマップする mapIf (<value1> : array, <value2> : binaryfunction, <value3>: binaryFunction)
指定された式を使用して、配列の各要素を新しい要素にマップする mapIndex(<value1> : array, <value2> : binaryfunction)
1 から length までループさせてその長さの配列を作成する mapLoop(<value1> : integer, <value2> : unaryfunction)
配列内の要素を累積する reduce(<value1> : array, <value2> : any, <value3> : binaryfunction, <value4> : unaryfunction)
指定された述語関数を使用して配列を並べ替える sort(<value1> : array, <value2> : binaryfunction)
配列を一連の行に展開し、すべての行内の残りの列に値を繰り返す unfold (<value1>: array)

2.9 キャッシュされた lookup 関数

機能 パイプライン データフロー
キャッシュされたシンクのキーと一致する特定のキーを使用して、キャッシュされたシンクの最初の行が検索される lookup(key, key2, …)
キャッシュされたシンクのキーと一致する特定のキーを使用して、キャッシュされたシンクの一致するすべての行が検索される mlookup(key, key2, …)
キャッシュ シンクの結果の最初の行を返す output()
キャッシュ シンクの結果の出力行セット全体を返す outputs()

2.10 日付と時刻関数

機能 パイプライン データフロー
日付またはタイムスタンプに月数を加算する formatDateTime(
addDays(formatDateTime(‘2019-10’), ‘yyyy-MM’), 32),
‘yyyy-MM’
)
addMonths(‘2019-10’,1)
最初の値が他の 2 つの値の範囲内にあるかどうかを確認する between(<value1> : any, <value2> : any, <value3> : any)
このジョブの実行を開始する現在の日付を取得する currentDate([<value1> : string])
ジョブの実行を開始する現在のタイムスタンプをローカル タイムゾーンを使用して取得する utcNow() currentTimestamp()
ミリ秒単位での日数の期間 days(<value1> : integer)
タイムスタンプから時間の値を取得する hour(<value1> : timestamp, [<value2> : string])
ミリ秒単位での時間数の期間 hours(<value1> : integer)
指定した日付から、その月の最後の日を取得する lastDayOfMonth(<value1> : datetime)
日付のミリ秒の値を取得する millisecond(<value1> : timestamp, [<value2> : string])
ミリ秒単位でのミリ秒数の期間 milliseconds(<value1> : integer)
タイムスタンプから分の値を取得する minute(<value1> : timestamp, [<value2> : string])
ミリ秒単位での分数の期間 minutes(<value1> : integer)
日付またはタイムスタンプから月の値を取得する month(<value1> : datetime)
2 つの日付の間の月数を取得する monthsBetween(<from date/timestamp> : datetime, <to date/timestamp> : datetime, [<roundoff> : boolean], [<time zone> : string])
日付の秒の値を取得する second(<value1> : timestamp, [<value2> : string])
ミリ秒単位での秒数の期間 seconds(<value1> : integer)
日付またはタイムスタンプから日数を減算する  addDays(formatDateTime(‘2019-10-11’), ‘yyyy-MM-dd’), -1) subDays(toDate(‘2019-10-11’), 1)
日付またはタイムスタンプから月数を減算する formatDateTime(
addDays(formatDateTime(‘2019-10’), ‘yyyy-MM’), -1),
‘yyyy-MM’
)
subMonths(toDate(‘2019-10’), 1)
指定した日付から、その年の何週目かを取得する weekOfYear(<value1> : datetime)
ミリ秒単位での週数の期間 weeks(<value1> : integer)
日付の年の値を取得する year(<value1> : datetime)

2.11 式関数

機能 パイプライン データフロー
数値の絶対値 abs(<value1> : number)
逆コサイン値を計算する acos(<value1> : number)
逆サイン値を計算する asin(<value1> : number)
キーとしてアサート ID を含む行のすべてのエラー メッセージのマップを返す assertErrorMessages()
逆正接値を計算する atan(<value1> : number)
座標で指定された、平面の正の x 軸と点の間の角度をラジアンで返す atan2(<value1> : number, <value2> : number)
最初の値が他の 2 つの値の範囲内にあるかどうかを確認する 数値、文字列値、datetime 値を比較できる between(<value1> : any, <value2> : any, <value3> : any)
整数型間でのビット AND 演算子である & 演算子と同じである bitwiseAnd(<value1> : integral, <value2> : integral)
整数型間でのビット OR 演算子である | 演算子と同じである bitwiseOr(<value1> : integral, <value2> : integral)
整数型間でのビット OR 演算子である | 演算子と同じである bitwiseXor(<value1> : any, <value2> : any)
さまざまなプリミティブ データ型の列セットの Blake2 ハッシュを計算する blake2b(<value1> : integer, <value2> : any, …)
さまざまなプリミティブ データ型の列セットの Blake2 ハッシュを計算する blake2bBinary(<value1> : integer, <value2> : any, …)
交互条件に基づいて、2 つの値のいずれかを適用する case(<condition> : boolean, <true_expression> : any, <false_expression> : any, …)
数値の立方根を計算する cbrt(<value1> : number)
特定の数値以上の最小の整数を返す ceil(<value1> : number)
一連の入力から、最初の null でない値を返す coalesce(<value1> : any, …)
ストリームのすべての出力列の名前を取得する columnNames(<value1>columnNames( : string, i><value1> : boolean)
ストリームのすべての出力列の値を取得する columns([<stream name> : string])
同じ型の 2 つの値を比較する compare(<value1> : any, <value2> : any)
可変数の文字列を連結する concat(<this> : string, <that> : string, …)
コサイン値を計算する concatWS(<separator> : string, <this> : string, <that> : string, …)
値の双曲線コサインを計算する cos(<value1> : number)
さまざまなプリミティブ データ型の列セットの CRC32 ハッシュを指定のビット長で計算する cosh(<value1> : number)
ラジアンを角度に変換する crc32(<value1> : any, …)
ラジアンを角度に変換する degrees(<value1> : number)
文字列の左側から任意の文字数の文字を削除する dropLeft(<value1> : string, <value2> : integer)
文字列の右側から任意の文字数の文字を削除する dropRight(<value1> : string, <value2> : integer)
大文字と小文字の区別を無視する等価比較演算子 equalsIgnoreCase(<value1> : string, <value2> : string)
形式に従って、文字列をエスケープする escape(<string_to_escape> : string, <format> : string)
結果は文字列からの式である expr(<expr> : string)
数値の階乗を計算する factorial(<value1> : number)
常に false 値を返す bool(0) false()
特定の数値以下の最大の整数を返す floor(<value1> : number)
null 値をスキップした入力値のリストの中の最大値を返す greatest(<value1> : any, …)
ストリームでの名前で列の値をチェックする hasColumn(<column name> : string, [<stream name> : string])
指定された ID のアサートがエラーとしてマークされているかどうかを確認する hasError([<value1> : string])
複数の入力を指定した場合は、最初の not null 項目が返される iifNull(<value1> : any, [<value2> : any], …)
すべての単語の最初の文字を大文字に変換する initCap(<value1> : string)
文字列内の部分文字列の位置 (1 を基準とする) を見つける instr(<string> : string, <substring to find> : string)
行が削除用にマークされているかどうかをチェックする isDelete([<value1> : integer])
行がエラーとしてマークされているかどうかをチェックする isError([<value1> : integer])
行を無視するようにマークされているかどうかをチェックする isIgnore([<value1> : integer])
行が挿入用にマークされているかどうかをチェックする isInsert([<value1> : integer])
行がルックアップで一致するかどうかをチェックする isMatch([<value1> : integer])
値が NULL かどうかをチェックする isNull(<value1> : any)
行が更新用にマークされているかどうかをチェックする isUpdate([<value1> : integer])
行が挿入用にマークされているかどうかをチェックする isUpsert([<value1> : integer])
2 つの文字列の間の JaroWinkler 距離を取得する jaroWinkler(<value1> : string, <value2> : string)
比較 (以下) 演算子 <= 演算子と同じである least(<value1> : any, …)
インデックス 1 から開始して指定した文字数の部分文字列を抽出する left(<string to subset> : string, <number of characters> : integral)
文字列の長さを返す length(‘<collection>’) length(<value1> : string)
2 つの文字列の間のレーベンシュタイン距離を取得する levenshtein(<from string> : string, <to string> : string)
パターンは文字通り一致する文字列である like(<string> : string, <pattern match> : string)
特定の位置から開始して、文字列内の部分文字列の位置 (1 を基準とする) を見つける locate(<substring to find> : string, <string> : string, [<from index – 1-based> : integral])
対数の値を計算する log(<value1> : number, [<value2> : number])
10 を底とする対数の値を計算する log10(<value1> : number)
特定の長さになるまで、指定した埋め込み文字で文字列の左側を埋め込みる lpad(<string to pad> : string, <final padded length> : integral, <padding> : string)
文字列の先頭文字を左から削除する ltrim(<string to trim> : string, [<trim characters> : string])
さまざまなプリミティブ データ型の列セットの MD5 ハッシュを計算し、32 文字の 16 進数の文字列を返す md5(<value1> : any, …)
数値のペアの剰余である % 演算子と同じである mod(<value1> : any, <value2> : any)
数値の符号を反転する negate(<value1> : number)
次の固有なシーケンスを返す nextSequence()
文字列値を個別にアクセント記号が付いた Unicode 文字に正規化する normalize(<String to normalize> : string)
NULL 値を返す null()
数値のペアの正の剰余である pMod(<value1> : any, <value2> : any)
入力行が含まれている現在のパーティション ID を返す partitionId() 
角度をラジアンに変換する power(<value1> : number, <value2> : number) 
パーティション内に省略可能なシード値を指定すると、乱数を返す radians(<value1> : number)
指定された正規表現パターンに一致する部分文字列を抽出する random(<value1> : integral) 
指定された正規表現パターンに一致する部分文字列を抽出する regexExtract(<string> : string, <regex to find> : string, [<match group 1-based index> : integral])
指定された正規表現パターンに文字列が一致するかどうかをチェックする regexMatch(<string> : string, <regex to match> : string)
指定の文字列内の正規表現パターンのすべての出現を別の部分文字列に置換する regexReplace(<string> : string, <regex to find> : string, <substring to replace> : string)
文字列を正規表現に基づく区切り文字に基づいて分割し、文字列の配列を返す regexSplit(<string to split> : string, <regex expression> : string)
文字列を反転する reverse(<value1> : string)
指定した文字数の部分文字列を右から抽出する right(<string to subset> : string, <number of characters> : integral)
指定された正規表現パターンに文字列が一致するかどうかをチェックする rlike(<string> : string, <pattern match> : string) 
省略可能な桁数と省略可能な丸めモードで数値を丸める round(<number> : number, [<scale to round> : number], [<rounding option> : integral])
特定の長さになるまで、指定した埋め込み文字で文字列の右側を埋め込みる rpad(<string to pad> : string, <final padded length> : integral, <padding> : string)
文字列の末尾文字を右から削除する rtrim(<string to trim> : string, [<trim characters> : string])
さまざまなプリミティブ データ型の列セットの SHA-1 ハッシュを計算し、40 文字の 16 進数の文字列を返す sha1(<value1> : any, …) 
さまざまなプリミティブ データ型の列セットの SHA-2 ハッシュを指定のビット長で計算する sha2(<value1> : integer, <value2> : any, …)
サイン値を計算する sin(<value1> : number)
双曲線サイン値を計算する sinh(<value1> : number)
文字列の soundex コードを取得する soundex(<value1> : string)
数値の平方根を計算する sqrt(<value1> : number) 
区切り記号が count 回出現する前の substring を抽出する substringIndex(<string to subset><delimiter>substringIndex( : string, : string, <count of delimiter occurences> : integral])
タンジェント値を計算する tan(<value1> : number)
双曲線タンジェント値を計算する tanh(<value1> : number)
文字列内のある文字セットを別の文字セットで置換する translate(<string to translate> : string, <lookup characters> : string, <replace characters> : string) 
常に true 値を返す bool(1) true()
列の型を照合する typeMatch(<type> : string, <base type> : string)
形式に従って、文字列を非エスケープする unescape(<string_to_escape> : string, <format> : string) 
XOR 論理演算子 ^ 演算子と同じである xor(<value1> : boolean, <value2> : boolean) 

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連載シリーズはこちら