マッピング データ フローで式を構築する

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

マッピング データ フローでは、多くの変換プロパティが式として入力されます。 これらの式は、実行時に Spark データ型に評価される列の値、パラメーター、関数、演算子、リテラルで構成されます。 マッピング データ フローには、これらの式の構築を支援する、式ビルダーと呼ばれる専用のエクスペリエンスがあります。 IntelliSense のコード補完を利用して、強調表示、構文チェック、オートコンプリートを行うことで、式ビルダーはデータ フローを簡単に構築できるように設計されています。 この記事では、式ビルダーを使用してビジネス ロジックを効率よく構築する方法について説明します。

Expression Builder

式ビルダーを開く

式ビルダーを開くための複数のエントリ ポイントがあります。 これらはすべて、データ フロー変換の特定のコンテキストに依存します。 最も一般的なユース ケースは、ユーザーがデータ フロー式言語を使用して列を作成または更新する派生列集計のような変換の場合です。 式ビルダーを開くには、列の一覧の上にある [Open expression builder](式ビルダーを開く) を選択します。 列のコンテキストを選択して、その式に対する式ビルダーを直接開くこともできます。

Open Expression Builder derive

フィルターのような一部の変換では、青い式テキスト ボックスをクリックすると、式ビルダーが開きます。

Blue expression box

一致条件またはグループ化の条件で列を参照するときは、式で列から値を抽出できます。 式を作成するには、 [計算列] を選択します。

Computed column option

式またはリテラル値が有効な入力である場合は、 [動的なコンテンツの追加] を選択して、リテラル値に評価される式を構築します。

Add dynamic content option

式の要素

マッピング データ フローでは、列の値、パラメーター、関数、ローカル変数、演算子、リテラルで式を構成できます。 これらの式は、文字列、ブール値、整数などの Spark データ型に評価される必要があります。

Expression elements

関数

マッピング データ フローには、式で使用できる組み込みの関数と演算子があります。 使用できる関数の一覧については、マッピング データ フローの言語リファレンスに関するページを参照してください。

ユーザー定義関数 (プレビュー)

マッピング データ フローでは、ユーザー定義関数の作成と使用がサポートされています。 ユーザー定義関数を作成して使用する方法については、ユーザー定義関数に関する記事をご覧ください。

配列インデックスのアドレス指定

配列型を返す列または関数を扱う場合は、角かっこ ([]) を使用して特定の要素にアクセスします。 インデックスが存在しない場合、式は NULL と評価されます。

Expression Builder array

重要

マッピング データ フローでは、配列は 1 から始まります。つまり、最初の要素はインデックス 1 で参照されます。 たとえば、myArray[1] では、"myArray" という名前の配列の最初の要素にアクセスします。

入力スキーマ

データ フローのソースのいずれかで定義済みのスキーマが使用されている場合、多くの式で名前により列を参照できます。 スキーマの誤差を利用している場合は、byName() または byNames() 関数を使用して明示的に列を参照したり、列のパターンを使用して一致させたりできます。

特殊文字を含む列名

特殊文字またはスペースを含む列名がある場合、それらを式で参照するには、その名前を中かっこで囲みます。

{[dbo].this_is my complex name$$$}

パラメーター

パラメーターは、実行時にパイプラインからデータ フローに渡される値です。 パラメーターを参照するには、[式の要素] ビューでパラメーターを選択するか、名前の前にドル記号を付けて参照します。 たとえば、parameter1 という名前のパラメーターは $parameter1 によって参照されます。 詳細については、「マッピング データ フローをパラメーター化する」を参照してください。

キャッシュされた検索

キャッシュされた検索を使用すると、キャッシュされたシンクの出力をインラインで参照できます。 lookup()outputs() の各シンクで使用できる関数は 2 つあります。 これらの関数を参照する構文は cacheSinkName#functionName() です。 詳細については、シンクのキャッシュに関する記事を参照してください。

lookup() を使用すると、現在の変換で一致する列がパラメーターとして取り込まれ、キャッシュ シンクでキー列に一致する行に等しい複合列が返されます。 返される複合列には、キャッシュ シンクにマップされている各列のサブ列が含まれます。 たとえば、コードと Message という列に一致するキー列を持つエラー コード キャッシュ シンク errorCodeCache があるとします。 errorCodeCache#lookup(errorCode).Message を呼び出すと、渡されたコードに対応するメッセージが返されます。

outputs() を使用すると、パラメーターは取得されず、複合列の配列としてキャッシュ シンク全体が返されます。 これは、キー列がシンク内で指定されている場合は呼び出すことができず、キャッシュ シンクに数行ある場合にのみ使用する必要があります。 一般的なユース ケースでは、増分キーの最大値が追加されます。 キャッシュされた単一の集計行 CacheMaxKey に列 MaxKey が含まれている場合に最初の値を参照するには、CacheMaxKey#outputs()[1].MaxKey を呼び出します。

Cached lookup

ローカル

複数の列でロジックを共有する場合や、ロジックをコンパートメント化する場合は、ローカル変数を作成できます。 ローカルは、次の変換へとダウンストリームに伝達されないロジックのセットです。 式ビルダーでローカルを作成するには、 [Expression elements](式の要素) に移動して、 [Locals](ローカル) を選択します。 [新規作成] を選択して、新しく作成します。

Create local

ローカルでは、関数、入力スキーマ、パラメーター、他のローカルを含む任意の式要素を参照できます。 他のローカルを参照する場合は順序が重要であり、参照されるローカルが現在のローカルより "上" にある必要があります。

Create local 2

変換でローカルを参照するには、[式の要素] ビューでローカルを選択するか、名前の前にコロンを付けて参照します。 たとえば、local1 という名前のローカルは、:local1 によって参照されます。 ローカル定義を編集するには、式の要素ビューでそれをポイントし、鉛筆アイコンを選択します。

Using locals

式の結果のプレビュー

デバッグ モードがオンになっている場合は、デバッグ クラスターを対話的に使用して、式の評価をプレビューできます。 データ プレビューの横にある [最新の情報に更新] を選択すると、データ プレビューの結果が更新されます。 入力列を指定して、各行の出力を確認できます。

In-progress preview

文字列補間

式要素を使用する長い文字列を作成する場合は、文字列補間を使用して、複雑な文字列ロジックを簡単に構築できます。 文字列補間を使用すると、パラメーターをクエリ文字列に含めるときの文字列連結の多用を回避できます。 リテラル文字列テキストを式と共に囲むには、二重引用符を使用します。 式関数、列、およびパラメーターを含めることができます。 式の構文を使用するには、それを中かっこで囲みます。

文字列補間のいくつかの例を次に示します。

  • "My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"

  • "select * from {$tablename} where orderyear > {$year}"

  • "Total cost with sales tax is {round(totalcost * 1.08,2)}"

  • "{:playerName} is a {:playerRating} player"

注意

SQL ソース クエリで文字列補間構文を使用する場合、クエリ文字列は、'/n' を含まない 1 行にする必要があります。

式のコメント化

単一行および複数行コメントの構文を使用して、式にコメントを追加します。

有効なコメントの例を次に示します。

  • /* This is my comment */

  • /* This is a

  • multi-line comment */

式の先頭にコメントを配置すると、変換式を文書化するための変換テキスト ボックスにコメントが表示されます。

Comment in the transformation text box

正規表現

多くの式言語関数は、正規表現構文を使用します。 正規表現関数を使用する場合、式ビルダーでは、円記号 (\) をエスケープ文字シーケンスとして解釈することが試みられます。 正規表現で円記号を使用するときは、正規表現全体をバッククォート (`) 内に入れるか、円記号を二重で使用します。

バッククォートを使用する例を次に示します。

regex_replace('100 and 200', `(\d+)`, 'digits')

ダブル スラッシュを使用する例を次に示します。

regex_replace('100 and 200', '(\\d+)', 'digits')

キーボード ショートカット

式ビルダーで使用できるショートカットの一覧を次に示します。 IntelliSense のほとんどのショートカットを、式の作成時に使用できます。

  • Ctrl + K、Ctrl + C:行全体をコメントにします。
  • Ctrl + K、Ctrl + U:コメントを解除します。
  • F1:エディターのヘルプ コマンドを提供します
  • Alt + 下方向キー:現在の行を下に移動します。
  • Alt + 上方向キー:現在の行を上に移動します。
  • Ctrl + Space キー:コンテキスト ヘルプを表示します。

よく使用される式

日付またはタイムスタンプに変換する

タイムスタンプ出力に文字列リテラルを含めるには、toString() で変換をラップします。

toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')

ミリ秒をエポックから日付またはタイムスタンプに変換するには、toTimestamp(<number of milliseconds>) を使用します。 時刻が秒単位で指定されている場合は、1,000 を掛けます。

toTimestamp(1574127407*1000l)

前の式の最後にある末尾の "l" は、インライン構文としての long 型への変換を示しています。

エポックまたは Unix 時刻から時刻を検索する

toLong( currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS') ) * 1000l

データ フローの時刻の評価

データ フローは、ミリ秒単位まで処理します。 2018-07-31T20:00:00.2170000 の場合は、出力に 2018-07-31T20:00:00.217 が表示されます。 サービス用のポータルでは、[現在のブラウザーの設定] にタイムスタンプが表示されます。217 が表示されない可能性がありますが、データフローを最後まで実行すると、217 (ミリ秒部分) も同様に処理されます。 toString(myDateTimeColumn) を式として使用すると、データを完全な精度でプレビュー表示することができます。 実際上は、datetime を文字列ではなく datetime として処理します。

データ変換式の作成を開始する。