メダリオンアーキテクチャ(Bronze、Silver、Gold)を実装し、物理的なデータ重複なしにレイヤー間でデータにアクセスする必要がある。
→OneLakeショートカットを使用して、他のレイクハウスまたはレイヤーのデータを参照する。
理由: ショートカットはOneLakeのシンボリックリンクです。これらは統一された名前空間を提供し、データをコピーせずにアクセスできるため、論理的なデータメッシュまたはメダリオンアーキテクチャに最適です。
リファレンス↗
Azure SynapseからFabricへ、既存のT-SQL中心の分析ワークロードを移行する。
→Fabric Data Warehouseを使用する。
理由: Fabric Warehouseは完全なT-SQL互換性を提供するため、既存のSQLスクリプト、ストアドプロシージャ、アナリストクエリを最小限の変更で移行するための理想的なターゲットです。Lakehouse SQLエンドポイントは読み取り専用のT-SQLアクセスを持ち、書き込みにはSpark SQLを使用します。
大量かつ高速なストリーミングデータ(例:IoTテレメトリー)をサブ秒のレイテンシーで取り込み、クエリする。
→取り込みにはFabric Eventstreamを、ストレージと分析にはKQL Databaseを使用する。
理由: これはFabricに組み込まれた目的別のストリーミング分析スタックです。KQL(Kusto Query Language)は、ストリーミングデータ上での時系列分析に最適化されており、バッチ指向のレイクハウスやウェアハウスよりもはるかに低いレイテンシーを提供します。
レイクハウスでディメンション変更の完全な履歴を保持するために、SCD(Slowly Changing Dimension)タイプ2を実装する。
→Sparkノートブックまたはパイプラインで`MERGE INTO`ステートメントを使用する。ビジネスキーで一致させ、`WHEN MATCHED`で古いレコードを更新し(`IsCurrent`をfalse、`EndDate`を現在に設定)、`WHEN NOT MATCHED`で新しいレコードを挿入する。
理由: Delta Lakeの`MERGE`操作はアトミックな upsert 機能を提供するため、FabricレイクハウスでSCDロジックを実装する最も標準的で効率的な方法です。
オペレーショナルデータベース(例:Azure SQL DB)からFabricレイクハウスへ、ほぼリアルタイムでデータをレプリケートして分析する。
→Fabric Mirroringを使用する。
理由: Mirroringは、Fabricに組み込まれた低レイテンシー、低インパクトの変更データキャプチャ(CDC)ソリューションです。これにより、データとスキーマの変更がDeltaテーブルとしてOneLakeに自動的にレプリケートされ、複雑なETLパイプラインは不要になります。
APIから複雑でネストされたJSONデータを取り込み、フラット化された構造化されたDeltaテーブルに変換する。
→PySparkノートブックを使用する。`from_json`のような関数でスキーマを解析し、`explode`で配列を行にフラット化する。
理由: PySparkは、複雑で進化するJSON構造をプログラムで処理するための最も強力で柔軟なツールを提供し、標準のコピーアクティビティの機能をはるかに超えます。
企業ファイアウォールの内側にあるオンプレミスSQL ServerデータベースからFabricにデータを取り込む。
→ローカルネットワーク内のサーバーにオンプレミスデータゲートウェイをインストールして構成する。Fabricでゲートウェイをデータソースとして追加する。
理由: ゲートウェイは安全なブリッジとして機能し、インバウンドファイアウォールポートを開く必要なしに、Fabricクラウドサービスとオンプレミスデータソース間でクエリとデータを中継します。
大規模で頻繁に更新されるDeltaテーブルのクエリパフォーマンスが、多数の小さなデータファイルの蓄積により低下した。
→`OPTIMIZE`コマンドを実行して、小さなファイルを大きなファイルに圧縮する。必要に応じて、頻繁にフィルターされる列で`ZORDER BY`を使用して、関連データを共存させる。
理由: ファイル数が少なく、かつファイルが大きいほど、Sparkが読み取る効率は大幅に向上します。Z-orderingはデータスキッピングを改善し、クエリが読み取るデータ量をさらに削減します。これはDeltaテーブルの重要なメンテナンス作業です。
ストリーミング時系列データを固定された重複しない時間間隔(例:5分ごとのセンサーごとの平均温度)に集計する。
→`summarize`演算子と`bin()`関数を使用するKQLクエリを使用する。例:`SensorData | summarize avg(temperature) by sensor_id, bin(timestamp, 5m)`。
理由: `bin()`関数は、KQLにおいて、集計のためにイベントを固定時間バケット(タンブリングウィンドウ)にグループ化するための標準的で高度に最適化された方法です。
Dataflow Gen2のリフレッシュが遅い。データソースはAzure SQLのようなリレーショナルデータベースである。
→Power Queryエディターで変換ステップを確認し、クエリフォールディングがアクティブであることを確認する。フォールディングを最大化するようにステップの順序を変更または修正する。
理由: クエリフォールディングは、変換ロジックをソースデータベースにプッシュバックして、単一のネイティブクエリとして実行します。これは、すべての生データをデータフローエンジンにプルしてメモリ内で変換するよりもはるかに効率的です。
Sparkノートブックが、非常に大きなファクトテーブル(数十億行)と小さなディメンションテーブル(数千行)の間で遅い結合を実行している。
→ヒント(`spark.sql.functions.broadcast`)を提供するか、オプティマイザーに統計に基づいて選択させることで、ブロードキャスト結合を使用する。
理由: ブロードキャストは、小さなテーブル全体をすべてのエグゼキューターノードに送信します。これにより、大きなテーブルのデータを再パーティション分割してネットワーク経由で送信する必要があるコストのかかる「シャッフル」操作が回避され、パフォーマンスが劇的に向上します。
データパイプラインが複数のアクティビティをオーケストレートしている。1つのアクティビティが失敗する可能性があるが、その後の独立したアクティビティは引き続き実行され、全体的な失敗はログに記録される必要がある。
→アクティビティの依存関係を構成する。結果に関係なく実行されるべきアクティビティは、「完了」条件で前のアクティビティに依存させるべきである。
理由: これにより、堅牢な並列実行パスを構築できます。「成功」と「失敗」の条件に対して別々のブランチを作成し、カスタムのロギングまたは通知ロジックを実装できます。
`last_modified`タイムスタンプを持つソースからデータを増分的にロードするパイプライン。
→ウォーターマークパターンを実装する。前回の正常な実行からの`max(last_modified)`を保存する。次回の実行で、`last_modified`が保存されたウォーターマークよりも大きいレコードをソースにクエリする。
理由: これは、変更タイムスタンプを提供するソースからの増分ロードにとって最も効率的なパターンであり、新規または更新されたデータのみが処理されることを保証し、データ転送と計算を最小限に抑えます。
IoTデータのリアルタイムストリームを分析して、センサーの読み取りにおける異常なスパイクやディップを検出する。
→Eventhouse/KQL Database内のKQLクエリで`series_decompose_anomalies()`関数を使用する。
理由: この組み込みのKQL関数は、時系列異常検出のために特別に設計されています。季節性、トレンド、残差成分に系列を自動的に分解し、統計的に有意な外れ値を特定するため、手動での設定は最小限で済みます。
データを移動せずに、Warehouse、Lakehouse、およびミラーリングされたAzure SQL Databaseからのデータを単一のT-SQLクエリで結合する必要がある。
→WarehouseまたはLakehouse SQLエンドポイントから実行されるクエリで、3パート命名規則(`database.schema.table`)を使用する。ショートカットを使用してミラーリングされたデータベースを参照する。
理由: Fabricは、データ仮想化を可能にする、単一のSQLステートメントを使用して同じワークスペース内の異なるFabricアイテム間でデータにアクセスできる統合クエリエンジンを提供します。
データフローが、一部の行が無効である可能性のあるファイルを処理する必要がある。フロー全体が失敗してはならず、有効な行はロードされ、無効な行はログに記録されるべきである。
→Power Queryで、行を検証し「IsValid」列を作成するステップを追加する。次に、その時点から2つの参照クエリを作成する。1つは`IsValid = true`でフィルターして宛先にロードし、もう1つは`IsValid = false`でフィルターしてエラーログにロードする。
理由: このパターンは、データストリームを分割することで堅牢なエラー処理を提供します。数行の不良データによってプロセス全体が停止するのを防ぎ、データ品質の問題を監査するための明確なメカニズムを提供します。