こんにちは、管理人の@Salesforce.Zです。
業務上では、初めてbig objectを使った。
そのメモとしても、記載しようと思って記事を作りました
★ Big Objectのリリース ★ Big ObjectのレコードCRUD ★ 注意点など
目次
Big Objectのリリース
Big Objectの定義ファイル:object xmlファイル
ファイル名を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>
big objectのpermissionsetファイル
ファイル名をCustomer_Interaction_BigObject.permissionsetとする
<?xml version="1.0" encoding="UTF-8"?> <PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata"> <label>Customer Interaction Permission Set</label> <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> </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>48.0</version> </Package>
リリースツール:workbench
リリースするため、zipファイルが必要なので、
・Customer_Interaction__b.objectファイルをobjectsというフォルダに入れて
・Customer_Interaction_BigObject.permissionsetファイルをpermissionsetsというフォルダに入れて
最終的に圧縮する前にフォルダ構造は下記になります。
上記に対して、圧縮してください。注意点として、圧縮してから、一回解凍して、余計なファイルが作成されてしまったかの確認とします。
zipフォルダは下記になった場合がworkbenchでリリース時にpackage.xmlがないよとエラーになる
対象リソースより上のフォルダ構造に何かがある場合、要注意。
リリース
check onlyを外したら、本当にbig objectとしてリリースにされます。
big object CRUD操作
Apexでbig objectに対して、操作できます。
insert and update = upsert :big objectの場合:database.insertImmediate() 実質はupsertになる
delete:big objectの場合 Database.deleteImmediate()
upsert例
// Define the record. PhoneBook__b pb = new PhoneBook__b(); pb.FirstName__c = 'John'; pb.LastName__c = 'Smith'; pb.Address__c = '1 Market St'; pb.PhoneNumber__c = '555-1212'; database.insertImmediate(pb); // A single record will be created in the big object.
delete 例
// Declare sObject using the index of the custom big object --> List<Customer_Interaction__b> cBO = new List<Customer_Interaction__b>(); cBO.addAll([SELECT Account__c, Game_Platform__c, Play_Date__c FROM Customer_Interaction__b WHERE Account__c = '001d000000Ky3xIAB']); Database.deleteImmediate(cBO);
CSVファイル操作
CSVファイルを用いて、Bulk APIで一気でデータを登録できる。SOAPではできなかった。
最後に
big objectは、レポートでは、直接使えない:非同期クエリで、データを抽出し、カスタムオブジェクトに入れて そのカスタムオブジェクトに対して、レポートすることが一般的なやり方らしい。 big objectのレポートについて公式サイトはこちらへ
big objectでは、集計関数が使える クエいじには、使えない演算子がある「!=、LIKE、NOT IN、EXCLUDES、INCLUDES」
index項目は最大5個まで含むことができる index項目はs ObjectのIDのイメージで、CRUD操作使えます。
例:index項目の値が同じの場合、database.insertImmediate()メソッド操作すると更新するになる。
index項目の値が違う場合、database.insertImmediate()メソッド操作すると登録になる