DeltaLake Universal Formatを使ったクロスプラットフォーム分析

本記事では6月に開催されたDATA+AI Summit 2024でGeneral Availabilityが発表されたDatabricksのDeltaLake Universal Formatの機能を使ってクロスプラットフォームでの分析を実現する方法について紹介します。

DeltaLake Universal FormatはDeltaLakeに保存されたデータをApache Icebergなどの異なるフォーマットで読み出すことができるようにする機能です。本記事では実際にDatabricks上でDeltaLake Universal Formatの機能を有効にしたテーブルを作成し、Amazon AthenaからApache Iceberg形式でクエリを発行するサンプルを用いて、機能の使い方と本機能のメリットについて解説します。

目次

はじめに

こんにちは、NTTコミュニケーションズの露崎です。 本記事では6月に開催されたDATA+AI Summit 2024でGeneral Availabilityが発表されたDatabricksのDeltaLake Universal Formatの機能を使ってクロスプラットフォームでの分析を実現する方法について紹介します。

データレイクとOpen Table Format (OTF)

DeltaLake Universal Formatを解説するにあたり、前提となるデータレイクとOpen Table Formatについて説明します。 データレイクは構造化データ、非構造化データを扱うことのできる一元的なリポジトリです。データレイクでは未加工かつ多様なデータを格納するため、データを分析するためにはデータベースやデータウェアハウスのような構造化されたデータとして取り扱う必要があります。 Open Table Format (OTF) はこうしたデータレイク上に構造化されたテーブル形式を表現するためのフォーマットであり、ACIDトランザクションなどデータベースで取り扱う操作をデータレイク上のデータに対して実現します。 DeltaLakeApache IcebergApache Hudiは、OTFを提供するOSSのソフトウェアです。SparkやTrinoといったOSS分散処理ソフトウェアはこれらのOTFの機能を通してデータレイク上のデータにテーブル形式でアクセスできます。 従来、これらのOTFはそれぞれのOSSコミュニティで開発されており、分析プラットフォーム毎に対応するフォーマットが異なるため、特定のプラットフォームにロックインされるという課題がありました。

Databricks

Databricksはデータウェアハウスとデータレイクの両方の強みを兼ね備えたデータとAIのためのオープンな統合プラットフォーム「データ・インテリジェンス・プラットフォーム」を提供しています。DatabricksではデータレイクのテーブルフォーマットとしてDeltaLakeをサポートしていましたが、こうした互換性の問題を解決するDeltaLake Universal Format機能のGeneral Availability (GA)を2024年6月のDATA+AI Summitにて発表しました。

DeltaLake Universal Format

引用元: https://www.databricks.com/jp/blog/announcing-delta-lake-30-new-universal-format-and-liquid-clustering

DeltaLake Universal FormatはDeltaLakeのフォーマットで保存されたデータをApache Iceberg形式、Apache Hudi形式で読み出すことを可能とするDeltaLakeの機能です。DeltaLake Universal FormatはDeltaLake、Apache Iceberg、Apache Hudiのいずれのテーブルフォーマットも実データはApache Paruquet形式で保存されていることを利用し、DeltaLakeへ書き込まれたデータのテーブルフォーマットに関するメタデータをそれぞれのテーブルフォーマットに変換することで異なるテーブルフォーマットでの読み取りをサポートします。

より具体的な利用イメージを掴んで頂くために、以降では実際にDatabricks上でDeltaLake Universal Formatの機能を有効にしたテーブルを作成し、異なるプラットフォームであるAmazon AthenaからApache Iceberg形式でクエリを発行する方法について解説します。

DeltaLake Universal Formatを利用したクロスプラットフォームでの分析

ここではAzure Databricks上に構築したDeltaLake Universal Format対応テーブルをAmazon Athenaで分析するための設定を行なっていきます。

DeltaLake Universal Format対応テーブルの作成

まず、DeltaLake Universal Formatの機能を有効にするためには、テーブルを作成する際にdelta.enableIcebergCompatV2, delta.universalFormat.enabledFormats の2つのプロパティを設定します。

以下は、uniform_testというカタログにnyctaxiというスキーマを作り、tripsというテーブルを作成するSQLで、DatabrciksのSQL Editorから実行可能です。 SQLの実行にはDeltaLake Universal Formatが利用可能なDatabricks Runtime 14.3LTS以降のRuntimeを使用します。1 今回はAmazon AthenaからSpark、Iceberg形式で読み取るため、delta.universalFormat.enabledFormatsicebergを設定します。 また、このSQLではDatabricksのワークスペースがデフォルトで提供しているNewYorkのタクシーの運転履歴のデータサンプルを実データとしてこのテーブルに入れています。

CREATE CATALOG IF NOT EXISTS uniform_test; -- create test catalog
USE CATALOG uniform_test;
CREATE SCHEMA IF NOT EXISTS nyctaxi;  -- create test schema

CREATE TABLE uniform_test.nyctaxi.trips TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',  -- enable iceberg convert
  'delta.universalFormat.enabledFormats' = 'iceberg', -- enable iceberg convert
)
AS
SELECT * FROM samples.nyctaxi.trips;

DeltaLake Universal Format(Iceberg互換) Tableの確認

DeltaLake Universal Formatを作成後、機能が有効になっているかどうかを以下のSQLで確認します。

DESCRIBE EXTENDED uniform_test.nyctaxi.trips;

このSQLを実行するとnyctax.trips テーブルの情報が表示されます。以下は実行結果の一部抜粋で、このように Converted delta versionConverted delta timestamp が表示されていれば、すでにIceberg形式のメタデータが作成されIcebergテーブルとして読み出し可能な状態になっています。

Amazon Athenaの設定

次にAmazon Athenaでこのテーブルを読み出すための設定をします。設定はAthenaのNotebook EditorからEdit Sessionを選択し、セッションのプロパティを設定します。

プロパティには以下を設定します。設定値については検証時の値のためパッケージバージョン等については利用環境に合わせて変更してください。公式ドキュメントではIceberg形式でのメタデータ読み取りに必要なプロパティが紹介されていますが、ここでは参照したメタデータから実際のデータの読み取るためにAzure DataLake Storageのアクセスキーも設定していることに注意してください。

Key Value 備考
spark.jars.packages org.apache.hadoop:hadoop-azure:3.2.1 athenaのpyspark versionが3.2.1のためmaven の3.2.1を指定
spark.sql.catalog.spark_catalog org.apache.iceberg.spark.SparkSessionCatalog
spark.sql.catalog.spark_catalog.io-impl org.apache.iceberg.aws.s3.S3FileIO azure adlsでもS3FileIOを指定
spark.sql.catalog.unity org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.unity.catalog-impl org.apache.iceberg.rest.RESTCatalog
spark.sql.catalog.unity.token <databricksのpersonal access token> 設定方法
spark.sql.catalog.unity.uri <databricksのapi root>/api/2.1/unity-catalog/iceberg iceberg catalogのAPIエンドポイント
spark.sql.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark.hadoop.fs.azure.account.key.datalakedatabricksus.dfs.core.windows.net <ADLSのaccess key> OAuth等での設定等はこちら

Amazon Athenaからのクエリの発行

Sparkのプロパティ設定が完了すれば、以下のようにAthenaから直接DeltaLake Universal FormatテーブルのデータにSQLを発行できるようになります。SQLを発行する対象のカタログはunityという接頭辞をつけたunity.uniform_test.nyctax.trips という指定形式になります。

catalog_name = "unity.uniform_test.nyctaxi.trips"
result = spark.sql(f"SELECT * FROM {catalog_name}")
print(result)
result.show()

まとめ

本記事ではDeltaLake Universal Formatの機能を使ってDatabricksのUnity Catalog上のデータをAmazon Athenaで分析する方法について紹介しました。 このようにDeltaLake Universal Formatを使うと、利用したいプラットフォームへ事前にデータを移動することなく、直接データを参照し分析することが可能になります。こうしたオープンテーブルフォーマットの機能を利用することで、ユーザー側のプラットフォームの選択肢が広がり、より多くのユースケースへ適応できるようになると考えられます。

参考文献

© NTT Communications Corporation 2014