注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

集計に関する考慮事項

Foundry では、扱うデータの複雑さと量によっては、カーディナリティの高い集計の性質上、アプリケーションに完全に正確な結果が表示されない場合があります(「不正確な集計」とも呼ばれます)。

object-set-service API には、集計の精度に関連する次のフィールドがあり、利用可能な場合はこれらを使用して精度を高めることができます。

  • API 呼び出し元は、リクエストに AggregationExecutionMode を追加し、PREFER_ACCURACY に設定できます。設定すると、API のレスポンスは遅くなりますが、より正確な結果が提供されます。ただし、完全な正確性は保証されません。
  • 集計レスポンスには、結果が正確かどうかを示す AggregateResultAccuracy フィールドが含まれます。

Foundry の各製品では、集計が不正確である可能性を示す挙動が少しずつ異なります。以下のセクションでは、Foundry で不正確な集計がどのように現れるかの例と、正確な結果を得るためにユーザーが考慮すべき事項を説明します。

詳しいガイダンスについては、Palantir サポートにお問い合わせください。

Object Explorer と Workshop

以下の2枚のヒストグラムのスクリーンショットは、2,000万個のオブジェクトを含むデータセットのデータを示しています。1枚目は Object Explorer に取り込んだデータセットのスクリーンショットで、2枚目は Workshop 内の Workshop フィルターリストウィジェットです。

Object Explorer のヒストグラム。 Workshop フィルターリストウィジェットのヒストグラム。

これらのヒストグラムは、2回の集計リクエストを使用して作成されています。1回目のリクエストでは、件数の多い上位100個のバケットの取得を試み、近似のレスポンスを受け取ります。2回目のリクエストでは、同じ100個のバケットの件数を再度取得しますが、さらに、この100個のバケットだけに絞り込むことで件数の正確性を確保します。

表示される件数は正確ですが、1回目の集計レスポンスが正確ではなかったため、表示されるバケットが件数の多い実際の上位100個のバケットではないという点で、2つ目のヒストグラムは依然として不正確です。

Object Explorer と Workshop から OSS へのリクエストでは AggregationExecutionMode が指定されず、OSS のデフォルトは PREFER_SPEED です。

Quiver ピボットテーブルと Workshop ピボットテーブル

Quiver と Workshop のピボットテーブルで列を件数の降順に並べ替えると、上位のバケットが正しい順序で表示されません。この場合、不正確な集計は次のいずれかのエラーメッセージで示されることがあります。

  • 「column の値が多すぎるため、一部の値は表示されていません」
  • 「計算上の制限により、近似の結果を表示しています」
  • 「各プロパティの最初の1,000個の値のみを読み込んでいます。より正確な結果を得るには、データを絞り込んでください。」

以下の例では、Example Bucket 列が意図したとおりに降順で並んでいません。

Workshop ピボットテーブル。 エラーメッセージが表示された Quiver ピボットテーブル。 エラーメッセージが表示された Quiver ピボットテーブル2。

Quiver と Workshop は、ピボットテーブルの元となる集計リクエストで順序を指定しないため、これらは件数の多い実際の上位バケットではありません。並べ替えは、返されたバケットを使用してフロントエンドで行われます。

オントロジー SDK(オントロジー SDK)

オントロジー SDK は PREFER_ACCURACY に設定されており、集計の複雑さが限定されているため、すべてのクエリレスポンスが ACCURATE になります。

オントロジー SDK アプリケーションのドキュメント。

Functions

Functions は常に PREFER_ACCURACY を使用するため、特定のバケットの値は正確になります。現在、関数呼び出し中に groupBy と orderBy を同時に実行する方法はありません。次のコードスニペットは、バックエンドで groupBy を実行し、メモリー内で並べ替える現在の例を示しています。

    @Function()
    public async aggregateOnMoreBucketsThanAuthorized(): Promise<TwoDimensionalAggregation<string, Double>> {
        // 集計して合計します
        const aggregation = await Objects.search()._af20mInstancesObv2()
                 .groupBy(o => o.exampleBucket.topValues())
                 .count()

        aggregation.buckets.sort((b1, b2) => b2.value - b1.value);
        return aggregation;
    }

結果の例:

{
  "buckets": [
    {
      "key": {
        "string": "10105",
        "type": "string"
      },
      "value": {
        "double": 461,
        "type": "double"
      }
    },
    {
      "key": {
        "string": "10163",
        "type": "string"
      },
      "value": {
        "double": 454,
        "type": "double"
      }
    },
    {
      "key": {
        "string": "10848",
        "type": "string"
      },
      "value": {
        "double": 454,
        "type": "double"
      }
    },
    ...