OData - ベストプラクティスとトラブルシューティング
これらのベストプラクティスとトラブルシューティングのヒントで、OData クライアントを最大限に活用してください。
パフォーマンス
OData サービスのパフォーマンスは、アクセスするデータのタイプによって異なります。たとえば、1M のデータポイントを読み取るには、約 2 分 30 秒から 3 分 00 秒かかります(毎秒 6K データポイント)。各フルリクエストには平均 120 ミリ秒がかかり、OData クライアントは処理およびデータ処理のために追加のオーバーヘッドを発生させる可能性があります。
以下の一般的なベストプラクティスに従って、最高かつ最も信頼性の高いパフォーマンスを実現してください。
OR
式や展開テーブルは使わないでください。- 可能な限り複数のクエリを使用してください。
- インクリメンタル リフレッシュを使用します。
- 可能であればデータセットを分割します。
- 必要なデータだけを残します。不要な列やデータを削除します。
- 過去のデータを毎日必要としない場合は、別のレポートに保管してください。必要なときは、履歴データレポートを更新します。
パフォーマンスの高いクエリを書く
OData サービスは、複数の同時リクエストを受け入れ、リクエストを並行処理します。また、OData は可能な限り複数のクエリを同時に送信します。
たとえば OR
式や展開を使った単一の複雑なクエリではなく、複数のクエリを作成して使用する方が得策です。単一の複雑なクエリは、各リクエストに追加したラウンドトリップ待ち時間で順次反復する必要があります。
複数のクエリを使用してデータをダウンロードし、OData クライアントで結果のテーブルを結合し、あたかも 1 つのテーブルであるかのようにテーブルを操作します。
インクリメンタル リフレッシュを使用する
インクリメンタル リフレッシュは、大規模なデータセットを可能にし、次のようなメリットがあります。
- リフレッシュが必要なのは、変更されたデータのみです。
- ソース システムとの長期にわたる接続を維持する必要はありません。
- リフレッシュするデータを少なくすることで、メモリやその他のリソースの全体的な消費を抑えることができます。
各 OData クライアントは異なるインクリメンタル リフレッシュ機能を持っているかもしれません。Microsoft Power BI については、Power BI におけるセマンティック モデルのインクリメンタル リフレッシュを参照してください。
大きなデータセットを分割する
大きなデータセットをダウンロードする必要がある場合は、それらをパーティションに分割し、各パーティションを読み込むために別のクエリを作成するようにしてください。いくつかの OData クライアント、たとえば Microsoft Power BI は、複数のクエリを同時に処理できます。データセットをパーティショニングすることで、パフォーマンスを大幅に向上させることができます。
たとえば、過去 2 年間のデータポイントを読み込む場合は、クエリを 2 つに分割し、それぞれ 1 年分のデータを読み込むようにします。次に、Power BI でテーブルをマージ(連結)します。
メタデータと CDF RAW におけるプロパティの命名
メタデータと CDF ステージング領域(RAW)のプロパティ キーは有効な識別子でなければならず、文字、数字、アンダースコアのみを含めることができます。OData サービスは、それ以外の文字をアンダースコアに書き換えます。最良かつ最も予測可能な結果を得るには、取り込まれたデータがプロパティ キーの以下の命名規則に従っていることを確認してください: ^[a-zA-Z][_a-za-z0-9]\*[a-zA-Z0-9]\$
。
トラブルシューティング
CDF をデータ ソースとして OData クライアントに使用する際のトラブルシューティングに役立つ情報を見つけてください。
クエリに時間がかかりすぎる
CDF プロジェクトには何億行ものデータが含まれることがあり、そのすべてを OData クライアントに読み込むことはできません。クエリに何時間もかかる場合は、データを大量に読み込もうとしている可能性があります。
OData サービスがサポートするフィルタリング機能について学ぶには、データ モデルでアイテムをフィルタリングすると asset-centric リソース タイプのフィルタリングを参照してください。
すべての結果が得られない
結果が予想より少ない場合は、TimeSeries の名前列で、たとえば startswith
のように、CDF がサポートしていないフィルター関数を使用している可能性があります。
OData サービスがサポートするフィルタリング機能について学ぶには、データ モデルでアイテムをフィルタリングすると asset-centric リソース タイプのフィルタリングを参照してください。
CDF RAW から最小値を取得できない
OData クライアントで CDF ステージング領域 CDF RAW のデータを使用している場合、指数表記で小さな数値を取得する際に問題が発生することがあります。
CDF RAW にはスキーマがありませんが、一部のOData クライアント、たとえば Power BI の OData ライブラリは、データに適した形式を選択しようとします。現在、Power BI は指数表記の小さな数値に対して間違ったデコーダを選択するため、このようなエラーが発生することがあります。
DataSource,Error: OData: Cannot convert the literal '2.89999206870561 to the expected type 'Edm.Decimal',
問題を解決するには、値を数値ではなく文字列として CDF RAW に取り込み、Power BI で Decimal.From
Power Query-M 関数などを使って文字列を数値に戻してください。精度を失うことはなく、ほとんどの JSON デコーダーは数値の代わりに文字列を受け入れるので、数値を想定しているクライアントも動作します。