進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

カスタム Big Object の定義

学習の目的

この単元を完了すると、次のことができるようになります。
  • カスタム Big Object を作成する。
  • カスタムインデックスを作成する。
  • カスタム Big Object をリリースする。
  • Big Object に値を入力する。

カスタム Big Object の定義

カスタム Big Object のユースケースを確認しました。あるいは、独自の使用法を思いついたかもしれません。次は、カスタム Big Object を作成しましょう。

カスタム Big Object は [設定] で定義できます。メタデータ API を使用してカスタム Big Object を定義することもできますが、[設定] のほうがはるかに簡単です。まず、Trailhead Playground にログインして、[設定] に移動します。Big Object を定義する大まかな手順は以下のとおりです。

  1. 設定ギア をクリックし、[設定] を選択します。
  2. [クイック検索] ボックスに「Big Object」と入力し、[Big Object] を選択します。
  3. Big Object を作成して、基本的な一定の詳細情報を追加します。
  4. カスタム項目を追加します。カスタム項目には、Big Object のデータが保存されます。
  5. インデックスを追加します。インデックスは Big Object の複合主キーを定義し、Big Object データのクエリと絞り込みに使用します。
  6. Big Object を保存して、状況を「リリース済み」に変更します。

では、上記のステップを詳しく見ていきましょう。

カスタム Big Object は標準オブジェクトやカスタムオブジェクトと似ていますが、Big Object に固有のパラメータや適用されないパラメータがあります。オブジェクト名は、組織の標準オブジェクト、カスタムオブジェクト、外部オブジェクト、Big Object 全体で一意である必要があります。

Big Object の定義の詳細

Big Object を定義するときは、まずその基本的な一定の詳細情報を入力します。

項目名 説明
表示ラベル この名前は、ユーザインターフェースでオブジェクトを参照するために使用します。
表示ラベル (複数形) オブジェクトの複数形の表示ラベル。
母音で始まる場合はチェック 組織のデフォルト言語で必要な場合は、表示ラベルの先頭が「an」または「a」のどちらであるかを示します。
オブジェクト名 Big Object の一意の API 参照名管理パッケージでは、この名前により、複数のパッケージインストールでの名前の競合が回避されます。英数字文字とアンダースコアのみを使用します。名前は文字で始まる必要があり、空白を含むことはできません。名前には、最後にアンダースコアを使用しない、2 つ続けてアンダースコアを使用しないという制約があります。

保存すると、Big Object の API 参照名が、カスタムオブジェクトのサフィックス「__c」のようにサフィックス「__b」で識別されます。

説明 意味のある説明を付けておくと、オブジェクトをリストに表示したときに区別しやすくなります。
カスタムヘルプの設定 オブジェクトレコードのホーム (概要) ページ、編集ページ、詳細ページ、リストビュー、および関連リストからユーザが [このページのヘルプ] をクリックしたときに表示される URL を定義します。この設定は、ページ上部の [ヘルプ] リンクには影響を与えません。このリンクは、常に [ヘルプ] ウィンドウが開きます。
リリース状況 Big Object を作成すると、状況が [開発中] に設定されます。少なくとも 1 つのカスタム項目を含むインデックスが Big Object に含まれるまで、Big Object をリリースできません。必須のカスタム項目のみをインデックスに含めることができます。インデックスを作成したら、2 つ目の状況 [リリース済み] が表示されます。ユーザにアクセス権を付与する準備ができたら、状況を [リリース済み] に変更します。

Big Object のカスタム項目

Big Object を定義したら、カスタム項目を追加します。カスタム項目には、Big Object の一意のデータが保存されます。また、Big Object を Salesforce の他のオブジェクトに関連付けるカスタムリレーション項目も作成できます。Salesforce の任意のオブジェクトにカスタム項目を追加する場合と同じ方法で、Big Object にカスタム項目を追加します。Big Object では、以下のデータ型がサポートされています。

  • 参照関係
  • 日付/時間
  • メール
  • 数値
  • 電話
  • テキスト
  • テキストエリア (ロング)
  • URL

Big Object のインデックスを作成するには、少なくとも 1 つのカスタム項目を必須としてマークする必要があります。

カスタム Big Object のインデックスの定義

これは重要です。Big Object のインデックスで定義された項目によって、その Big Object の独自性や、クエリが可能かどうかが決まります。インデックスで定義する項目は、クエリに最も関連する項目にする必要があるため、将来を予測して計画を行う必要があります。項目を定義する順序も重要な考慮事項です。SOQL を使用して Big Object をクエリする場合、インデックスを構成する項目のみを、定義した順序でクエリすることができます。クエリ検索条件で最も頻繁に使用する項目をインデックスの位置 1 に割り当てます。また、クエリ内の項目の位置に応じて、特定の比較演算子のみを使用できます。クエリについては、次の単元で詳しく説明します。

インデックスを定義するときの考慮事項は、次のとおりです。

  • インデックスには少なくとも 1 個のカスタム項目を含める必要があり、合計で最大 5 個のカスタム項目を含めることができます。
  • インデックスに含めるカスタム項目は、必須とマークする必要があります。
  • ロングテキストエリア項目をインデックスに含めることはできません。
  • 1 つのインデックス内のすべてのテキスト項目の文字数の合計が 100 を超えることはできません。
  • 作成したインデックスを編集または削除することはできません。インデックスを変更するには、別の Big Object を作成して新しいインデックスを指定します。

Big Object のインデックスの詳細

カスタム Big Object のインデックスを構成する項目を定義し、項目と並び替え順を指定します。

項目名 説明
表示ラベル この表示ラベルは、ユーザインターフェースでインデックスを参照するために使用します。
名前 インデックスの API 参照名。
インデックス項目 インデックスに含めるカスタム項目ごとに [インデックスの位置] と [インデックス方向] を設定します。ここでの項目の順序によって、インデックスでの順序が決まります。最も頻繁に使用する検索条件パラメータの [インデックスの位置] を 1 に設定します。[インデックス方向] の有効な値は [昇順] と [降順] です。

カスタム Big Object のサンプル

カスタム Big Object に何が必要なのかを確認したところで、カスタム Big Object を作成してみましょう。プレーヤーが未確認飛行 Big Object の脅威から地球を守る SFORCE-COM: U.F.B.O. Defense (SFORCE-COM: U.F.B.O. 防御隊) という素晴らしいゲームを新たに開発したとします。プレーヤーが 1 回のプレイセッションで行ったすべての操作を保存できるようにします。プレイセッションごとに、次の情報を Customer_Interaction__b というカスタム Big Object の次の項目に取得します。

  • In_Game_Purchase__c: プレーヤーが購入したものの数
  • Level_Achieved__c: 最高到達レベル
  • Lives_This_Game__c: ライフ数
  • Game_Platform__c: プラットフォーム
  • Score_This_Game__c: スコア
  • Account__c: アカウント名
  • Play_Date__c: プレイセッション日
  • Play_Duration__c: プレイ時間

このゲームは非常に人気があり、各プレーヤーが 1 日に数回操作するため、それに膨大な数のプレーヤー数を掛けると、生成されるレコードは驚異的な数になります。成功ゆえの悩みですね。

上記の項目はすべてカスタム Big Object で定義します。項目を定義したら、インデックスを構成する項目も定義します。各プレーヤーのアカウント名は一意であるため、インデックスの最初の項目にAccount__c を選択しました。インデックスの次の項目はプレーヤーのゲームプラットフォームである Game_Platform__c で、その次はセッション日である Play_Date__c です。この特定の順序により、アカウントのみ、アカウントとゲームプラットフォーム、またはアカウントとゲームプラットフォームとプレイ日に基づくクエリを作成できます。

次の例の値をそのまま使用して、8 つのカスタム項目と 1 つのインデックスを設定したカスタム Big Object を作成します。表に項目と値が示されていない場合は、無視するかデフォルトのままにします。

Big Object の定義の詳細

項目名
表示ラベル Customer Interaction (顧客操作)
表示ラベル (複数形) Customer Interactions (顧客操作)
オブジェクト名 Customer_Interaction
説明 空白のまま
リリース状況 開発中

Big Object のカスタム項目

  • In-Game Purchase (ゲーム内購入情報)
    • データ型: テキスト
    • 項目の表示ラベル: In-Game Purchase (ゲーム内購入情報)
    • 長さ: 16
    • 項目名: In_Game_Purchase
    • 必須項目: いいえ
  • Level Achieved (到達レベル)
    • データ型: テキスト
    • 項目の表示ラベル: Level Achieved (到達レベル)
    • 長さ: 16
    • 項目名: Level_Achieved
    • 必須項目: いいえ
  • Lives Used This Game (このゲームに使用したライフ数)
    • データ型: 数値
    • 項目の表示ラベル: Lives Used This Game (このゲームに使用したライフ数)
    • 長さ: 18
    • 小数点の位置: 0
    • 項目名: Lives_This_Game
    • 必須項目: いいえ
  • Platform (プラットフォーム)
    • データ型: テキスト
    • 項目の表示ラベル: Platform (プラットフォーム)
    • 長さ: 16
    • 項目名: Game_Platform
    • 必須項目: はい
  • Score This Game (このゲームのスコア)
    • データ型: テキスト
    • 項目の表示ラベル: Score This Game (このゲームのスコア)
    • 長さ: 16
    • 項目名: Score_This_Game
    • 必須項目: いいえ
  • Account (アカウント)
    • データ型: 参照関係
    • 関連先: Account (アカウント)
    • 項目の表示ラベル: Account (アカウント)
    • 項目名: Account (アカウント)
    • 必須項目: はい
  • Date of Play (プレイ日)
    • データ型: 日付/時間
    • 項目の表示ラベル: Date of Play (プレイ日)
    • 項目名: Play_Date
    • 必須項目: はい
  • Play Duration (プレイ時間)
    • データ型: 数値
    • 項目の表示ラベル: Play Duration (プレイ時間)
    • 長さ: 18
    • 小数点の位置: 2
    • 項目名: Play_Duration
    • 必須項目: いいえ

プレイヤーの全操作を追跡する 8 つの項目ができました。これで完了です。

Big Object のカスタム項目

Big Object のインデックスの詳細

項目名
表示ラベル Customer Interactions Index (顧客操作のインデックス)
名前 CustomerInteractionsIndex
インデックス項目

インデックスの位置 1: Account__c、降順

インデックスの位置 2: Game_Platform__c、昇順

インデックスの位置 3: Play_Date__c、降順

Big Object のリリース

カスタム Big Object を定義したら、リリースすることができます。Big Object の [編集] をクリックして、リリース状況を [リリース済み] に変更します。

[設定] に表示されている [Big Object]

これで、新しいカスタム Big Object を使い始める準備ができました。

[設定] のカスタム Big Object

ここから、カスタム Big Object とその項目の表示ラベルや名前を編集できますが、インデックスを編集または削除することはできません。インデックスを変更するには、新しい Big Object を使用してやり直します。[設定] からカスタム Big Object を削除することもできます。削除されたカスタム Big Object は 15 日間保存されます。その期間中は、そのカスタム Big Object を復元するか完全に削除することができますが、15 日間を過ぎると完全に削除されます。

Big Object の入力

Big Object への値の入力には、主として 2 つの方法があります。データローダまたは API で .csv ファイルを使用する方法と、すべて Apex で行う方法です。

.csv ファイルを使用する場合は、このファイルの最初の行に、.csv データをカスタム Big Object に対応付けるために使用する項目の表示ラベルが記載されている必要があります。データローダでデータを Big Object に読み込むか、Bulk API または SOAP API を使用して読み込みます。Customer_Interaction__b Big Object をアップロードするために使用する .csv ファイルを次に示します。Big Object では、ここで例として示すものの何倍ものデータをサポートすることが可能です。
Play Start,In-Game Purchase,Level Achieved,Lives Used,Platform,Play Stop,Score,Account
2015-01-01T23:01:01Z,A12569,57,7,PC,2015-01-02T02:27:01Z,55736,001R000000302D3
2015-01-03T13:22:01Z,B78945,58,7,PC,2015-01-03T15:47:01Z,61209,001R000000302D3
2015-01-04T15:16:01Z,D12156,43,5,iOS,2015-01-04T16:55:01Z,36148,001R000000302D3
Apex を使用して Customer_Interaction__b に入力する場合は、insertImmediate メソッドを使用します。
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Insert the record, which creates a new record
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field in the index
bo.Game_Platform__c = 'Mac';
 
// Insert the record, creating a new record because the primary key has changed 
database.insertImmediate(bo);
// Define the record
Customer_Interaction__b bo = new Customer_Interaction__b();
bo.Account__c = '001R000000302D3';
bo.Game_Platform__c = 'PC';
bo.Play_Date__c = DateTime.newInstance(2018, 2, 5);
bo.In_Game_Purchase__c = 'A12569';
bo.Level_Achieved__c = '45';
bo.Lives_This_Game__c = '3';
bo.Score_This_Game__c = '5500';
bo.Play_Duration__c = 25;
 
// Modify a field not included in the index
bo.Level_Achieved__c = '1';
 
// Insert the record, which updates the second record because the index is the same 
database.insertImmediate(bo);
警告

警告

混合 DML コールを使用する Apex テストは認められず、失敗します。Big Object のみに書き込むと、対象 Big Object に不良データが挿入され、手動で削除しなければならなくなります。対象 Big Object に対するテスト DML コールを含めるには、代わりに Apex スタブ API を使用したモックフレームワークを使用します。

インデックスが同じでデータが異なるレコードを再挿入すると、更新/挿入操作と似た動作になります。そのインデックスのレコードが存在する場合は、インデックスの値が新しいデータで上書きされます。挿入は羃等であるため、既存のデータを挿入しても重複が発生することはありません。何百万ものレコードをアップロードするときには、再挿入が役立ちます。エラーが発生した場合に再挿入を行うと、失敗したアップロードが再アップロードされますが、データが重複することはありません。再挿入の際に、指定されたインデックスにレコードが存在しない場合は、新しいレコードが挿入されます。