Trailheadを見ながらBig Objectの機能を試してみました。
Big Objectは10億件を超えるデータを扱う場面で活躍する機能です。
標準 Big Object とカスタム Big Object の二種類があります。
カスタム Big Objectを利用例です。
顧客の 360 度ビュー
お客様には、保存する顧客情報が大量にあります。ロイヤルティプログラムから取引、注文、請求情報まで、カスタム Big Object を使用すれば、すべての詳細を追跡できます。
監査と追跡
分析またはコンプライアンス目的で、ユーザの Salesforce 利用状況を長期的に追跡します。
履歴アーカイブ
分析またはコンプライアンス目的で、履歴データへのアクセスを管理しながら、中核的な CRM または Lightning Platform アプリケーションのパフォーマンスを最適化します。
Big Object はSOQLクエリと非同期SOQLクエリを使って検索できます。
SOQLクエリで取得する場面
クエリで返されるデータが少量であることがわかっている場合や、結果を待ちたくない場合、Apex で使用するために結果をすぐに返す必要がある場合には、SOQL を使用します。
非同期SOQLクエリで取得する場面
非同期 SOQL は、クエリ対象のデータが非常に大きいためにリアルタイムで結果を待てない場合に SOQL クエリを実行するための方法です。
補足
カスタム Big Object はすべてのライセンスに含まれていますが、非同期 SOQL は追加の Big Object 容量のライセンスにのみ含まれています。
Big Objectを利用する際に下記の注意点がありました。
Big Objectの設定
Developer Edtion組織でも試すことができます。
Big ObjectはUIでの設定がサポートされていません。メタデータを使って登録する必要があります。メタデータの操作は「Force.com移行ツール」がやりやすいと思います。
こんな感じでファイルを用意します。
cdコマンドで対象のディレクトリに移動して次のコマンドを実行します。
$ ant -Dpackage.xml=package.xml -f build.xml deployCode
設定画面の方を確認すると無事にBig Objectが登録されています。
権限セット(Permission Set)の方はうまくデプロイできませんでしたがひとまずBigObjectを設定することができました。削除や編集は設定画面からできるみたいです。
ただし権限設定は画面からは変更できないようでした。
・・・権限セットのメタデータの扱いどうやればいいんだろ。
コード
Customer_Interaction__b.object
<?xml version="1.0" encoding="UTF-8"?> <CustomObject xmlns="http://soap.sforce.com/2006/04/metadata"> <deploymentStatus>Deployed</deploymentStatus> <fields> <fullName>In_Game_Purchase__c</fullName> <label>In-Game Purchase</label> <length>16</length> <required>false</required> <type>Text</type> <unique>false</unique> </fields> <fields> <fullName>Level_Achieved__c</fullName> <label>Level Achieved</label> <length>16</length> <required>false</required> <type>Text</type> <unique>false</unique> </fields> <fields> <fullName>Lives_This_Game__c</fullName> <label>Lives Used This Game</label> <length>16</length> <required>false</required> <type>Text</type> <unique>false</unique> </fields> <fields> <fullName>Game_Platform__c</fullName> <label>Platform</label> <length>16</length> <required>true</required> <type>Text</type> <unique>false</unique> </fields> <fields> <fullName>Score_This_Game__c</fullName> <label>Score This Game</label> <length>16</length> <required>false</required> <type>Text</type> <unique>false</unique> </fields> <fields> <fullName>Account__c</fullName> <label>User Account</label> <referenceTo>Account</referenceTo> <relationshipName>Game_User_Account</relationshipName> <required>true</required> <type>Lookup</type> </fields> <fields> <fullName>Play_Date__c</fullName> <label>Date of Play</label> <required>true</required> <type>DateTime</type> </fields> <fields> <fullName>Play_Duration__c</fullName> <label>Play Duration</label> <required>false</required> <type>Number</type> <scale>2</scale> <precision>18</precision> </fields> <indexes> <fullName>CustomerInteractionsIndex</fullName> <label>Customer Interactions Index</label> <fields> <name>Account__c</name> <sortDirection>DESC</sortDirection> </fields> <fields> <name>Game_Platform__c</name> <sortDirection>ASC</sortDirection> </fields> <fields> <name>Play_Date__c</name> <sortDirection>DESC</sortDirection> </fields> </indexes> <label>Customer Interaction</label> <pluralLabel>Customer Interactions</pluralLabel> </CustomObject>
Customer_Interaction.permissionset
<?xml version="1.0" encoding="UTF-8"?> <PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata"> <fieldPermissions> <editable>true</editable> <field>Customer_Interaction__b.In_Game_Purchase__c</field> <readable>true</readable> </fieldPermissions> <fieldPermissions> <editable>true</editable> <field>Customer_Interaction__b.Level_Achieved__c</field> <readable>true</readable> </fieldPermissions> <fieldPermissions> <editable>true</editable> <field>Customer_Interaction__b.Lives_This_Game__c</field> <readable>true</readable> </fieldPermissions> <fieldPermissions> <editable>true</editable> <field>Customer_Interaction__b.Play_Duration__c</field> <readable>true</readable> </fieldPermissions> <fieldPermissions> <editable>true</editable> <field>Customer_Interaction__b.Score_This_Game__c</field> <readable>true</readable> </fieldPermissions> <label>Customer Interaction Permission Set</label> </PermissionSet>
package.xml
<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>*</members> <name>CustomObject</name> </types> <types> <members>*</members> <name>PermissionSet</name> </types> <version>41.0</version> </Package>