Openflow Connector for Salesforce Bulk API:Salesforce式フィールド

注釈

このコネクタは、 Snowflakeコネクタ規約 に従うものとします。

このトピックでは、サポートされている関数と制限を含め、|SalesforceBulkAPIOF|がSalesforceの式フィールドをSnowflake SQLビューに変換する方法について説明します。

式ビューの仕組み

:ui:`Enable Views Creation`が``true``に設定されている場合、コネクタは数式フィールドを持つオブジェクトごとに以下を実行します。

  1. Describe APIを介して、Salesforceオブジェクトのメタデータから数式を取得します。

  2. 各数式を解析し、同等のSnowflake SQLに変換します。

  3. ベーステーブルの非数式列と、計算列として変換された数式を組み合わせた``CREATE OR REPLACE VIEW``ステートメントを生成します。

  4. Snowflakeに対してDDLを実行し、ビューを作成または更新します。

結果のビューの名前は``<Object Type>_FORMULA_VW``になります。たとえば、``Account``オブジェクトは``ACCOUNT_FORMULA_VW``という名前のビューを生成します。このビューをクエリして、複製されたデータと一緒に式フィールド値を取得できます。

ビューは、コネクタがソースオブジェクトのスキーマ変更を検出するたびに自動的に更新されるため、式の定義が確実にSalesforceと同期するようになります。

クロスオブジェクト式フィールド

Salesforceの式は、関係の走査を使用して関連オブジェクトのフィールドを参照できます(例: Account.Owner.Name)。コネクタは、ビュー定義に``LEFT JOIN``句を生成することで、これらのクロスオブジェクト参照をサポートします。各関係の走査は、Snowflakeの対応する関連テーブルへの結合を生成します。

クロスオブジェクト式を正しく動作させるには、関連するオブジェクトもコネクタによって複製される必要があります。コネクタは、変換時に参照テーブルがSnowflakeに存在するかどうかを確認しません。関連するオブジェクトが同期されていない場合、生成された``CREATE OR REPLACE VIEW``ステートメントはSnowflakeに存在しないテーブルを参照し、ビューの作成は失敗します。これを解決するには、式フィールドが参照するすべての関連オブジェクトが:ui:`Filter`パラメーターに含まれていることを確認してください。参照されるテーブルが存在するようになった後、次のコネクタの実行時にビューが自動的に再作成されます。

式ビューの列コメント

生成されたビューの各数式列には、SQL ``COMMENT``アノテーションが含まれます。

  • 変換が成功した式の場合、コメントには元のSalesforce数式が含まれます。

  • 変換できなかった式の場合、コメントには失敗理由コードが含まれます。

Snowflakeで``DESCRIBE VIEW <view_name>``を実行することで、これらのコメントを確認できます。

サポートされている式関数

次のSalesforce式関数は、同等のSnowflake SQLに変換されます。

カテゴリ

Salesforce関数

Snowflakeにおける同等表記

論理的

IF

CASE WHEN ... THEN ... ELSE ... END

論理的

CASE

CASE ... WHEN ... THEN ... ELSE ... END

論理的

AND / OR / NOT

AND / OR / NOT

Null処理

ISBLANK

LENGTH(COALESCE(expr, '')) = 0

Null処理

ISNULL

expr IS NULL

Null処理

NULLVALUE

COALESCE

Null処理

BLANKVALUE

CASE WHEN ... IS NULL OR LENGTH(...) = 0 THEN ... END

テキスト

LEFT

LEFT

テキスト

RIGHT

RIGHT

テキスト

MID

SUBSTR

テキスト

LEN

LENGTH

テキスト

SUBSTITUTE

REPLACE

テキスト

TRIM

TRIM

テキスト

UPPER

UPPER

テキスト

LOWER

LOWER

テキスト

CONTAINS

CONTAINS

テキスト

BEGINS

STARTSWITH

テキスト

FIND

CHARINDEX

テキスト

LPAD

LPAD

テキスト

RPAD

RPAD

テキスト

BR

改行文字リテラル

変換

TEXT

CAST(... AS STRING)

変換

VALUE

TRY_CAST(... AS NUMBER)

数学

ABS

ABS

数学

ROUND

ROUND

数学

CEILING

CEIL

数学

FLOOR

FLOOR

数学

MOD

MOD

数学

SQRT

SQRT

数学

MAX

GREATEST

数学

MIN

LEAST

数学

LOG

LOG(10, ...)

数学

EXP

EXP

数学

LN

LN

日付と時刻

NOW

CURRENT_TIMESTAMP()

日付と時刻

TODAY

CURRENT_DATE()

日付と時刻

YEAR

YEAR

日付と時刻

MONTH

MONTH

日付と時刻

DAY

DAY

日付と時刻

DATEVALUE

TO_DATE

日付と時刻

DATETIMEVALUE

TO_TIMESTAMP

日付と時刻

ADDMONTHS

DATEADD(MONTH, ...)

選択リスト

ISPICKVAL

COALESCE(field, '') = COALESCE(value, '')

関数に加えて、次の演算子がサポートされています。

  • 算術: +-*/``^``(指数は``POWER``に変換)

  • 比較: ===!=<><<=>>=

  • 論理: ANDOR&&||

  • 文字列の結合: ``&``(``COALESCE``のnull処理を使用して``||``に変換)

  • 単項: -``(否定)、``NOT

サポートされていない式の構成要素

式における以下の構成要素はまだサポートされていません。関数と構成要素の追加サポートは、将来のリリースで追加される予定です。式がこれらのいずれかを使用する場合、ビューの対応する列は``NULL``を返し、列のコメントは失敗の理由を示します。

失敗の理由

説明

FUNCTION_NOT_SUPPORTED

この式は、Snowflakeに同等のものがない関数、またはSalesforce UIに固有の関数を使用します。これには次が含まれます: IMAGEHYPERLINKURLFORHTMLENCODEJSENCODELINKTOGEOLOCATIONDISTANCEVLOOKUPREGEXPREDICTGETSESSIONIDGETRECORDIDSREQUIRESCRIPTISCHANGEDISNEWISCLONEPRIORVALUE

GLOBAL_VARIABLE_NOT_SUPPORTED

この式は、$User.Name$Organization.Name、または``$Profile.Name``のようなSalesforceグローバル変数を参照します。これらの変数と同等のものは、Snowflakeに存在しません。

FORMULA_CHAIN_NOT_SUPPORTED

この式は、別の式フィールドを参照します。連鎖した式の参照(別の式フィールドに依存する式フィールド)はサポートされていません。

ROLLUP_NOT_SUPPORTED

これは、式フィールドではなくロールアップ集計フィールドです。ロールアップ集計では子記録からデータが集計されるため、単純なSQLビューとして表現することはできません。

LOOKUP_NOT_SYNCED

この式は、Salesforceオブジェクトメタデータから解決できない関係を参照します。これは通常、式の関係名がオブジェクト内にある既知の関係のいずれとも一致しない場合に発生します。

ID_FORMAT_MISMATCH

この式には、ハードコードされた15文字のSalesforce IDが含まれています。Salesforceは内部的に15文字のIDsを使用しますが、Bulk APIは18文字のIDsを返します。ハードコードされた15文字のIDsを含む式を確実に変換することはできません。

COMPOUND_FIELD_REFERENCE

この式は、Snowflakeに単一の列として保存されない複合フィールド(``MailingAddress``など)を参照します。

PARSE_ERROR

数式を解析できなかったことを意味します。これは、コネクタがまだ認識していない構文であることを示している可能性があります。

UNSUPPORTED_SYNTAX

認識はされるものの変換できない構文構造が使用されていることを意味します(たとえば、引数が3つ未満の``IF``関数)。