- Big Objectの概要
- Big Objectの用途
- Big Objectの設定手順
- Big Objectを利用する際の制限・注意事項
今回はBig Objectという特殊なオブジェクトについて解説していきます。

あまり使うことがない機能ですが、知らないと提案もできないので、ここでしっかりと勉強しておきましょう!
Big Objectとは
Big Objectは、通常のオブジェクトではパフォーマンスが低下してしまうような大容量のレコード数でも安定したパフォーマンスを発揮できる特殊なオブジェクトです。

10億件以上のレコードでも安定したパフォーマンスを発揮できるそうです!
Big Objectの種類
Big Objectは下記の2種類に分けられています。
- 標準Big Object:項目監査履歴など、Salesforceにデフォルトで用意されているオブジェクト
- カスタムBig Object:ユーザが独自に作成することができるオブジェクト

ただでさえ使用頻度は低いので、標準Big Objectはほとんど使うことはなさそうですね笑
Big Objectの用途
下記はtrailheadで紹介されているカスタムBig Objectの使用例です。
顧客の 360 度ビュー | お客様には、保存する顧客情報が大量にあります。ロイヤルティプログラムから取引、注文、請求情報まで、カスタム Big Object を使用すれば、すべての詳細を追跡できます。 |
監査と追跡 | 分析またはコンプライアンス目的で、ユーザの Salesforce 利用状況を長期的に追跡します。 |
履歴アーカイブ | 分析またはコンプライアンス目的で、履歴データへのアクセスを管理しながら、中核的な CRM または Lightning Platform アプリケーションのパフォーマンスを最適化します。 |
この説明だと少しわかりづらいですが、1つのオブジェクトに大量のレコードが作成されるような環境で、一定時間経過したレコードをアーカイブとして保存するような用途に適しています。
Big Objectにデータを作成する方法
Big Objectにデータを作成する代表的な方法として次の2つがあります。
- データローダを使用する
- ApexのinsertImmediateメソッドを使用する
手動でデータをアーカイブする場合はデータローダ、自動的にアーカイブする場合はApexのバッチ処理でinsertImmediateメソッドを使用するのが良いでしょう。
Big Objectのクエリ
Big Objectは通常のSOQLのほか、非同期SOQLという専用のクエリを利用することができます。
Big Objectのレコードは標準レイアウトやリストビュー、レポートなどのUIがサポートされません。
そのため、標準のSOQLで検索した結果を表示するLWCコンポーネントを作成したり、非同期SOQLを使用してバックグラウンドで通常のカスタムオブジェクトに登録することでレポートなどの標準UIで使用できるようにする必要があります。
通常のSOQL
通常のSOQLには次のような制約があります。
- インデックス項目を順序通り検索条件に含める必要があり、間を飛ばすことができない
- インデックス項目をすべて検索条件に含める必要はない
- 検索条件の最後の項目では =、<、>、<=、>=、IN の比較演算子を使用できる
- 検索条件の最後以外の項目では = 演算子のみ使用できる
- !=、LIKE、NOT IN、EXCLUDES、INCLUDES 演算子は使用できない

インデックス項目の設定詳細については後ほど解説します。
例えば、インデックス項目が次の順番で設定されているとします。
- Account__c
- Game_Platform__c
- Play_Date__c」
この場合、次のクエリは問題なく機能します。
SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Game_Platform__c='PC' AND Play_Date__c>2017-09-06T00:00:00Z
一方で、次のように2番目の「Game_Platform__c」を飛ばして、最初と最後のインデックス項目のみ指定するようなクエリは機能しません。
SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Play_Date__c>2017-09-06T00:00:00Z
非同期SOQL
標準のSOQLでは処理できない大量データを非同期で処理することができます。
非同期SOQLはRESTful APIとして実装され、次のように利用します。
https://yourInstance.salesforce.com/services/data/v48.0/async-queries/
{
"query": "SELECT EventDate, EventIdentifier, QueriedEntities, SourceIp, Username, UserAgent FROM ApiEvent
WHERE QueriedEntities LIKE '%Patent__c%'",
"targetObject": "ApiTarget__c",
"targetFieldMap": {
"EventDate": "EventDate__c",
"EventIdentifier": "EventIdentifier__c",
"QueriedEntities": "QueriedEntities__c",
"SourceIp": "IPAddress__c",
"Username": "User__c",
"UserAgent": "UserAgent__c"
}
}
「targetObject」がクエリの結果を挿入するオブジェクトで、「targetFieldMap」で項目のマッピングを定義しています。
このクエリを使用することで、条件に該当するレコードが「ApiTarget__c」というオブジェクトに非同期で登録されます。
また、非同期SOQLでは集計関数を使用して抽出することも可能です。
サポートされている集計関数は、AVG(field)、COUNT(field)、COUNT_DISTINCT(field)、SUM(field)、MIN(field)、MAX(field) です。

レポート作成スナップショットに近いような使い方もできそうですね。
Big Objectの設定方法
Big Objectの作成方法にも触れておきたいと思います。
Big Objectの作成
基本的な操作はカスタムオブジェクトの作成と同じです。

リリース状況がデフォルトでは「開発中」しか選べないようになっています。
これは、Big Objectには最低1項目のインデックス項目が必要であり、カスタム項目の作成作業を行わないとリリースができないためです。
カスタム項目の作成
続いて、カスタム項目を作成していきます。
選べるデータ型は通常のオブジェクトよりも限定されており、選択リストや主従関係、数式などは選ぶことができません。

カスタム項目を作成する時は、次の点に注意してください。
- インデックスに設定する項目を必ず1つ以上作成する
- インデックスに設定する項目は必須に設定する
- インデックスに設定できる項目は5つまで
- インデックスに設定するテキスト項目の文字数の合計は最大100まで
項目を一通り作成した後の画面は下記のようになります。

インデックスの設定
最後にインデックスの設定を行います。

カスタム項目の作成時に必須に設定した項目のみインデックスで使用する項目の候補として表示されます。
先ほども解説した通り、通常のSOQLでクエリを行う場合は、ここで設定した「インデックスの位置」の順番通りに検索条件に指定する必要があります。
よく使用するクエリの優先順位を高めに設定しておきましょう。
また、比較演算子は検索条件の最後でしか利用できないため、日付/時間のように期間指定で利用したいような項目は最初にならないようにすると良いと思います。
Big Objectのリリース
すべての設定が完了したあとはリリースするだけです。

オブジェクトの編集画面でリリース状況を「リリース済み」に設定してリリース完了です。
注意事項ですが、一度リリースしてしまうとインデックス設定の変更が出来なくなってしまいます。
変更する場合はBig Objectを一から作り直す必要があります。

運用開始後に変更するのは面倒なので、インデックスの設計は慎重に行いましょう。
Big Objectを利用する際の制限・注意事項
最後にBig Objectを利用する際の制限や注意事項をまとめて紹介します。
- カスタム Big Object はすべてのライセンスに含まれているが、非同期 SOQL は追加の Big Object 容量のライセンスにのみ含まれる
- オブジェクトと項目の権限のみサポートされる
- 最低1項目をインデックスに設定する必要があり、インデックスにするには必須にする必要がある
- インデックスで使用できる項目は5つまで
- テキスト項目の文字数の合計が 100 を超えることはできない
- リリース後にインデックスを編集したり削除することは出来ず、一からオブジェクトを作成することになる
- SOQLリレーションクエリでは、参照関係項目を検索条件やサブクエリに使用できない
- レイアウトやリストビュー、レポートなどの標準UIはサポートされない
- 組織ごとに100個まで作成可能でオブジェクトの制限はカスタムオブジェクトと同様
- トリガやフローなどは使用できない
- ストレージの制限はバイト数ではなくレコード件数でカウントされる

通常のオブジェクトとはいろいろ勝手が違うので気をつけましょう
まとめ
今回は大量データを安定したパフォーマンスで処理できるBig Objectについて解説しました。
なかなか普段のプロジェクトで利用する機会がないし、そもそもよく知らない状態だと選択肢にすら入ってこないかかもしれません。
アーカイブデータの保存など、使いどころはありそうなので是非活用してみてはいかがでしょうか。