0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Migration guide | Databricks on AWS [2022/4/6時点]の翻訳です。

Databricksクイックスタートガイドのコンテンツです。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

ワークロードをDelta Lakeに移行する際、Apache SparkやApache Hiveによっって提供されるデータソースと比較した以下のシンプルさと差異に注意する必要があります。

Delta Lakeは以下のオペレーションを自動でハンドリングするので、皆様が手動で実行すべきではありません。

  • REFRESH TABLE: Deltaテーブルは常に最新の状態の情報を返却するので、変更後に手動でREFRESH TABLEを実行する必要はありません。
  • パーティションの追加、削除: Delta Lakeはテーブルに存在するパーティションセットを自動で追跡し、データが追加、削除されるとデータの一覧を更新します。このため、ALTER TABLE [ADD|DROP] PARTITIONMSCKを実行する必要はありません。
  • 単一パーティションのロード: 最適化として、例えばspark.read.parquet("/data/date=2017-01-01")を実行して、興味のあるデータのパーティションを直接ロードすることがあるかもしれません。Delta Lakeでは、適切なデータを検索するためにトランザクションログからクイックにファイルの一覧を読み込みめるので、これは不要となります。単一のパーティションに興味があるのであれば、spark.read.delta("/data").where("date = '2017-01-01'")のようにWHERE句を使って指定します。パーティション内に大量のファイルがある大規模テーブルにおいては、ディレクトリ内のファイル一覧の取得は、通常はトランザクションログからのファイル一覧取得よりも遅いため、単一のパーティションをロードする(パーティションパスの直接指定、WHEREの使用)よりもはるかに高速になる場合があります。

既存のアプリケーションをDelta Lakeに移植する際、トランザクションログをバイパスする以下のオペレーションは避けるべきです。

  • 手動でデータを編集: Delta Lakeはテーブルに対する変更を原子的にコミットするためにトランザクションログを使用します。ログは信頼できる情報源(source of truth)であるため、書き込まれたがトランザクションログに追加されていないファイルはSparkで読み込むことができません。同様に、手動でファイルを削除したとしても、ファイルへのポインターは依然としてトランザクションログに存在します。Deltaテーブルに格納されているファイルを手動で編集するのではなく、このガイドで説明されているコマンドを常に使用してください。
  • 外部リーダー: Delta Lakeに格納されているデータを直接読み込みます。Deltaテーブルの読み込み方に関しては、Access Delta tables from external data processing engines をご覧ください。

サンプル

/data-pipelineというディレクトリにParquetデータを格納しており、eventsというDeltaテーブルを作成するものとします。

最初のサンプルでは以下の手順を説明しています。

  • オリジナルの場所/data-pipelineのParquetデータをデータフレームに読み込みます。
  • データフレームのコンテンツを別の場所/tmp/delta/data-pipeline/にDeltaフォーマットとして保存します。
  • /tmp/delta/data-pipeline/にあるデータをベースとしてeventsテーブルを作成します。

2つ目のサンプルでは、格納場所/data-pipeline/を変えずにParquetからDeltaフォーマットにデータを変換するためにCONVERT TO TABLEの使用方法を説明します。

これらの例では、データを指定された場所で管理し続けるアンマネージドテーブルを作成します。Databricksはメタストアにテーブル名と指定された場所を記録します。

Deltaテーブルとして保存

  1. Parquetデータをデータフレームに読み込み、データフレームのコンテンツを新規ディレクトリにdeltaフォーマットで保存します。

    Python
    data = spark.read.parquet("/data-pipeline")
    data.write.format("delta").save("/tmp/delta/data-pipeline/")
    
  2. 新規ディレクトリにあるファイルを参照するeventsというDeltaテーブルを作成します。

    Python
    spark.sql("CREATE TABLE events USING DELTA LOCATION '/tmp/delta/data-pipeline/'")
    

Deltaテーブルへの変換

ParquetテーブルをDeltaテーブルに変換するオプションは3つあります。

  • ファイルをDelta Lakeフォーマットに変換し、Deltaテーブルを作成します。

    SQL
    CONVERT TO DELTA parquet.`/data-pipeline/`
    CREATE TABLE events USING DELTA LOCATION '/data-pipeline/'
    
  • Parquetテーブルを作成し、Deltaテーブルに変換します。

    SQL
    CREATE TABLE events USING PARQUET OPTIONS (path '/data-pipeline/')
    CONVERT TO DELTA events
    
  • ParquetテーブルをDeltaテーブルに変換します。

    SQL
    CONVERT TO DELTA events
    

    ここではeventsテーブルがParquetテーブルであると想定しています。

詳細に関しては、ParquetテーブルをDeltaテーブルに変換するをご覧ください。

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?