Databricksにおける外部データの取り扱い

[Interact with external data on Databricks \| Databricks on AWS](https://docs.databricks.com/external-data/index.html) [2022/12/1時点]の翻訳です。

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

Databricksランタイムは、レイクハウスとのデータインポート・エクスポートをシンプルにするために、著名なデータソースやフォーマットのバインディングを提供しています。本書では、ビルトインサポートのフォーマットとインテグレーションを特定する役に立つ情報を提供します。また、さらに多くのシステムとやり取りをできるようにDatabricksを拡張する方法にアクセスすることができます。

Databricksでは、数多くの[データロードとデータ取り込み](https://qiita.com/taka_yayoi/items/e5bb37c3ffb107ad0381)の最適化を提供しています。

また、DatabricksではSQLとデータフレームユーザーに対してクエリーフェデレーションをサポートしています。[Databricksのクエリーフェデレーションとは？](https://qiita.com/taka_yayoi/items/91bb374a3bb234280f68)をご覧ください。

これまでにDatabricksデータの読み書きを行ったことがないのであれば、[Python](https://qiita.com/taka_yayoi/items/6cf24cd4ad921aa61356)や[Scala](https://docs.databricks.com/getting-started/dataframes-scala.html)のデータフレームチュートリアルを試すことを検討ください。Apache Sparkに慣れ親しんでいるユーザーにとっても、このチュートリアルはクラウドにあるデータへのアクセスに関する新た課題に取り組むことができます。

Partner Connectは数多くのエンタープライズソリューションに対して、最適化され設定が容易なインテグレーションを提供します。[What is Databricks Partner Connect?](https://docs.databricks.com/partner-connect/index.html)をご覧ください。

# Databricksで使えるデータフォーマットは？

Databricksには、Apache Sparkによってネイティブにサポートされているすべてのデータフォーマットに対してビルトインのキーワードバインディングがあります。Apache SparkがParquetを使うのと同じように、Databricksはデータとテーブルの読み書きにおけるデフォルトのプロトコルとしてDelta Lakeを使います。

以下のデータフォーマットのすべては、Apache SparkのデータフレームとSQLにおいてビルトインのキーワード設定を有しています。

- [Delta Lake](https://docs.databricks.com/delta/index.html)
- [Parquet](https://docs.databricks.com/external-data/parquet.html)
- [ORC](https://docs.databricks.com/external-data/orc.html)
- [JSON](https://docs.databricks.com/external-data/json.html)
- [CSV](https://docs.databricks.com/external-data/csv.html)
- [Avro](https://docs.databricks.com/external-data/avro.html)
- [Text](https://docs.databricks.com/external-data/text.html)
- [Binary](https://docs.databricks.com/external-data/binary.html)

また、Databricksでは[MLflowエクスペリメント](https://qiita.com/taka_yayoi/items/e2a0094277a3f789bf8c)をロードするカスタムキーワードを提供しています。

## 特別な検討を要するデータフォーマット

以下のデータフォーマットにおいては、使う際に追加の検討や特別な検討が必要になるかもしれません:

- [画像](https://qiita.com/taka_yayoi/items/8d4b1b61699d68a34e58)は`binary`データとしてロードすることをお勧めします。
- [XML](https://docs.databricks.com/external-data/xml.html)はネイティブではサポートされていませんが、ライブラリをインストールすることで使用することができます。
- また、[Hiveテーブル](https://docs.databricks.com/external-data/hive-tables.html)はApache Sparkでネイティブでサポートされていますが、Databricksでの設定が必要となります。
- Databricksでは圧縮されている様々なファイルフォーマットを直接読み込むことができます。必要に応じて[圧縮ファイルをunzip](https://qiita.com/taka_yayoi/items/0197d5c985089255f16a)することができます。
- [LZO](https://docs.databricks.com/external-data/lzo.html)にはcodecのインストールが必要となります。

Apache Sparkのデータソースに関しては、[Generic Load/Save Functions](https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html)や[Generic File Source Options](https://spark.apache.org/docs/latest/sql-data-sources-generic-options.html)をご覧ください。

# Databricksで使用するクラウドストレージをどのように設定するのか？

Databricksでは、データファイルとテーブルを格納するためにクラウドオブジェクトストレージを使用します。ワークスペースをデプロイメントする際、Databricksは[DBFSルート](https://qiita.com/taka_yayoi/items/406b639a9dcd43dbcc54)と呼ばれるクラウドオブジェクトストレージロケーションを設定します。アカウントの他のクラウドオブジェクトストレージロケーションとの接続を設定することもできます。

ほぼ全てのケースにおいて、DatabricksでApache Sparkを用いて操作するデータファイルはクラウドオブジェクトストレージに格納されます。接続を設定する際のガイドとして、以下のドキュメントをご覧ください。

- [Working with data in Amazon S3](https://docs.databricks.com/external-data/amazon-s3.html)
- [Access Azure Data Lake Storage Gen2 and Blob Storage](https://docs.databricks.com/external-data/azure-storage.html)
- [Google Cloud Storage](https://docs.databricks.com/external-data/gcs.html)
- [Accessing Azure Data Lake Storage Gen1 from Databricks](https://docs.databricks.com/external-data/azure-datalake.html)

# JDBCでDatabricksに接続するデータソースは？

数多くのデータソースに接続するために[JDBC](https://docs.databricks.com/external-data/jdbc.html)を使うことができます。Databricksランタイムには数多くのJDBCデータベースのドライバーが含まれていますが、お使いのデータベースに接続するためにはドライバーや別バージョンのドライバーをインストールする必要があるかもしれません。サポートされているデータベースには以下のものが含まれます:

- [Query PostgreSQL with Databricks](https://docs.databricks.com/external-data/postgresql.html)
- [Query MySQL with Databricks](https://docs.databricks.com/external-data/mysql.html)
- [Query MariaDB with Databricks](https://docs.databricks.com/external-data/mariadb.html)
- [Query SQL Server with Databricks](https://docs.databricks.com/external-data/sql-server.html)

# Databricksと連携できるデータサービスは？

以下のデータサービスでは、接続設定、セキュリティ資格情報、ネットワーク設定が必要となります。AWSアカウントやDatabricksにおける管理者、パワーユーザー権限が必要になるかもしれません。また、いくつかにおいてはDatabricks[ライブラリ](https://qiita.com/taka_yayoi/items/0c7fc7d741aad34bf9d4)を作成し、クラスターにインストールする必要があります。

- [Query Amazon Redshift with Databricks](https://docs.databricks.com/external-data/amazon-redshift.html)
- [Google BigQuery](https://docs.databricks.com/external-data/bigquery.html)
- [MongoDB](https://docs.databricks.com/external-data/mongodb.html)
- [Cassandra](https://docs.databricks.com/external-data/cassandra.html)
- [Couchbase](https://docs.databricks.com/external-data/couchbase.html)
- [ElasticSearch](https://docs.databricks.com/external-data/elasticsearch.html)
- [Neo4j](https://docs.databricks.com/external-data/neo4j.html)
- [Redis](https://docs.databricks.com/external-data/redis.html)
- [Read and write data from Snowflake](https://docs.databricks.com/external-data/snowflake.html)
- [Azure Cosmos DB](https://docs.databricks.com/external-data/cosmosdb-connector.html)
- [Query data in Azure Synapse Analytics](https://docs.databricks.com/external-data/synapse-analytics.html)

### Databricks 無料トライアル

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