注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Palantir extension for Visual Studio Code を使用すると、ローカルの Visual Studio Code 環境または Palantir プラットフォームの VS Code Workspace から Python トランスフォームを直接プレビューできます。プレビューは、完全なビルドを実行する前にデータ変換の動作を確認できるライブテスト環境です。コードを記述して変更をすばやくプレビューすることで、ビルドやコンテキストの切り替えを行わずに即座にフィードバックを得られます。
開発サイクルの短縮: パイプライン全体をビルドせずに、トランスフォームに対するフィードバックを即座に得られます。複雑なロジックを繰り返し改善する際に、時間を大幅に節約できます。
エラーの早期発見: データの問題、ロジックのエラー、予期しない結果が本番パイプラインに入り込む前に発見できます。
安心して試行: さまざまなアプローチを試し、結果を即座に確認できます。特に、データの探索やエッジケースのテストに役立ちます。
効率的なデバッグ: 実際のデータに対してコードが何を行うかを正確に確認できるため、問題を特定して修正しやすくなります。
ワークフローに最も適した方法に応じて、次の4つのいずれかの方法でプレビューを開始できます。
コマンドパレット: コマンドパレットからプレビューを実行コマンドを選択します。

Palantir サイドパネル: ツールバーからプレビューアイコンを選択します。
CodeLens: トランスフォームの上にあるプレビューを選択します。

プレビューパネル:****プレビューパネルを開き、コードのファイル名の横にあるプレビューボタンを選択します。

拡張機能は、入力の実際のデータを使用してトランスフォームを実行し、結果を即座に表示します。
トランスフォームのプレビューで特に強力な機能の1つが、データの読み込み方法を制御できることです。変換ごとに必要なデータが異なるため、これは特に重要です。単純な集計はどのサンプルでも適切に動作しますが、対象を狭く絞るフィルターや複雑な結合をテストするには、より慎重なデータ選択が必要です。
戦略を選択するには、プレビューパネルで入力戦略を設定するを選択し、サンプリング済、フルデータセット、コード定義フィルターのいずれかを選択します。
サンプリング済戦略は、入力データからランダムなサンプルを読み込みます。デフォルトは1000行です。入力からランダムにサンプリングしてサブセットを作成し、行数は設定できます。
適した用途: サンプリングが適切で、統計的なバイアスを生じさせない変換。トランスフォームのロジックが妥当かどうかをすばやく確認するのに適しています。
制限事項: 対象を狭く絞るフィルターや複数の入力間の結合など、一部の変換では、フィルター式に一致する値がサンプルに含まれる可能性が低いため、結果が実際よりも少なく見えることがあります。複数の入力間の結合では、この問題が指数関数的に悪化します。
フルデータセットオプションは、トランスフォームのロジックに基づいてインテリジェントにデータを読み込み、事前のサンプリングは行いません。代わりに、Preview Engine は Spark や Polars などの最新のデータ処理エンジンを利用して、述語をデータソースレベルにプッシュダウン ↗し、クエリに一致する可能性が最も高いデータセットのチャンクのみをダウンロードします。
適した用途: トランスフォームのコード内のどこで使用されていても、フィルターやその他の絞り込み式はプッシュダウンの対象となる場合があります。その結果、追加の計算時間をほとんどかけずに、完全に正確なプレビュー結果を生成できます。これは、フィルターや結合を正確にテストする際に特に役立ちます。
ベストプラクティス: 一部のパイプラインでは、述語プッシュダウンを十分に活用できません(たとえば、フィルター式を含まないパイプライン)。このような場合は、コードに条件付きフィルター式を追加することで、開発中のプレビュー実行を高速化できます。述語プッシュダウンのロジックの有効性は、選択したデータ処理エンジンに大きく依存します。Spark と DuckDB は通常、最も速く結果を生成し、ストリーミングモードの Polars も十分な性能を発揮します。一方、Pandas は述語プッシュダウンに対応していません。
プレビュー中に読み込むデータを正確に制御する独自のカスタムフィルター関数を記述します。このオプションでは、コード内に直接実装した独自のカスタムフィルタリング戦略を指定できます。
適した用途: プレビューに使用するデータを細かく制御する必要がある場合、再利用可能なフィルタリングロジックを作成したい場合、またはランダムサンプリングでもフルデータセットの読み込みでも効果的に対応できない特定のシナリオをテストする必要がある場合。サンプリングはプレビューの高速化に有効に活用できますが、そのためには、フィルターが生成する出力が十分に少ないことに加え、フィルタリングロジックが効率的に実装されている必要があります。これは、コード定義フィルターが本番データセット全体を入力として実行されるためです。
詳細については、コード定義の入力フィルタリングのドキュメントを確認してください。
インクリメンタルトランスフォームを使用する場合、プレビューパネルにはトランスフォームの実行方法に関する詳細なフィードバックが表示されます。Python トランスフォームの VS Code 統合は、本番ビルドと同じロジックを使用してインクリメンタル実行の可否を判定し、評価します。そのため、プレビューを実行すると、同じタイミングでビルドを開始した場合と同じ結果が生成されます(サンプリングの影響を無視した場合)。
トランスフォームがインクリメンタルに実行された場合:****プレビューパネルに「インクリメンタルに実行」タグが表示されます。

トランスフォームがスナップショットとして実行された場合:「スナップショットとして実行」タグが表示されます。このタグにカーソルを合わせると、トランスフォームをインクリメンタルに実行できなかった理由(semantic_version パラメーターの変更や、入力の特定のトランザクションタイプなど)が表示されます。

インクリメンタルプレビューは、Spark と軽量トランスフォームの両方に対応しており、v1 と v2 の両方のインクリメンタルセマンティクスを使用できます。
インクリメンタル変換とその評価ロジックの詳細については、インクリメンタル変換のドキュメントを確認してください。
その他のリソース:
Palantir extension for Visual Studio Code は、Preview Engine を使用してローカルプレビューを実行します。この Preview Engine は、データに対するダウンロード権限がある場合に、データセットの一部をローカルマシンにストリーミングします。ローカルプレビューのセキュリティへの影響とデータストレージについて詳しくは、ローカル開発におけるセキュリティ上の考慮事項のドキュメントを参照してください。
ローカル開発中にプレビューを使用するには、プラットフォーム管理者が Control Panel の Code Repositories 設定ページでローカルプレビューを有効にする必要があります。
Gradle を使用した Java トランスフォームのローカルプレビューのセットアップについては、ローカル開発でトランスフォームをプレビューするのドキュメントを参照してください。
Palantir リポジトリを開くと、拡張機能が環境を設定します。環境のセットアップが完了し、トランスフォームが検出されると、ローカルでプレビューを実行できるようになります。
次のテーブルは、Code Repositories と VS Code のプレビューにおける、各機能の現在の対応状況を示しています。Code Repositories のプレビューは、Code Repositories でのみ使用されるものではありません。VS Code でプレビューする際には、データセットの読み込みモードとして、データセット全体、サンプリング済み、コード定義のフィルター(サンプリングされていないデータにユーザー定義のフィルターを適用)を選択できます。いずれの場合も Preview Engine を使用します。
| Code Repositories | VS Code のプレビュー(Preview Engine) | |
|---|---|---|
| デバッグ | 対応 | 対応 |
| Foundry データセット | 対応 | 対応 |
| トランスフォームジェネレーター | 対応 | 対応 |
| データが満たすべき条件 | 対応 | 対応 |
| 軽量トランスフォーム | 対応 | 対応 |
| ビューとオブジェクトの実体化 | 対応 | 対応 |
| インクリメンタル(差分処理) | 非対応 | 対応(v1 および v2 のセマンティクス) |
| 外部トランスフォーム | 対応 | Code Workspaces で対応 |
| 列の統計とフィルター処理 | 対応 | 対応 |
| メディアセット | 非対応 | 対応[1] |
| モデル | 対応 | Spark トランスフォームで対応[2] |
| Spark プロファイル | 非対応 | 一部の Spark 設定に対応 |
| Cipher | 対応 | 対応[3] |
| 言語モデル | 対応 | 非対応 |
| 仮想テーブル | 対応 | Code Workspaces で対応 |
| Iceberg テーブル | 非対応 | Code Workspaces で対応 |
| 複雑な入力のサンプリング | 対応 | コード定義で対応(表形式ファイルと生ファイル) |
| デバッグ中の変数のプレビュー | 対応 | 対応 |
| Spark サイドカー | 非対応 | 非対応 |
[1] メディアセットの出力プレビューでは、put_media_item のみ対応しています。メディアセットのプレビューはインクリメンタルに対応していません。
[2] モデルの入力と出力のプレビューは、VS Code ワークスペースとローカル開発の両方で利用できます。モデルの入力プレビューは、VS Code ワークスペースでのみ利用できます。
[3] Cipher 列には、プレビュー中にプレースホルダーテキスト **DATA WILL BE ENCRYPTED AT BUILD TIME** が表示されます。暗号化はビルド時に適用されます。
Spark プロファイルを使用すると、カスタムの Spark 設定値をすばやく定義して使用し、トランスフォームのプレビュー中やビルド中の Spark エンジンの動作を指定できます。詳しくは、Spark プロファイルのドキュメントを参照してください。
VS Code のプレビューでは、プレビュー対象のトランスフォームの Spark プロファイルから一部の設定が適用されます。これには、実行エンジンの実行時の動作に影響する設定が含まれ、主に破壊的変更における下位互換性の維持に使用されます。Spark プロファイルを通じて、プレビューに割り当てられるリソースを変更することはできません。これは、Code Workspaces の設定ページで別途変更できます。
プレビュー中は、組み込みとユーザー定義の両方の Spark プロファイルを使用できます。以下のリストにないオプションは無視されます。
spark.sql.legacy.timeParserPolicyspark.sql.parquet.datetimeRebaseModeInReadspark.sql.legacy.parquet.datetimeRebaseModeInReadspark.sql.legacy.parquet.datetimeRebaseModeInWritespark.sql.analyzer.failAmbiguousSelfJoinspark.sql.legacy.dataset.nameNonStructGroupingKeyAsValuespark.sql.legacy.fromDayTimeString.enabledspark.sql.legacy.typeCoercion.datetimeToString.enabledspark.sql.legacy.followThreeValuedLogicInArrayExistsspark.sql.legacy.allowUntypedScalaUDFspark.sql.legacy.allowNegativeScaleOfDecimalspark.sql.legacy.allowHashOnMapTypespark.sql.legacy.avro.datetimeRebaseModeInReadspark.sql.legacy.avro.datetimeRebaseModeInWritespark.sql.legacy.charVarcharAsStringspark.sql.optimizer.collapseProjectAlwaysInlinespark.foundry.sql.allowAddMonthsspark.sql.parquet.int96AsTimestampCode Workspaces の外部トランスフォームでは、厳格なエクスポート制御が適用されます。Code Workspaces アプリケーションはワークスペースの入力履歴を保持するため、追加のセキュリティマーキングを含む過去の入力が、マーキング違反によってプレビューを停止させる場合があります。また、マーキングがついたデータの不適切な公開を防ぐため、ワークスペースがマーキングのセキュリティチェックとエクスポート制御を計算する際には、過去に取り込まれたすべてのコンテナマーキングが考慮されます。
ワークスペースに外部トランスフォームと互換性のないマーキングが含まれている場合は、Checkpoint を使用せずにワークスペースを再起動して、追跡されているマーキングをクリアします。詳しくは、外部トランスフォームのドキュメントを参照してください。