プログラマ38の日記

主にプログラムメモです。

Salesforce: ビッグオブジェクト(BigObject)について調べたこと

f:id:crmprogrammer38:20181231211901p:plain
ビッグオブジェクト(BigObject)は、カスタムオブジェクトのデータ制限とは別にデータを登録ができるため、便利に利用したいなと思いました。

利用するにあたっていくつか調べたので、その結果をまとめました。調べたのは2018年12月になります。

 

 

オブジェクトの作成・更新・削除

作成
  • Spring19から画面から作成できるようになりました。そして、「[Metadata API] deployでも作成可能(一般的なツールでは、Force.com IDE、Ant Migration Tool、Salesforce Extensions For VS Code など)
  • オブジェクトのAPI名の末尾は__bとなる。
  • 作成できる項目のタイプは、テキスト/数値/日付時刻/ロングテキストエリア/参照関係項目と制限されている。(日付型はありません。)
  • BigObjectのみIndexの指定が必要(インデックスという名前ですが、プライマリキーとしての意味を持っています。)
  • インデックスに指定できるテキスト項目の桁数は最大50
  • インデックスに指定できる項目数は最大5

※[Metadata API] createMetadataではエラーが発生し解決できませんでした。

更新 画面からオブジェクトのラベル、API名が変更可能
削除  画面からオブジェクトを削除可能

項目の作成・更新・削除

作成 [Metadata API] deploy、[Metadata API] createMetadataで作成可能 
更新

画面からラベル、API名、必須項目の変更が可能

桁数の変更は不可
※画面からも、[Metadata API] deploy/updateMetadataからも桁の変更はサポートされていません。

削除 不可能
※画面上からも削除できず、[Metadata API] deleteMetadataもサポートされていません。

データの取得・作成・更新・削除

取得 [SOAP API] query、[Apex] query で取得できます。 ※queryだと、集計関数が使えませんでした。追加ライセンスで非同期SOQLが使えて、非同期SOQLは集計も可能のようです。非同期SOQLはrest apiで提供されるようです。
作成

[SOAP API] insert、[Apex] Database.insertImmediate/Database.insertAsync で登録可能 ([SOAP API]の一般的なツールでは、DataLoaderや他のサードパーティ製のツール)

オブジェクト作成時に指定したインデックスフィールドでデータが登録されてなければ追加、あれば更新のupsertの動きとなります。

※[SOAP API] insert時に、Number型の項目はBulk APIにしないとエラーが発生しました。

更新 上記、作成と同様の操作(インデックスに指定したフィールドの値がすでにあれば更新となります)
通常のオブジェクトのようにSalesforce IDでの更新ではないため、DataLoaderでUpdateではオブジェクトが表示されません。
削除 [SOAP API] deleteByExample、[Apex] Database.deleteImmedeiate/Database.deleteAsync で削除可能 ([SOAP API] deleteByExampleを実装しているツールは見当たらないため、個別に開発が必要と思われます)

その他

  • 参照先が削除された場合は、参照関係項目はnullになる。
  • 検索条件に指定する項目はインデックスで指定した項目に限定される(なので、検索で使いたい項目はインデックスに含める必要がありますが、データの更新でもインデックスは使うので設計が難しいです)
  • [SOAP API ]queryや、[Apex] queryでは、group byは使えないですが、select count() from ビッグオブジェクト は使えました。

最後に

メタデータのdeployでないと、オブジェクト自体が作成できなかったり、 Bulk APIでないと数値型がエラーになったりするなど、ハードルの高さを感じました。(そもそもBigObjectという名前なのに、検索条件項目や、集計関数に制限があり扱いが難しいです)

そして、BigObjectでのインデックスの指定がとても難しさを感じました。

インデックスはデータの更新のキーの指定でもあり、検索可能項目の指定でもあるので、どちらの用途で使うかを決めておく必要があります。

検索可能項目として指定する方がデータの取得時に便利ですが、プライマリーキーの意味を持たせ辛いためその際にはデータの更新は、特定の条件でデータを削除後、再作成とする設計にするのがいいのかなと考えました。

 

色々利用するには前提をクリアする必要がありますが、100万行の入るストレージが使えるというのはとても魅力的だなと思います。