BigQuery × Databricks ：サンドボックス環境と Databricks Community edition で始める無償で高速データ分析

## 概要

本記事では、 BigQuery サンドボックス環境から、 Apache Spark SQL Connector for Google BigQuery （以下「 Spark コネクター for BQ 」）を用いて Databricks Community edition にてデータを取得する方法を紹介します。 Spark コネクター for BQ は、 BigQuery Storage API を介してデータにアクセスするため、データフレーム操作などを行う際、低コストかつ高パフォーマンスな利用が可能な場合があります。

本記事は下記シリーズの一部です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1bb4805e-9f67-49e9-8e72-36036bf4310c.png)

出所：[Databricks で BigQuery のデータを取得する方法の徹底ガイド - Qiita](https://qiita.com/manabian/items/7097a9c31de23752d58a)

## 検証コードと実行結果

### BigQuery の事前設定

#### 1. `IAM と管理` -> `サービス アカウント`タブにて、`+ サービス アカウントを作成`を千九田ふぁ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/908f78c1-b488-56ef-601c-959584f663db.png)

#### 2. 任意の名称と ID を入力して`作成して続行`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a9772e0e-dd1d-08b1-7b89-b6c1ddda1205.png)

#### 3. `BigQuery user`（BigQuery ユーザー）と`BigQuery Data Editor`（BigQuery データ編集者）のロールをついかして`完了`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4345fab3-90df-3cca-4948-d02067244acc.png)

#### 4. 作成したサービスアカウント -> `キーを追記`にある`新しい鍵を作成`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bae1236f-c7c9-c823-08d9-904e5e25cccf.png)

#### 5. `JSON`を選択して`作成`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9981d03b-f557-ae7a-9a39-d14223a3c213.png)

#### 6. JSON ファイルがダウンロードされたことを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/96d8d870-cea9-6136-6f45-6e1e616e2d49.png)

### Databricks Community edition での実行例

#### 1. リンク先にてDatabricks Community edition の申し込み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5a432ec7-b519-89f7-22df-296332d98f69.png)

引用元：[Signup - Community Edition - Databricks](https://login.databricks.com/?dbx_source=docs&intent=CE_SIGN_UP&rl_aid=c4149273-8da3-4354-bb2b-c43eb3f6bdab&tuuid=27d41d8e-1d0b-4445-8435-104372c6de4c)

#### 2. Databricks にログイン後に`Compute` -> `Create comput`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/68ab4bb5-8ccf-7f40-8118-c9fe390abed9.png)

#### 3. `Databricks runtime version`にて最も新しいバージョンのクラスター選択し`Create compute`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c9490c25-3827-2ff7-3e27-cf8fec8ada3a.png)

#### 4. 左上の`New` -> `Notebook`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c978023d-e443-58e7-f737-93d054e0dc91.png)

#### 5. 作成されたノートブックの右側にある`Connect`を選択し作成したクラスターを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c05f45bd-c1b5-03d3-135d-c596d77e6441.png)

#### 6. Databricks ノードブック上で BigQuery の認証キーの内容を貼り付けて実行

```python
json_str = b"""{json_key}"""
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d3117f91-dc8b-9b1e-8667-9c0cad4c2e05.png)

#### 7. Google Cloud の Project ID を貼り付けて実行

```python
# プロジェクト ID を設定
parent_project_id = "{project_id}"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4792ac14-8f72-8d4b-2ff2-d83187892e0d.png)

Project ID は Google Cloud のコンソールにてプロジェクトを切り替えるウィンドウにて確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ecc3c24d-c293-bca6-30b6-deec9559f99a.png)

### 8. BigQuery からデータを取得するコードを実行

```python
import base64

encoded_string = base64.b64encode(json_str).decode('utf-8')

# データ取得元のテーブル名を設定
table_name = "bigquery-public-data.google_analytics_sample.ga_sessions_20170801"

df = (
    spark.read
    .format("bigquery")
    .option("parentProject", parent_project_id)
    .option("credentials", encoded_string)
    .option("table",table_name)
    .load()
)

df.limit(50).display()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5896715f-1503-48c6-b70e-3f426ae2db6c.png)


## まとめ

本記事では、**Apache Spark SQL Connector for Google BigQuery（Spark コネクター for BQ）** を利用し**Databricks Community Edition** 上で BigQuery のデータを取得する手順を紹介しました。 Spark コネクター for BQ は、大規模データ分析やデータフレーム操作において有用なツールであり、ぜひ活用してみてください。