注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Foundry は、時系列クエリ向けに高度に最適化された形式で時系列データをディスクにキャッシュします。このデータをクエリするには、コンピュート秒を使用する必要があります。
時系列クエリでは、次のようにコンピュートを使用します。
より大きな時系列インデックスを対象とするクエリでは、より多くのポイントが読み取られます。以降のセクションでは、その計算方法を説明します。
Foundry の使用量に応じて料金を支払う場合、クエリごとに固定の最小コンピュート秒が消費されます。デフォルトは 4 コンピュート秒です。これは、クエリを処理するために必要な基本のコンピュート使用量です。Palantir とエンタープライズ契約を締結している場合は、コンピュート使用量を計算する前に Palantir の担当者にお問い合わせください。
時系列データの保存は、Foundry ストレージの使用量として計測されます。時系列データの保存にはコンピュートを使用しません。コンピュートを使用するのは、時系列のインデックス化と、データに対するクエリの実行のみです。
時系列クエリのコンピュートは、Foundry に保存されている時系列データをクエリするときにのみ使用されます。時系列クエリでは、次の2つの方法でコンピュートを使用します。
次の式で、クエリのコンピュート秒を算出します。
compute-seconds = 4 + points_scanned / 25000
Resource Management アプリケーションでは、データセットの使用量情報を掘り下げて確認できます。Foundry プラットフォームの使用量を調査する際は、このアプリケーションから始めることを推奨します。
ユーザーは、Foundry で時系列データをクエリするための複数のツールを利用できます。時系列クエリの使用量は、常に各ツールが生成または変更するリソースに紐づけられます。
Foundry を従量課金契約で利用する場合、時系列クエリのコンピュート使用量を左右する主な要因は3つあります。
クエリ数
クエリ対象の時系列のサイズ
クエリの複雑さ
クエリの複雑さに関する詳細と例については、後述のセクションを参照してください。
時系列クエリによるコンピュートの総使用量を管理するには、クエリの総数を管理することが重要です。Foundry で時系列を使用する際は、次の方法を検討してください。
時系列クエリのコストを予測するには、クエリ対象の時系列のサイズを必ず把握してください。
次の例では、100,000ポイントの時系列に対して3つのクエリが実行され、それぞれのクエリが時系列内のすべてのポイントをスキャンします。
series_size: 100,000 points
minimum_query_usage: 4-compute seconds
points_per_compute_second: 25,000 points
total_queries: 3
compute-seconds = num_queries * minimum_query_usage + total_points / points_per_compute_second
compute-seconds = 3 queries * 4 compute-seconds + 100,000 points * 3 queries / 25,000 points-per-second
compute-seconds = 3 * 4 + 300,000 / 25,000
compute-seconds = 24 compute-seconds
クエリ対象の時系列に適用される操作のネストが増えるほど、時系列クエリは複雑になります。
例として、次の FoundryTS コードを考えます。このコードは2つの時系列を加算し、新しい時系列の1年間の時間範囲に含まれるすべてのポイントを Pandas データフレームとして返します。
series_1 = N.TimeseriesNode('series_1')
series_2 = N.TimeseriesNode('series_2')
result = F.dsl(program='a+b', return_type=float)([series_1, series_2]).time_range(start='2022-01-01', end='2023-01-01')
result.to_pandas()
このコードは、次の形式のクエリを Codex に送信します。
{
id: dsl-fomula
children: [
{ id: timeseries },
{ id: timeseries }
]
}
to_pandas 呼び出しを評価すると、要求された1年間の時間範囲にある result 時系列のポイントのスキャンに加えて、結果の計算に必要な2つの構成時系列のポイント(この場合はそれぞれの1年間の範囲)のスキャンにもコストが発生します。
次に、より多くのネストされた操作を適用する、次の FoundryTS コードを考えます。まず、ほかの2つの時系列の合計となる 時系列を定義します。次に、その時系列を自身の7日間の移動平均と比較し、結果から1年分の ポイントを Pandas データフレームとして読み込みます。
series_1 = N.TimeseriesNode('series_1')
series_2 = N.TimeseriesNode('series_1')
intermediate_1 = F.dsl(program='a+b', return_type=float)([series_1, series_2])
intermediate_2 = intermediate_1.rolling_aggregate('mean', '7d')
result = F.dsl(program='a-b', return_type=float)([intermediate_1, intermediate_2]).time_range(start='2022-01-01', end='2023-01-01')
result.to_pandas()
このコードは、次の形式のクエリを Codex に送信します。
{
id: dsl-fomula
children: [
{
id: dsl-fomula
children: [
{ id: timeseries },
{ id: timeseries }
]
},
{
id: rolling-aggregate
children: [
{
id: dsl-fomula
children: [
{ id: timeseries },
{ id: timeseries }
]
}
]
}
]
}
このクエリツリーの各ノードで、最終結果を生成するために1年間の範囲のポイントをスキャンするコストが発生します。