tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:大量データの管理ができるBig Objectを試してみました

Trailheadを見ながらBig Objectの機能を試してみました。
f:id:tyoshikawa1106:20180909110429p:plain

Big Object の基礎 | Salesforce Trailhead


Big Objectは10億件を超えるデータを扱う場面で活躍する機能です。
f:id:tyoshikawa1106:20180909110613p:plain


標準 Big Object とカスタム Big Object の二種類があります。
f:id:tyoshikawa1106:20180909110649p:plain


カスタム 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を利用する際に下記の注意点がありました。
f:id:tyoshikawa1106:20180909111018p:plain

Big Objectの設定

Developer Edtion組織でも試すことができます。
f:id:tyoshikawa1106:20180909111213p:plain


Big ObjectはUIでの設定がサポートされていません。メタデータを使って登録する必要があります。メタデータの操作は「Force.com移行ツール」がやりやすいと思います。



こんな感じでファイルを用意します。
f:id:tyoshikawa1106:20180909121001p:plain


cdコマンドで対象のディレクトリに移動して次のコマンドを実行します。

$ ant -Dpackage.xml=package.xml -f build.xml deployCode

f:id:tyoshikawa1106:20180909121103p:plain


設定画面の方を確認すると無事にBig Objectが登録されています。
f:id:tyoshikawa1106:20180909121204p:plain

f:id:tyoshikawa1106:20180909121217p:plain


権限セット(Permission Set)の方はうまくデプロイできませんでしたがひとまずBigObjectを設定することができました。削除や編集は設定画面からできるみたいです。
f:id:tyoshikawa1106:20180909121427p:plain


ただし権限設定は画面からは変更できないようでした。
f:id:tyoshikawa1106:20180909121449p:plain


・・・権限セットのメタデータの扱いどうやればいいんだろ。

コード

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>