データは、さまざまな形式で Data Lake アカウントに到着します。 これらの形式には、JSON などの人間が判読できる形式が含まれます。CSV または XML ファイル、および圧縮バイナリ形式 (.tarや.gzなど)。 また、データの到着には、いくつかの編集済みファイルから SQL テーブル全体のエクスポートまで、さまざまなサイズがあります。 データは、IoT ソリューションからのリアルタイム イベントなど、数 KB 単位の多数の小さなファイルとしても使用できます。
Azure Data Lake Storage Gen2 ではあらゆる種類のデータのストレージを制限なくサポートしていますが、処理パイプラインの効率を確保し、コストを最適化するために、データ形式を慎重に検討する必要があります。
多くの組織では、取り込み形式を標準化し、コンピューティングをストレージから分離するようになりました。 このため、Delta Lake 形式は、エンリッチメント レイヤーへのデータ インジェストの推奨される標準となっています。 エンリッチメント レイヤーから、データ アプリケーション チームは、ユース ケースを反映した形式でデータを提供できます。
注
Delta Lake を使用して、最初のデータ インジェストからエンリッチメント レイヤーまでのバッチとストリーミングの両方のユース ケースをサポートします。
この記事では、Delta Lake の概要、そのパフォーマンス、コンプライアンスサポートの実現に役立つ方法、およびソースからエンリッチメント レイヤーにデータを流れる際にデータを標準化する方法について説明します。
Delta Lake
Delta Lake は、ACID (原子性、整合性、分離性、持続性) トランザクションをビッグ データ ワークロードと Apache Spark に提供するオープンソースストレージレイヤーです。 Azure Databricks は Linux Foundation Delta Lake と互換性があります。
Delta Lake の主な機能
特徴 | 説明 |
---|---|
ACID トランザクション | 通常、データ レイクは複数のプロセスとパイプラインを介して設定され、その一部は読み取りと同時にデータを書き込みます。 データ エンジニアは、Delta Lake とトランザクションが使用される前にデータの整合性を確保するために、エラーが発生しやすい手動プロセスを実行しました。 Delta Lake によって、使い慣れた ACID トランザクションがデータ レイクに導入されます。 これは、最も強力な分離レベル、シリアル化可能性を提供します。 詳細については、「 Delta Lake への飛び込み: トランザクション ログの開梱」を参照してください。 |
スケーラブルなメタデータの処理 | ビッグ データでは、メタデータであっても "ビッグ データ" になる可能性があります。 Delta Lake はメタデータを他のデータと同じように扱います。 Spark の分散処理能力を使用して、すべてのメタデータを処理します。 このため、Delta Lake では、数十億のパーティションとファイルを含むペタバイト規模のテーブルを簡単に処理できます。 |
タイム トラベル (データのバージョン管理) | 変更を "元に戻す" 機能や以前のバージョンに戻る機能は、トランザクションの重要な機能です。 Delta Lake では、データのスナップショットが提供されるため、監査、ロールバック、または実験の再現のために、以前のバージョンのデータに戻すことができます。 詳細については、「大規模データ レイク向けの Delta Lake タイム トラベルの紹介」を参照してください。 |
オープン形式 | Delta Lake のベースライン形式である Apache Parquet を使用すると、効率的な圧縮とエンコード スキームを適用できます。 |
バッチとストリーミング ソースとシンクの統合 | Delta Lake のテーブルは、同時にバッチ テーブルとストリーミング ソースとシンクです。 データ取り込みストリーミング、バッチ履歴バックフィル、対話型クエリはすべてすぐに使用できます。 |
スキーマの適用 | スキーマの適用は、正しいデータ型と必要な列を確保するのに役立ちます。これにより、データの不整合が不適切なデータから回避されます。 詳細については、Delta Lake の詳細: スキーマの適用と展開に関する記事を参照してください |
スキーマの展開 | Delta Lake を使用すると、移行 DDL を記述しなくても、テーブル スキーマに自動的に変更を適用できます。 詳細については、Delta Lake の詳細: スキーマの適用と展開に関する記事を参照してください |
[監査履歴] | Delta Lake トランザクション ログには、データに加えられたすべての変更に関する詳細が記録されます。 これらのレコードは、すべての変更の完全な監査証跡を提供します。 |
更新と削除 | Delta Lake では、さまざまな機能に対して Scala、Java、Python、SQL API がサポートされています。 マージ、更新、および削除操作のサポートは、コンプライアンス要件を満たすのに役立ちます。 詳細については、Delta Lake 0.6.1 リリースの発表、Delta Lake 0.7 リリースの発表、および Simple、Reliable Upserts and Deletes on Delta Lake Tables(マージ、更新、および削除 DML コマンドのコードスニペットを含む)をPython APIを使用して参照してください。 |
100% Apache Spark API と互換性がある | 開発者は、既存の Spark 実装と完全に互換性があるため、既存のデータ パイプラインの変更を最小限に抑えて Delta Lake を使用できます。 |
詳細については、Delta Lake プロジェクトを参照してください。
完全なドキュメントについては、Delta Lake のドキュメント ページを参照してください。
[パフォーマンス]
多くの小さなファイルを使用すると、多くの場合、読み取り/リスト操作の増加によるパフォーマンスが最適でなく、コストが高くなります。 Azure Data Lake Storage Gen2 は、分析ジョブをより高速かつ低コストで実行できる、より大きなファイル用に最適化されています。
Delta Lake には、 ファイル管理でパフォーマンスを最適化するのに役立つ多くの機能が含まれています。
たとえば、次のようになります。
- トランザクション ログは、コストの高い LIST 操作を最小限に抑えます。
- Z オーダー (多次元クラスタリング) を使用すると、クエリ フィルターの述語プッシュダウンを最適化できます。
- ネイティブ キャッシュとクエリの最適化により、必要なストレージ スキャンの量が減ります。 詳細については、「 キャッシュによるパフォーマンスの最適化」を参照してください。
- OPTIMIZE は、小さなファイルを大きなファイルに結合します。
これらの最適化をデータ読み込みプロセスの一部にして、データの鮮度とパフォーマンスを維持します。
データレイクのパーティショニング
データのパーティション分割では、大規模なデータを管理し、データ アクセスを制御できるように、データ ストア内のデータを整理する必要があります。 パーティション分割により、スケーラビリティの向上、競合の低減、パフォーマンスの最適化を実現できます。
データ レイクをパーティション分割するときは、次の設定を確認します。
- セキュリティを侵害しない
- 明確な分離性を持ち、データ承認モデルに合わせて調整する
- データ インジェスト プロセスに適しています
- 最適なデータ アクセスのための明確に定義されたパスがある
- 管理タスクとメンテナンス タスクをサポートします
一般的なプラクティス
データパーティション分割設計の一般的なプラクティスは次のとおりです。
- セキュリティへの影響に早期に焦点を当て、承認と共にデータ パーティションを設計します。
- セキュリティと引き換えにデータの冗長性を許可したい場合があります。名前付け規則を定義し、それに従います。
- 複数のフォルダーを入れ子にすることはできますが、常に一貫性を保つようにしてください。
- フォルダー構造とファイル名に time 要素を含めます。
- 日付パーティションを使用してフォルダー構造を開始しないでください。 日付はフォルダー レベルを下げておくことをお勧めします。
- 1 つのフォルダー構造で、混合ファイル形式や異なるデータ製品を組み合わせないでください。
ヒント
フォルダー構造には、アクセス パターンと適切なファイル サイズを最適化できるパーティション分割戦略が必要です。 キュレーションされたゾーンでは、最適な取得を基に構造を計画し、カーディナリティが高すぎるパーティションキーを選ぶと、パーティショニングが過剰になり、その結果、ファイルサイズが最適ではないことに注意してください。
Data Lake ゾーンの詳細を確認するには、Data Lake ゾーンとコンテナーについての詳細を確認してください。
コンプライアンスサポート
Delta Lake では、トランザクション レイヤーを追加して、データ レイクの上に構造化されたデータ管理を提供します。 この追加により、消費者の要求に応じて個人情報 ("個人データ" とも呼ばれます) を見つけて削除する機能が大幅に簡素化され、高速化されます。 トランザクション レイヤーでは、DELETE、UPDATE、MERGE などの操作がサポートされています。 詳細については、「 ベスト プラクティス: Delta Lake を使用した GDPR コンプライアンス」を参照してください。
概要
この記事に記載されているデータ標準化をプラットフォームに適用します。 Delta Lake 形式から始めて、最適化とコンプライアンスのためのプロセスの追加を開始します。 スケジュールに従って最適化ルートの一部を実行するサービスを作成するか、個人情報を削除するコンプライアンス サービスを作成することができます。