ビッグオブジェクト(BigObject)は、カスタムオブジェクトのデータ制限とは別にデータを登録ができるため、便利に利用したいなと思いました。
利用するにあたっていくつか調べたので、その結果をまとめました。調べたのは2018年12月になります。
オブジェクトの作成・更新・削除
作成 |
※[Metadata API] createMetadataではエラーが発生し解決できませんでした。 |
更新 | 画面からオブジェクトのラベル、API名が変更可能 |
削除 | 画面からオブジェクトを削除可能 |
項目の作成・更新・削除
作成 | [Metadata API] deploy、[Metadata API] createMetadataで作成可能 |
更新 |
画面からラベル、API名、必須項目の変更が可能 桁数の変更は不可 |
削除 | 不可能 ※画面上からも削除できず、[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の動きとなります。 |
更新 | 上記、作成と同様の操作(インデックスに指定したフィールドの値がすでにあれば更新となります) 通常のオブジェクトのように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万行の入るストレージが使えるというのはとても魅力的だなと思います。