Databricksレイクハウスにデータをロードする

[Load data into the Databricks Lakehouse \| Databricks on AWS](https://docs.databricks.com/ingestion/index.html) [2023/1/13時点]の翻訳です。

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

Databricksでは、Delta Lakeを基盤としたレイクハウスにデータをロードする方法を多数取り揃えています。クラウドオブジェクトストレージからのインクリメンタルなデータ取り込みにはAuto Loaderを使うことをお勧めします。[データ追加UI](https://docs.databricks.com/ingestion/add-data/index.html)では、クイックにローカルファイルをアップロードしたり、外部データソースに接続するための数多くの選択肢を提供しています。

# 初めてのETLワークロードを実行する

DatabricksでAuto Loaderをまだ使ったことがないのであれば、チュートリアルからスタートしてください。[Databricksで初めてのETLワークロードを実行する](https://qiita.com/taka_yayoi/items/e27fd8b44308ea4ec8d8)をご覧ください。

# Auto Loader

[Auto Loader](https://qiita.com/taka_yayoi/items/df143647dcf5942b51c6)は、追加のセットアップなしにクラウドストレージにデータファイルが新たに到着すると、インクリメンタルかつ効率的に処理を行います。Auto Loaderは、`cloudFiles`という構造かストリーミングソースを提供しています。

# Delta Live TablesとAuto LoaderによるETLの自動化

[Auto LoaderとDelta Live Tables](https://qiita.com/taka_yayoi/items/82c18fab05f9d948237c)を用いることで、スケーラブル、インクリメンタルなデータ取り込みのインフラストラクチャのデプロイメントをシンプルにすることができます。Delta Live Tablesではノートブックのような標準的なインタラクティブな処理の実行ではなく、プロダクションに使えるインフラストラクチャのデプロイメントにフォーカスしています。

# ローカルデータファイルのアップロードや外部データソースへの接続

テーブルを作成するためにローカルのデータファイルのアップロードや外部ソースからのデータ取り込みをセキュアに行うことができます。[Databricksのデータ追加UIを用いたデータのロード](https://qiita.com/taka_yayoi/items/282c9e652f9d0f8494b0)をご覧ください。

# パートナーインテグレーション

Databricksのパートナーインテグレーションによって、Databricksにデータをロードすることができます。これらのインテグレーションによって、Databricksに様々なソースからローコード、スケーラブルにデータを取り込むことができます。[Databricksにおけるインテグレーション](https://qiita.com/taka_yayoi/items/1982aeaf8186176c3ced)をご覧ください。

# COPY INTO

[COPY INTO](https://qiita.com/taka_yayoi/items/806763b5e2d212e8cdbc)を用いることで、SQLユーザーは冪等性を持ち、インクリメンタルにクラウドオブジェクトストレージからDelta Lakeテーブルにデータをロードすることができます。これは、Databricks SQL、ノートブック、Databricksジョブで使用することができます。

# Deltaへの変換

Databricksでは、Parquet、IcebergテーブルをDelta Lakeに変換し、レイクハウスのすべての機能を解放する単一のコマンドを提供しています。[Delta Lakeへの変換](https://qiita.com/taka_yayoi/items/ca4c822bcc02f4ea8f7c)をご覧ください。

# いつCOPY INTOを使い、いつAuto Loaderを使うのか

以下にAuto LoaderとCOPY INTOを選択する際に検討すべきいくつかの事柄を示します:

- 数千規模のファイルを取り込もうとしているのであれば`COPY INTO`を使うことができます。一定期間で数百万以上のファイルを予想しているのであれば、Auto Loaderを使ってください。Auto Loaderは、COPY INTOと比較してファイルを検知するオペレーションの総数が少なくて済み、処理を複数のバッチに分割することができ、Auto Loaderは低コストで規模に対して効率的であることを意味します。
- データスキーマが頻繁に進化するのであれば、Auto Loaderはスキーマ推定、進化に関するより良いプリミティブを提供しています。[Auto Loaderにおけるスキーマ推定とスキーマ進化の設定](https://qiita.com/taka_yayoi/items/2ccef74b279b1477154b)をご覧ください。
- 再度アップロードされたファイルのサブセットのロードにおいては、COPY INTOの方が管理が若干簡単です。Auto Loaderを用いる場合、ファイルのサブセットのSELECTを再処理することがより困難となります。しかし、Auto Loaderストリームを同時に実行しながらも、ファイルのサブセットを再ロードするためにCOPY INTOを使うことができます。

Auto Loaderと[COPY INTO](https://qiita.com/taka_yayoi/items/806763b5e2d212e8cdbc)の概要とデモンストレーションについては、以下のYouTube動画をご覧ください(2分)。
<iframe width="560" height="315" src="https://www.youtube.com/embed/Wte44wRZKDk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# データをロードするためにデータタブを使う

Data Science & Engineeringのワークスペースのデータタブを用いることで、テーブルを作成するためにローカルにある小規模のファイルをロードすることができます。[Explore and create tables in DBFS](https://docs.databricks.com/data/data-tab.html)をご覧ください。

# 外部ソースからデータをロードするためにApache Sparkを使う

Apache Sparkを用いて様々なデータソースに接続することができます。選択肢の一覧と接続のサンプルに関しては、[Databricksにおける外部データの取り扱い](https://qiita.com/taka_yayoi/items/09348912a92a24441c40)をご覧ください。

# データ取り込みの際にキャプチャされたファイルメタデータを確認する

Apache Sparkはデータロードの際にソースファイルに関するデータを自動でキャプチャします。[ファイルメタデータカラム](https://qiita.com/taka_yayoi/items/949e47841df89fd7328b)を用いてこのデータにアクセスすることができます。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)