9.12. Salesforce 翻訳者


Salesforce のトランスレーターを使用して Salesforce.com アカウントに対して SELECTDELETEINSERT 、UPSERT、 および UPDATE 操作を実行します。

salesforce

タイプ name salesforce によって認識されるトランスレーターは Salesforce API 37.0 以降と連携します。

Expand
表9.8 実行プロパティー
名前説明デフォルト

MaxBulkInsertBatchSize

一括挿入の挿入に使用するバッチサイズ。

2048

SupportsGroupBy

GROUP BY Pushdown を有効にします。SOQL でエラーが発生する 2000 行を超える行を返すなど、集計によって Data Virtualization プロセスグループを設定する場合は false に設定します。

true

Salesforce トランスレーターはメタデータをインポートできます。

Expand
表9.9 プロパティーのインポート
プロパティー名説明必須デフォルト

NormalizeNames

インポーターが引用解除を使用できるようにオブジェクト/フィールド名の変更を試みる場合。

false

true

excludeTables

テーブル名に一致する大文字と小文字を区別しない正規表現は、インポートから除外します。テーブル名の取得後に適用されます。負の先読み(?!<inclusion pattern>)を使用して、包含フィルターとして機能します。

false

該当なし

includeTables

テーブル名に対して一致する大文字と小文字を区別しない正規表現は、インポート時に含まれます。テーブル名がソースから取得された後に適用されます。

false

該当なし

importStatstics

REST API explain plan 機能を使用して、インポート中にカードを取得します。

false

false

ModelAuditFields

Audit フィールドをモデルに追加します。これには、CreatedXXX、LastModifiedXXX、および SystemModstamp フィールドが含まれます。

false

false

注記: インポート中に includeTables パターンと excludeTables パターンの両方が存在する場合、includeTables パターンが最初に一致すると、excludePatterns が適用されます。

注記

構築したもの以外の API バージョンへの接続が必要な場合は、既存の接続ペアの使用を試みることがありますが、場合によっては(とくに古い Java API から後のリモート api にアクセスする場合など)、これは不可能であり、接続がハングする内容が発生します。

エクステンションメタデータプロパティー

Salesforce はリレーショナルデータベースではありませんが、Data Virtualization は Saleforce データをテーブルや手順などのリレーショナルデータベースにマッピングする方法を提供します。Salesforce の SObject にマップする Data Virtualization VDB の DDL を使用して外部テーブルを定義できます。ランタイム時に、このテーブルを SObject に解釈するには、Data Virtualization は追加のメタデータでこのテーブル定義を分離またはタグ付けします。たとえば、テーブルは以下の例のように定義されます。

CREATE FOREIGN TABLE Pricebook2 (
	Id string,
	Name string,
	IsActive boolean,
	IsStandard boolean,
	Description string,
	IsDeleted boolean)
	OPTIONS (
	  UPDATABLE 'TRUE',
	  "teiid_sf:Supports Query" 'TRUE');
Copy to Clipboard Toggle word wrap

上記の例では、プロパティー "teiid_sf:Supports Query"TRUE に設定されている OPTIONS 句のプロパティーは、このテーブルに対して SELECT コマンドを実行できることを示しています。以下の表は、Salesforce スキーマで使用できるメタデータエクステンションプロパティーを示しています。

Expand
プロパティー名説明必須デフォルト適用先

Query のサポート

テーブルに対して SELECT コマンドを実行できます。

false

true

テーブル

Retrieve をサポートします。

テーブルに対して実行される SELECT コマンドの結果を取得できます。

false

true

テーブル

SQL の処理

Salesforce はリレーショナルデータベースと同じ機能セットを提供しません。たとえば、Salesforce はテーブル間の任意の参加をサポートしません。ただし、Data Virtualization Query Planner と組み合わせて、Salesforce コネクターは Data Virtualization のほとんどの SQL 構文機能を使用できます。Salesforce Connector は、使用可能な機能に応じて、可能な限りコマンドを Salesforce に「プッシュ」して SQL コマンドを実行します。Salesforce Connector が指定の SQL コンストラクトを明示的に使用できないと、Data Virtualization は自動的に追加のデータベース機能を提供します。特定の SQL 機能を Salesforce にプッシュできない場合、Data Virtualization は実行できる機能をプッシュし、Salesforce から一連のデータを取得します。その後、Data Virtualization は追加機能を評価し、元のデータセットのサブセットを作成します。最後に、Data Virtualization は結果をクライアントに渡します。

GROUP BY 句でクエリーを発行し、queryMore がサポートされていないことを示す Salesforce エラーを受信し、制限を追加するか、または実行プロパティー SupportsGroupByfalse に設定できます。

SELECT array_agg(Reports) FROM Supervisor where Division = 'customer support';
Copy to Clipboard Toggle word wrap

Salesforce や Salesforce Connector は、array_agg() スカラーをサポートしていません。ただし、どちらも CompareCriteriaEquals クエリーと互換性があるため、コネクターはこのクエリーを受信するクエリーを Salesforce に変換します。

SELECT Reports FROM Supervisor where Division = 'customer support';
Copy to Clipboard Toggle word wrap

array_agg()関数は、Data Virtualization Query Engine によってコネクターによって返される結果セットに適用されます。

コネクターに渡される SQL を処理するため、Salesforce アプリケーションへの複数の呼び出しが行われることがあります。

DELETE From Case WHERE Status = 'Closed';
Copy to Clipboard Toggle word wrap

Salesforce の API からオブジェクトの削除は、オブジェクト ID でのみ削除できます。そのために、Salesforce コネクターは最初にクエリーを実行して正しいオブジェクトの ID を取得し、次にこれらのオブジェクトを削除します。そのため、上記の DELETE コマンドは以下のコマンド 2 つになります。

SELECT ID From Case WHERE Status = 'Closed';
DELETE From Case where ID IN (<result of query>);
Copy to Clipboard Toggle word wrap

注記: Salesforce API DELETE 呼び出しは SQL で表現されていませんが、上記は同等の SQL 式です。

Salesforce から大規模なデータセットを取得し、可能な限りクエリーを行うのを避けるために、互換性のない機能を認識しておくと便利です。Salesforce にプッシュできる SQL コンストラクトに関する詳細は、互換性のある SQL 機能 を参照してください。

複数選択の選択リストからの選択

マルチ選択リストとは、1 つのフィールドに複数の値を含むことができる Salesforce のフィールドタイプです。SOQL のこのタイプのフィールドのクエリー基準演算子は、EQ、NE、include および exclude に制限されます。複数選択 の選択リストから選択する Salesforce ドキュメントは、「Multi-select Picklistsのクエリー」を参照してください。

Data Virtualization SQL は includes 演算子または excludes 演算子をサポートしませんが、Salesforce コネクターはこれらの Operator のユーザー定義関数定義を提供し、タイプがマルチ選択のフィールドに同等の機能を提供します。関数の定義は以下のとおりです。

boolean includes(Column column, String param)
boolean excludes(Column column, String param)
Copy to Clipboard Toggle word wrap

たとえば、これらの値すべてが含まれる Status という名前のマルチ選択のコラムを 1 つ取ります。

  • current
  • working
  • critical

この列については、以下のすべてが有効なクエリーになります。

SELECT * FROM Issue WHERE true = includes (Status, 'current, working' );
SELECT * FROM Issue WHERE true = excludes (Status, 'current, working' );
SELECT * FROM Issue WHERE true = includes (Status, 'current;working, critical' );
Copy to Clipboard Toggle word wrap

EQ および NE の基準は、指定されるとおり Salesforce に渡されます。たとえば、これらのクエリーはコネクターによって変更されません。

SELECT * FROM Issue WHERE Status = 'current';
SELECT * FROM Issue WHERE Status = 'current;critical';
SELECT * FROM Issue WHERE Status != 'current;working';
Copy to Clipboard Toggle word wrap

すべてのオブジェクトの選択

Salesforce コネクターを使用して、Salesforce API から queryAll 操作を呼び出すことができます。queryAll 操作は、システム内の現在および削除された全オブジェクトに関するデータを返す例外によるクエリー操作と同等です。

コネクターは、各 Salesforce オブジェクトにある isDeleted プロパティーへの参照を介して query または queryAll 操作を呼び出すかどうかを決定します。また、インポーターによって生成された各テーブルの列としてモデル化されます。デフォルトでは、モデルが生成され、コネクターがクエリーを呼び出すと、この値は false に設定されます。ユーザーはモデルの値を true に自由に変更し、コネクターのデフォルト動作を queryAll に変更します。

isDeleted がクエリーのパラメーターとして使用されている場合の動作は異なります。isDeleted 列がクエリーのパラメーターとして使用され、値が true の場合、コネクターは queryAll を呼び出します。

select * from Contact where isDeleted = true;
Copy to Clipboard Toggle word wrap

isDeleted 列がクエリーのパラメーターとして使用され、値が false の場合、デフォルトの動作を実行するコネクターがクエリーを呼び出します。

select * from Contact where isDeleted = false;
Copy to Clipboard Toggle word wrap

更新されたオブジェクトの選択

Salesforce からメタデータをインポートする際にオプションが選択されている場合は、以下の構造でモデルに GetUpdated 手順が生成されます。

GetUpdated (ObjectName IN string,
    StartDate IN datetime,
    EndDate IN datetime,
    LatestDateCovered OUT datetime)
returns
    ID string
Copy to Clipboard Toggle word wrap

使用方法は、Salesforce ドキュメントの GetUpdated 操作の説明を参照してください。

削除されたオブジェクトの選択

Salesforce からメタデータをインポートする際にオプションが選択されている場合は、以下の構造でモデルに GetDeleted 手順が生成されます。

GetDeleted (ObjectName IN string,
    StartDate IN datetime,
    EndDate IN datetime,
    EarliestDateAvailable OUT datetime,
    LatestDateCovered OUT datetime)
returns
    ID string,
    DeletedDate datetime
Copy to Clipboard Toggle word wrap

使用方法は、Salesforce ドキュメントの GetDeleted 操作の説明を参照してください。

関係クエリー

リレーショナルデータベースとは異なり、Salesforce は結合操作をサポートしませんが、オブジェクト間の子または子間の関係を含むクエリーをサポートします。これらは、概念的なクエリーです。Outer Join 構文を使用すると、SalesForce コネクターで以下のクエリーを実行できます。

SELECT Account.name, Contact.Name from Contact LEFT OUTER JOIN Account
on Contact.Accountid = Account.id
Copy to Clipboard Toggle word wrap

このクエリーは、子から親への関係クエリーを生成するために SalesForce モデルをクエリーするための正しい構文を示しています。SalesForce に対して以下のクエリーを解決します。

SELECT Contact.Account.Name, Contact.Name FROM Contact
Copy to Clipboard Toggle word wrap
select Contact.Name, Account.Name from Account Left outer Join Contact
on Contact.Accountid = Account.id
Copy to Clipboard Toggle word wrap

このクエリーは、親から子への関係クエリーを生成するために SalesForce モデルをクエリーするための正しい構文を示しています。SalesForce に対して以下のクエリーを解決します。

SELECT Account.Name, (SELECT Contact.Name FROM
Account.Contacts) FROM Account
Copy to Clipboard Toggle word wrap

制限については、SalesForce ドキュメントの「 Queries 」操作の説明を参照してください。

クエリーの一括挿入

また、JDBC バッチセマンティクスまたは SELECT INTO セマンティクスを使用して、SalesForce トランスレーターで一括挿入ステートメントを使用することもできます。バッチサイズは実行プロパティー MaxBulkInsertBatchSize で決定され、vdb ファイルで上書きできます。バッチのデフォルト値は 2048 です。一括挿入機能は、Salesforce が公開する非同期 REST ベースの API を使用して、パフォーマンスを強化します。

一括選択

10,000,000 を超えるレコードを持つテーブルをクエリーする場合、または結果のバッチ処理でタイムアウトが発生した場合、Data Virtualization は一括 API を使用して Salesforce へのクエリーを発行できます。一括選択を使用する場合は、クエリーと互換性のあるプライマリーキー(PK)のチャンクが有効になります。

一括 API を使用するには、クエリーに source ヒントが必要です。

SELECT /*+ sh salesforce:'bulk' */ Name ... FROM Account
Copy to Clipboard Toggle word wrap

salesforce はターゲットソースのソース名に置き換えます。

デフォルトのチャンクサイズ 100,000 レコードが使用されます。

注記

この機能は Salesforce API バージョン 28 以降でのみサポートされます。

互換性のある SQL 機能

以下の SQL 機能を Salesforce コネクターで使用します。これらの SQL コンストラクトは Salesforce にプッシュされます。

  • SELECT コマンド
  • INSERT コマンド
  • UPDATE コマンド
  • DELETE コマンド
  • NotCriteria
  • OrCriteria
  • CompareCriteriaEquals
  • CompareCriteriaOrdered
  • IsNullCritiera
  • InCriteria
  • LikeCriteria: String フィールドのみに使用できます。
  • RowLimit
  • 基本的な集約値
  • 結合基準 KEY で参加

ネイティブクエリー

Salesforce の手順には、任意でネイティブクエリーが関連付けられる場合があります。詳細は「 Translators でパラメーター化 可能なネイティブクエリー 」を参照してください。操作接頭辞(select;、insert、update、delete、delete)は native-query に存在する必要がありますが、ソースへのクエリーの一部として発行されません。

Salesforce ネイティブ手順の DDL の例

CREATE FOREIGN PROCEDURE proc (arg1 integer, arg2 string) OPTIONS ("teiid_rel:native-query" 'search;SELECT ... complex SOQL ... WHERE col1 = $1 and col2 = $2')
returns (col1 string, col2 string, col3 timestamp);
Copy to Clipboard Toggle word wrap

直接クエリーの手順

セキュリティーリスクにより、ソースに対してコマンドを実行できるセキュリティーリスクがあるため、この機能はデフォルトではオフになっています。直接クエリー手順を有効にするには、SupportsDirectQueryProcedure と呼ばれる実行プロパティーを true に設定します。詳細は、9章翻訳者 の「 実行プロパティーの上書き」を 参照してください。

ヒント

デフォルトでは、クエリーを直接実行する手順の名前は native と呼ばれます。デフォルト名を変更する方法は、9章翻訳者 の「 実行プロパティーの上書き」を 参照してください。

Salesforce Translator は、Data Virtualization の解析または解決を行わずに、アドホック SOQL クエリーをソースに対して直接実行する手順を提供します。この手順の結果のメタデータは Data Virtualization には認識されないため、オブジェクト配列として返されます。ARRAYTABLE は、クライアントアプリケーションが使用するための表形式出力です。Data Virtualization は、以下の手順で以下のように単純なクエリー構造で公開します。

example の選択

SELECT x.* FROM (call sf_source.native('search;SELECT Account.Id, Account.Type, Account.Name FROM Account')) w,
 ARRAYTABLE(w.tuple COLUMNS "id" string , "type" string, "name" String) AS x
Copy to Clipboard Toggle word wrap

上記のコードから、「search」キーワードの後にクエリーステートメントが続きます。

注記

SOQL は、パラメーター値をクエリー文字列に適切に挿入できるように、パラメーター化されたネイティブクエリーとして扱われます。詳細は「 Translators でパラメーター化 可能なネイティブクエリー 」を参照してください。検索によって返される結果には、選択されたかどうかにかかわらず、最初の列の値としてオブジェクト ID が含まれる場合があります。また、複数のオブジェクトタイプから列を選択するクエリーは適切ではありません。

例の削除

SELECT x.* FROM (call sf_source.native('delete;', 'id1', 'id2')) w,
 ARRAYTABLE(w.tuple COLUMNS "updatecount" integer) AS x
Copy to Clipboard Toggle word wrap

上記のコードを形成し、「delete;" キーワードの後に varargs から削除する ids」が続きます。

Create example

SELECT x.* FROM
 (call sf_source.native('create;type=table;attributes=one,two,three', 'one', 2, 3.0)) w,
 ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
Copy to Clipboard Toggle word wrap

上記のコードを形成するには、「create」または「update」キーワードの後に以下のプロパティーを指定する必要があります。これらの属性は、手順変数によって位置で一致する必要があります。そのため、例の属性 2 は 2 に設定されます。

Expand
プロパティー名説明必須

type

テーブル名

はい

attributes

列の名前のコンマ区切りリスト

いいえ

各属性の値は、「ネイティブ」手順に個別の引数として指定されます。

update は、レコードの識別子を定義する、さらに 1 つの追加プロパティー「id」で create と似ています。

更新の例

SELECT x.* FROM
 (call sf_source.native('update;id=pk;type=table;attributes=one,two,three', 'one', 2, 3.0)) w,
 ARRAYTABLE(w.tuple COLUMNS "update_count" integer) AS x
Copy to Clipboard Toggle word wrap

ヒント

デフォルトでは、クエリーを直接実行する手順の名前は native と呼ばれますが、DDL ファイルにオーバーライドの実行プロパティーを設定して変更することができます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat