注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Foundry は、タイムシリーズクエリに最適化された形式でディスク上にタイムシリーズデータをキャッシュします。このデータをクエリするには、コンピュート秒を使用する必要があります。
タイムシリーズクエリは次のようにコンピュートを使用します:
大きなタイムシリーズインデックスに対するクエリは、より多くのポイントを読み取ります。以下のセクションでは、これがどのように計算されるかについて説明しています。
Foundry の使用料を支払う際には、クエリごとに固定の最小コンピュート秒が消費されることに注意してください。デフォルトの量は 20
コンピュート秒です。これは、クエリを提供するために必要な基本的なコンピュート使用量です。Palantir と企業契約を結んでいる場合は、コンピュート使用量の計算を進める前に Palantir の担当者に連絡してください。
タイムシリーズデータの保存は、Foundry のストレージ下で測定されます。タイムシリーズデータの保存はコンピュートを使用せず、タイムシリーズをインデックス化し、アクティブにデータをクエリするだけでコンピュートを使用します。
タイムシリーズクエリのコンピュートは、Foundry に保存されたタイムシリーズデータをクエリする際にのみ使用されます。タイムシリーズクエリは2つの方法でコンピュートを使用します:
次の式は、クエリからコンピュート秒を導出します:
Copied!1 2
# ポイントをスキャンした数に基づいて秒数を計算します。基本的に20秒に、スキャンしたポイント数を50000で割った値を加えます。 compute_seconds = 20 + points_scanned / 50000
リソース管理アプリケーションを使用すると、データセット使用情報の詳細を確認でき、Foundryプラットフォームの使用状況調査の出発点となります。
ユーザーは、Foundry内で時系列データをクエリするための複数のツールにアクセスできます。時系列クエリの使用状況は常に、各ツールが生成または変更したリソースに付随しています。
Foundryを使用契約で利用する場合、時系列クエリによるコンピュートの主な要因は3つあります:
クエリの数
クエリされる系列のサイズ
クエリの複雑さ
クエリの複雑さ に関する以下のセクションを参照して、詳細情報と例をご覧ください。
クエリの総数を管理することは、時系列クエリからの総コンピュート使用状況を管理するために重要です。Foundryで時系列を使用する際には、以下の実践を考慮してください:
時系列クエリのコストを予測するには、クエリされる系列のサイズを常に理解していることが必要です。
次に、各クエリがシリーズ内の全てのポイントをスキャンする、10万ポイントのシリーズに対して3つのクエリがある例を考えてみてください:
シリーズのサイズ:100,000 ポイント
最小クエリ使用量:20-計算秒
1計算秒あたりのポイント数:50,000 ポイント
合計クエリ数:3
# 計算秒数を求める式は以下の通りです
# 計算秒数 = クエリ数 * 最小クエリ使用量 + 総ポイント数 / 1計算秒あたりのポイント数
計算秒数 = 3のクエリ * 20の計算秒 + 100,000のポイント * 3のクエリ / 50,000のポイント/秒
計算秒数 = 3 * 20 + 300,000 / 50,000
計算秒数 = 66計算秒
クエリされた時系列データに対してネストされた操作が適用されると、時系列クエリの複雑さが増します。
例として、以下の FoundryTS コードは 2 つの時系列データを加算し、新しい時系列データのすべてのポイントを 1 年間の時間範囲で Pandas データフレームとして返します。
# 時系列データを扱うノードを作成します
series_1 = N.TimeseriesNode('series_1') # 'series_1'という名前の時系列ノードを作成
series_2 = N.TimeseriesNode('series_2') # 'series_2'という名前の時系列ノードを作成
# DSL(ドメイン固有言語)を使用して、2つの時系列ノードのデータを組み合わせる計算を定義します
# この場合、それぞれのノードから取得したデータを足し合わせる計算を指定しています
result = F.dsl(program='a+b', return_type=float)([series_1, series_2])
# 指定した時間範囲(2022年1月1日から2023年1月1日)のデータを取得します
result = result.time_range(start='2022-01-01', end='2023-01-01')
# 結果をPandasのデータフレーム形式で出力します
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')
# 2つの時系列ノードを加算
intermediate_1 = F.dsl(program='a+b', return_type=float)([series_1, series_2])
# 加算された時系列の7日間の平均値を計算
intermediate_2 = intermediate_1.rolling_aggregate('mean', '7d')
# 元の加算された時系列から7日間の平均値を減算
result = F.dsl(program='a-b', return_type=float)([intermediate_1, intermediate_2]).time_range(start='2022-01-01', end='2023-01-01')
# 結果を pandas のデータフレームに変換
result.to_pandas()
このコードは、以下の形式で Codex へクエリを行います:
{
id: dsl-fomula // これはDSL(Domain Specific Language)の式を示す識別子です
children: [
{
id: dsl-fomula // 子ノードもDSLの式を示します
children: [
{ id: timeseries }, // 時系列データを示す識別子です
{ id: timeseries } // 同じく、時系列データを示す識別子です
]
},
{
id: rolling-aggregate // これは移動集計(時間窓を移動させながらの集計)を示す識別子です
children: [
{
id: dsl-fomula // 子ノードはDSLの式を示します
children: [
{ id: timeseries }, // 時系列データを示す識別子です
{ id: timeseries } // 同じく、時系列データを示す識別子です
]
}
]
}
]
}
このクエリツリーの各ノードでは、最終結果を生成するために1年間の範囲のポイントをスキャンするためのコストが発生します。