データの標準化

データは、さまざまな形式でデータ レイク アカウントに到着します。 これらの形式には、JSON、.CSV、XML ファイルなどの人間が判読できる形式と、.tar や .gz などの圧縮バイナリ形式が含まれます。 また、到着するデータのサイズは、編集された数個のファイルから SQL テーブル全体のエクスポートまで、さまざまです。 データは、IoT ソリューションからのリアルタイム イベントなど、1 個が数 KB の多数の小さなファイルとして到着することもあります。

Azure Data Lake Storage Gen2 では、あらゆる種類のデータのストレージが無制限にサポートされていますが、処理パイプラインの効率を確保し、コストを最適化するために、データ形式について慎重に検討する必要があります。

今では多くの組織が、取り込み形式を標準化して、コンピューティングをストレージから分離しています。 このため Delta Lake 形式は、エンリッチメント レイヤーまでのデータ インジェストに対して推奨される標準となってきました。 データ アプリケーション チームは、エンリッチメント レイヤーから、ユース ケースを反映した形式でデータを提供できます。

Note

Delta Lake は、最初のデータ インジェストからエンリッチメント レイヤーまで、バッチとストリーミングの両方のユース ケースをサポートするために使用します。

この記事では、Delta Lake の概要、そのパフォーマンス、コンプライアンスのサポートを実現するのに Delta Lake がどのように役立つか、データがソースからエンリッチメント レイヤーまで流れるときにデータを標準化する方法について説明します。

Delta Lake

Delta Lake は、ビッグ データのワークロードや Apache Spark に ACID (原子性、一貫性、分離性、持続性) トランザクションを導入するオープンソースのストレージ レイヤーです。 Azure Synapse Analytics と 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 リリースの発表」、「Delta Lake テーブルに対する Python API を使用したシンプルで信頼性の高いアップサートと削除」(マージ、更新、削除の DML コマンドのコード スニペットが記載されています) を参照してください。
Apache Spark API との 100% の互換性 Delta Lake は既存の Spark 実装と完全に互換性があるため、開発者は、既存のデータ パイプラインに最小限の変更を加えれば Delta Lake を使用できます。

詳細については、Delta Lake プロジェクトを参照してください。

完全なドキュメントについては、Delta Lake のドキュメント ページにアクセスしてください

[パフォーマンス]

小さなファイルを多数使用すると、最適とは言えないパフォーマンスになり、読み取りやリストの操作が増加してコストが高くなることがよくあります。 Azure Data Lake Storage Gen2 は、分析ジョブをより高速に、より低いコストで実行できる、より大きなファイル用に最適化されています。

Delta Lake には、ファイル管理によってパフォーマンスを最適化するのに役立つ多くの機能が含まれています。

たとえば、次のようになります。

  • トランザクション ログによってコストの高い LIST 操作が最小限になります。
  • Z オーダー (多次元クラスタリング) を使用すると、クエリ フィルターに対して最適化される述語プッシュダウンを有効にできます。
  • ネイティブ キャッシュとクエリの最適化によって、必要なストレージ スキャンの量が減少します。 詳細については、「キャッシュを使用してパフォーマンスを最適化する」を参照してください。
  • OPTIMIZE によって、小さなファイルを大きなファイルに結合します。

これらの最適化をデータ読み込みプロセスの一部にして、データの鮮度とパフォーマンスを管理します。

データ レイクのパーティション分割

データのパーティション分割では、大規模なデータを管理してデータ アクセスを制御できるように、データ ストア内のデータを整理する必要があります。 パーティション分割により、スケーラビリティの向上、競合の低減、パフォーマンスの最適化を実現できます。

データ レイクをパーティション分割するときには、設定が以下のようになっていることを確認します。

  • セキュリティを侵害しない
  • 明確に分離が設定されており、データ承認モデルと一致している
  • データ インジェスト プロセスに適切に適合している
  • 最適なデータ アクセスのためのパスが十分に定義されている
  • 管理およびメンテナンス タスクをサポートする

一般的な方法

以下に、データのパーティション分割を設計する際の一般的な方法を示します。

  • 早期にセキュリティへの影響に焦点を当てて、認可と共にデータ パーティションを設計します。
  • セキュリティと引き換えにデータの冗長性を実現したい場合もあります。名前付け規則を定義して、それに従います。
  • 複数のフォルダーを入れ子にすることはできますが、常にそれらの一貫性を維持します。
  • フォルダー構造とファイル名に、時刻に関する要素を含めます。
  • フォルダー構造は、日付パーティションで開始しないようにします。 日付は下位フォルダー レベルのままにしておくことをお勧めします。
  • 1 つのフォルダー構造内で、混在したファイル形式や異なるデータ製品を併用しないようにします。

ヒント

フォルダー構造には、アクセス パターンと適切なファイル サイズを最適化できるパーティション分割戦略を適用する必要があります。 キュレーション ゾーンでは、最適な取得に基づいて構造を計画します。カーディナリティが高いパーティション キーは慎重に選択してください。パーティション分割が過剰になり、最適ではないファイル サイズになります。

データ レイク ゾーンの詳細については、「データ レイク ゾーンとコンテナー」を参照してください

コンプライアンスのサポート

Delta Lake では、データ レイク上で構造化されたデータ管理を提供するために、トランザクション レイヤーを追加します。 この追加によって、消費者の要求時に個人情報 ("個人データ" とも呼ばれます) を見つけて削除する機能を、大幅に簡素化し、高速化することができます。 トランザクション レイヤーでは、DELETE、UPDATE、MERGE などの操作がサポートされます。 詳細については、Delta Lake を使用した GDPR コンプライアンスのベスト プラクティスに関するページを参照してください。

まとめ

この記事に記載されているデータ標準化をプラットフォームに適用してください。 Delta Lake 形式から開始し、その後、最適化とコンプライアンスのためのプロセスの追加を開始します。 最適化の道筋の一部をスケジュールに従って実行するサービスを作成したり、個人情報を削除するコンプライアンス サービスを作成したりすることができます。

次のステップ