メインコンテンツまでスキップ

Salesforce の数式フィールドを段階的に取り込む

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。「Databricks プレビューの管理」を参照してください。

ちなみに、 LakeFlow Connect Salesforce 数式フィールドを段階的に取り込みません。 代わりに、パイプラインの実行ごとに数式フィールドのスナップショットを取得し、それらをテーブルの残りの部分と結合します。ただし、増分式フィールドの取り込みを有効にすると、パフォーマンスが大幅に向上し、コストが削減されることがよくあります。

増分式フィールド取り込みの仕組み

無理のないスナップショット アプローチを使用すると、Salesforce 取り込みパイプラインの最終結果は一連のストリーミング テーブル (ソース テーブルごとに 1 つ) になります。 代わりに増分数式フィールドの取り込みを使用する場合、コネクタは非数式フィールドを保持する中間ストリーミング テーブルを作成しますが、最終結果は数式フィールドと非数式フィールドの両方を含むマテリアライズドビューになります。

Salesforce カーソル列 ( SystemModstampLastModifiedDateなど) は数式フィールドを追跡しません。数式の出力が変更されても、Salesforce はカーソル列を更新しません。デフォルトのスナップショット アプローチを使用する場合、数式フィールドは取り込みパイプラインによって取得されずに、自動的に変更される可能性があります。ただし、増分式フィールドの取り込みを使用する場合、コネクタは式をマテリアライズドビューとして再作成し、結果を増分的に再計算します。

Salesforce で数式以外のフィールドが削除されると、宛先の対応する列は非アクティブとしてマークされますが、削除されません。ソースに再び出現すると、重複列エラーが発生してパイプラインが失敗します。対照的に、数式フィールドが削除されると、その数式フィールドは最終的なマテリアライズドビューから削除されます。 後でフィールドがソースに再表示されると、そのフィールドは最新のデータとともにマテリアライズドビューに取り込まれます。

Salesforce で数値を返す数式を作成するときに、スケール (小数点以下の桁数) を指定できます。Salesforce は、数式の結果を指定された小数点以下の桁数に自動的に丸めます。累積的な丸め誤差を回避するために、Databricks コネクタはこの動作を再現しません。

制限事項

このセクションの制限は、増分数式フィールドを使用して取り込みパイプラインを作成するときに適用されます。

一般的な制限

  • 既存のパイプラインでこの機能を有効にすることはできません。新しいパイプラインを作成する必要があります。
  • この機能は API のみです。Databricks UI を使用して構成することはできません。
  • 最終的なマテリアライズドビューはSCDタイプ 2 をサポートしません。ただし、中間ストリーミング テーブルで非数式フィールドの履歴を表示できます。

サポートされていない数式フィールドと関数

  • 現在パイプラインに取り込まれていないテーブルまたは列を参照するフィールドは、増分的に取り込まれません。

  • 次の数式関数はサポートされていません。

    • GETSESSIONID
    • RUNASUSER
    • CURRENCYRATE
    • ISCLONE
    • VLOOKUP
    • GETRECORDIDS
    • PARENTGROUPVAL
    • PREVGROUPVAL
    • PRIORVALUE
    • ISCHANGED
    • ISNEW
    • PREDICT
    • MLPREDICT
    • IMAGEPROXYURL
    • JUNCTIONIDLIST
    • LINKTO
    • LINKGROUPVAL
    • REQUIRESCRIPT
    • URLFOR
    • GEOLOCATION
    • DISTANCE
    • HTMLENCODE
    • JSENCODE
    • JSINHTMLENCODE
    • URLENCODE
    • INCLUDE
  • ロールアップ集計フィールドとそれを参照する数式はサポートされていません。

  • グローバル エンティティ (たとえば、 $User$Profile ) はサポートされていません。

  • arg2が静的な整数でない限り、 ROUND(arg1, arg2)を使用する数式はサポートされません。

  • 精度(30,18)の 2 つの小数を乗算する数式など、出力が精度decimal(38,18)を超える数式。これらによりパイプラインが失敗します。除外するには、 exclude_columns構成を使用します。「取り込む列の選択」を参照してください。

曖昧な結果をもたらす関数

次の関数は、Databricks と Salesforce で異なる結果をもたらす可能性があります。

関数

行動の違い

LEN(TEXT(<decimal_number>))、 のような LEN("123.45")

Databricks は Salesforce よりも精度が高いため、この関数は Databricks と Salesforce で異なる値を返します。

CHR(x)

Salesforce では、この関数はxで指定された ASCII コードの文字を返します。Databricks では、ASCII コードがxを 256 で割った値に等しい文字を返します。

INITCAP("_mrSmith is _ok")

Salesforce では、この関数はアルファベット以外の文字を無視して各単語の最初の文字を大文字にして、 "_MrSmith Is Ok"を生成します。Databricks では、この関数は、各単語の最初の文字が文字である場合にのみその文字を大文字にして、 "_mrSmith Is _ok"を生成します。

FORMAT_DURATION

Salesforce では、2 つの日時入力の時間がちょうど 30 分離れている場合、数式は期待される0:00:30:00ではなく0:00:29:59を出力します。この制限は Databricks には存在しないため、ソース値と宛先値の間に 1 秒のギャップが生じる可能性があります。

増分式フィールドを使用してパイプラインを作成する

増分数式フィールドの取り込みを有効にするには、構成フラグpipelines.enableSalesforceFormulaFieldsMVComputation: trueを使用して新しいパイプラインを作成する必要があります。既存のパイプラインでこの機能を有効にすることはできません。コード例については、 「例: 数式フィールドを段階的に取り込む」を参照してください。

エラー追跡テーブルを理解する

増分数式フィールドの取り込みを有効にすると、コネクタはトラブルシューティングに役立つ追加のテーブルを作成します。増分数式フィールド フラグが設定されている場合は、エラーがない場合でもこのテーブルが常に表示されます。エラー追跡テーブル (名前: <pipeline-id>_formula_fields_error_reasons ) には次の列があります。

  • <source-object>: Salesforce 内のソース オブジェクトの名前。
  • <formula-field>: 数式フィールドの名前。
  • error: 数式が増分的に取り込まれなかった理由を説明するエラー メッセージ。

宛先テーブルの数式フィールドにNULL値が表示される場合は、エラー トラッキング テーブルをクエリして、フィールドが増分的に取り込まれなかった理由を把握します。詳細については、 「数式フィールドの値がNULLとして表示される (増分取り込み)」を参照してください。