メインコンテンツへジャンプ

Delta LakeとApache Sparkにオープンバリアントデータ型を導入

半構造化データを扱う際の処理の高速化と柔軟性の向上
ケント・マーテン
ジーン・パン
李 晨浩
ハン・シャオ
Share this post

半構造化データ用のバリアントと呼ばれる新しいデータ型を発表できることを嬉しく思います。 バリアント(Variant) は、これらのデータを JSON 文字列として保存する場合と比べて、パフォーマンスが桁違いに向上すると同時に、高度にネストされ進化するスキーマをサポートするための柔軟性も維持します。

半構造化データの取り扱いは、長い間レイクハウスの基盤的な機能の一つです。エンドポイント検出と対応(EDR)、広告クリック分析、IoTテレメトリーなどは、半構造化データに依存する人気のユースケースの一部です。私たちがより多くの顧客を専有のデータウェアハウスから移行させる中で、彼らが専有のデータウェアハウスで提供されるバリアントデータ型に依存していることを聞き、ロックインを避けるためにオープンソース標準が欲しいという声がありました。

オープンバリアントタイプは、Apache SparkオープンソースコミュニティとLinux Foundation Delta Lakeコミュニティの両方とのコラボレーションの結果です:

  • バリアントデータ型、バリアントバイナリ式、バリアントバイナリエンコーディング形式は、すでにオープンソースのSparkにマージされています。バイナリエンコーディングの詳細はこちらで確認できます。
  • バイナリエンコーディング形式は、文字列と比較してデータへのアクセスとナビゲーションを高速化します。バリアントバイナリエンコーディング形式の実装はオープンソース ライブラリにパッケージ化されており、他のプロジェクトでも使用できます。
  • バリアントデータ型のサポートもDeltaに対してオープンソース化されており、プロトコルRFCはここで確認できます。バリアントサポートは、Spark 4.0およびDelta 4.0に含まれる予定です。
「私たちは、オープンソースのデータプラットフォームであるLegendを通じてデータに焦点を当て、オープンソースコミュニティを支援しています」と、ゴールドマン・サックスの最高データ責任者兼データエンジニアリング責任者であるニーマ・ラファエル氏は述べています。 「Sparkにおけるオープンソースバリアントの導入は、オープンデータエコシステムにとって大きな前進です」

DBR 15.3 以降では、前述のすべての機能がお客様にご利用いただけるようになります。

バリアントとは

バリアント型 (Variant) は、半構造化データを格納するための新しいデータ型です。 今後の Databricks Runtime 15.3 リリースのパブリック プレビューでは、JSON を介した階層データの入出力がサポートされます。 Variant がなければ、顧客は柔軟性とパフォーマンスのどちらかを選択する必要がありました。 柔軟性を維持するために、顧客は JSON を文字列として単一の列に保存します。 パフォーマンスを向上させるために、顧客は構造体を使用した厳密なスキーマ化アプローチを適用しますが、これにはスキーマの変更を維持および更新するための個別のプロセスが必要です。 Variant を使用すると、顧客は柔軟性を維持し (明示的なスキーマを定義する必要はありません)、JSON を文字列としてクエリする場合に比べて大幅に向上したパフォーマンスを実現できます。

Variant は、JSON ソースに不明で変更され、頻繁に進化するスキーマがある場合に特に役立ちます。 たとえば、顧客はエンドポイント検出と対応 (EDR) のユースケースを共有しており、異なる JSON スキーマを含むログを読み取って結合する必要があります。 同様に、広告クリックやアプリケーションのテレメトリなど、スキーマが不明で常に変更される用途には、バリアント型が適しています。 どちらの場合も、バリアント型データ型の柔軟性により、明示的なスキーマを必要とせずにデータを取り込み、パフォーマンスを向上させることができます。

パフォーマンスベンチマーク

Variant は、JSON を文字列として維持する既存のワークロードよりもパフォーマンスが向上します。 顧客データからヒントを得たスキーマを使用して複数のベンチマークを実行し、文字列とバリアントのパフォーマンスを比較しました。 ネストされたスキーマとフラット スキーマの両方において、Variant を使用した場合のパフォーマンスは、文字列列に比べて 8 倍向上しました。 ベンチマークは、Photon が有効になっている Databricks Runtime 15.0 を使用して実施されました。

パフォーマンスベンチマーク

バリアントを使用するにはどうすればよいですか?

バリアント型をサポートするための新しい関数が多数あり、バリアントのスキーマを検査したり、バリアント列を展開したり、JSON に変換したりすることができます。 PARSE_JSON() 関数は、JSON 文字列入力を表すバリアント値を返すためによく使用されます。

-- SQL example
SELECT PARSE_JSON(json_str_col) FROM T

# python example
df.select(parse_json(json_str_col))

バリアント型データを読み込むには、バリアント型でテーブル列を作成します。 PARSE_JSON() 関数を使用して、任意の JSON 形式の文字列を Variant に変換し、Variant 列に挿入できます。

CREATE TABLE T (variant_col Variant);
INSERT INTO T (variant_col) SELECT PARSE_JSON(json_str_col) ... ;

CTAS を使用して、バリアント列を含むテーブルを作成できます。 作成されるテーブルのスキーマは、クエリ結果から派生します。 したがって、バリアント型 (Variant) 列を持つテーブルを作成するには、クエリ結果の出力スキーマにバリアント型 (Variant) 列が含まれている必要があります。

-- Table T will have a single column: variant_col Variant
CREATE TABLE T AS SELECT PARSE_JSON(json_str) variant_col FROM data

-- Table T will have 2 columns: id, variant_col Variant
CREATE TABLE T AS SELECT id, PARSE_JSON(json_str) variant_col FROM data

COPY INTO を使用して、JSON データを 1 つ以上の Variant 列を持つテーブルにコピーすることもできます。

CREATE TABLE T (name Variant)
COPY INTO T FROM ...
    FILEFORMAT = JSON
    FORMAT_OPTIONS ('singleVariantColumn' = 'name')

パスナビゲーションは、直感的なドット表記の構文に従います。

// Path navigation of a variant column
SELECT variant_col:a.b.c::int, variant_col:arr[1].field::double 
FROM T

完全にオープンソースで、独自のデータロックインはありません

おさらいしましょう。

  1. Variant データ型、バイナリ式、バイナリ エンコード形式は、Apache Spark にすでに統合されています。 バイナリ エンコード形式の詳細については 、こちらを参照してください。
  2. バイナリ エンコード形式を使用すると、文字列と比較して、データへのアクセスとナビゲーションが高速になります。 バイナリ エンコーディング形式の実装はオープンソース ライブラリにパッケージ化されているため、他のプロジェクトでも使用できます。
  3. Variant データ型のサポートも Delta にオープンソース化されており、プロトコルの RFC はここで確認できます。 バリアントのサポートは、Spark 4.0 および Delta 4.0 に含まれます。

さらに、バリアント型のシュレッダー/サブ列化を実装する予定です。 シュレッダーは、バリアント データ内の特定のパスをクエリするパフォーマンスを向上させる手法です。 シュレッドを使用すると、パスを独自の列に格納できるため、そのパスのクエリに必要な IO と計算を削減できます。 また、シュレッダー処理により、データのプルーニングが可能になり、不要な作業が増えるのを防ぐことができます。 シュレッディングは Apache Spark および Delta Lake でも利用可能になります。

今年の 6 月 10 日から 13 日までサンフランシスコで開催される DATA + AI サミットに参加されますか?
バリアント型 - 半構造化データを高速かつシンプルにする」にご参加ください。

バリアントは、パブリック プレビューのDatabricks Runtime 15.3 およびその後すぐに DBSQL プレビュー チャンネルでデフォルトによって有効になります。 半構造化データの使用事例をテストし、ご意見やご質問がある場合は、 Databricks コミュニティ フォーラムで会話を開始してください。 コミュニティのご意見をぜひお聞かせください。

Databricks 無料トライアル

関連記事

データエンジニアのための Databricks Assistant のヒントとコツ

生成AI革命はチームの働き方を変えつつあり、Databricks Assistantはこれらの進歩を最大限に活用しています。会話型インターフェイスを介してデータをクエリできるため、 Databricksワークスペース内での生産性が向上します。アシスタントは Databricks用のデータインテリジェンスエンジンであるDatabricksIQ を搭載しており 、データのセキュリティを確保し、応答が正確で、企業の詳細に合わせて調整されていることを確認します。 Databricks Assistantを使用すると 、タスクを自然言語で記述して、開発者のエクスペリエンスを中断することなく、複雑なコードを生成、最適化、またはデバッグできます。 この投稿では、ブログ「 Databricks Assistantを最大限に活用するための5つのヒント 」 を拡張し 、アシスタントが退屈な作業の排除、生産性と没入感の向上、価値実現までの時間の短縮によってデータエンジニアの生活をどのように改善できるかに焦点を当てます。さまざまなデータ

簡素化された XML データ取り込みの発表

Databricks で XML データの取り込み がネイティブにサポートされるようになりました。 XML は、製造、医療、法律、旅行、金融などのさまざまなユースケースで複雑なデータ構造を表すための一般的なファイル形式です。 これらの業界がアナリティクスとAIの新たな機会を見つけるにつれて、大量の XML データを活用する必要性が高まっています。 Databricks の顧客は、このデータをデータ インテリジェンス プラットフォームに取り込み、そこで Mosaic AI や Databricks SQL などの他の機能を使用してビジネス価値を高めることができます。 ただし、回復力のある XML パイプラインを構築するには、多くの作業が必要になる場合があります。...

SIEM検知ルールの進化:シンプルから洗練への旅

サイバー脅威とそれに対抗するツールはより洗練されたものになっています。 SIEMは20年以上の歴史があり、その間に大きく進化してきました。 当初はパターンマッチングと閾値ベースのルールに依存していたSIEMは、より高度なサイバー脅威に対処するために分析能力を向上させました。 「検知成熟度曲線」と呼ばれるこの進化は、セキュリティ運用が単純な警告システムから脅威の予測分析が可能な高度なメカニズムへと移行したことを示しています。 このような進歩にもかかわらず、最新のSIEMは、大規模なデータセットや長期的な傾向分析、機械学習による検出のためのスケーリングという課題に直面しており、複雑化する脅威要因の検出と対応に対する組織の能力が問われています。 そこでDatabricksがサイバーセキュリティチームを支援します。 Apache Spark™、MLflow、およびDeltaテーブルを搭載したDatabricksの統合アナリティクスは、企業の最新のビッグデータと機械学習のニーズを満たすために、コスト効率よく拡張できます。
エンジニアリングのブログ一覧へ