bigquery-magics を使って VSCode の Jupyter から BigQuery のクエリを実行する

# 概要
`bigquery-magics` を用いることで、以下のようにVSCode上のJupyterノートブックからBigQueryのクエリを実行することができます。

![result_query](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/ca714b7d-6b1f-4d30-b1b3-af67c00abdf1.png)

https://googleapis.dev/python/bigquery-magics/latest/index.html

ここでは、この `bigquery-magics` の導入手順および使い方を紹介します。

# 実行環境
- Visual Studio Code
    - [Jupyter Extension](https://marketplace.visualstudio.com/items/?itemName=ms-toolsai.jupyter)
- Python
    - [bigquery-magics](https://googleapis.dev/python/bigquery-magics/latest/index.html)

`bigquery-magics` は `pip` を用いて以下のコマンドでインストールします。

```powershell:PowerShell
pip install bigquery-magics
```

`conda` を用いる場合は以下の通りです。

```powershell:PowerShell
conda install conda-forge::bigquery-magics
```

# 初期設定およびクエリの実行
JupyterノートブックをVSCodeで開き、セルに以下を入力し実行します。

```python:Jupyter セル 1
# Jupyter用拡張機能の読み込み
%reload_ext bigquery_magics

import bigquery_magics

# BigQueryのプロジェクトIDを指定
bigquery_magics.context.project = "bq-project-012345"
```

また、マジックコマンド `%%bigquery` と実行したいクエリを以下のように入力します。

```python:Jupyter セル 2
%%bigquery
SELECT "apple" AS fruit, "carrot" AS vegetable
```

上記のセルを初めて実行するとURLが表示されるので、クリックしてブラウザでアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/e1197628-78b3-407f-9064-9eb3868bfa72.png)

Googleアカウントへのログインが要求されるので、アカウントを選択します。

![login](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/6fdf76ac-22de-470e-a5ce-e4c16e420a54.png)

問題なければそのままアクセス権を付与します。

![authorize](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/927fe598-24f0-4281-94a9-a2e865dfef1b.png)

ログインおよびアクセス権の付与が完了すると以下のページが表示されるので、 `Copy` ボタンを押して認証コードをコピーします。

![copy_verification_code](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/36f8bd63-2a2e-4845-a78c-59d872fecabc.png)

VSCodeに戻り、URLと同時に表示されていた入力欄にコピーした認証コードを入力します。

![enter_verification_code](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/50e0375a-9712-46b3-b652-3be717036040.png)

アクセスに成功すると、以下のようにクエリ結果が表示されます。

![result_query](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/ca714b7d-6b1f-4d30-b1b3-af67c00abdf1.png)

以上でJupyterノートブックからBigQueryのクエリが可能になりました。

# クエリ結果をデータフレームとして取得する
以下のようにマジックコマンドのオプションに任意の変数名を指定することで、クエリ結果をデータフレームとして取得することもできます。

```python:Jupyter セル 3
%%bigquery df
SELECT "apple" AS fruit, "carrot" AS vegetable
```

ここでは `df` という変数にクエリ結果がDataFrameとして代入されるので、以降のセルで一般的なDataFrameの変数として利用することができます。

```python:Jupyter セル 4
display(type(df))
display(df)
```

![use_variable](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/7c24e07a-8e8d-4d23-ac89-8aeef0df42f2.png)

# 非推奨：`google.cloud.bigquery` からの呼び出し
マジックコマンドは以下のように `google-cloud-bigquery` パッケージからの呼び出しも可能です。

```python:Jupyter セル 1
# Jupyter用拡張機能の読み込み
%reload_ext google.cloud.bigquery

from google.cloud.bigquery import magics

# BigQueryのプロジェクトIDを指定
magics.context.project = "bq-project-012345"
```

しかし、クエリ実行時に表示される以下の警告の通り、現在では `google.cloud.bigquery` の使用は非推奨となっており、`bigquery_magics` の使用が推奨されています。

> FutureWarning: %load_ext google.cloud.bigquery is deprecated. Install bigquery-magics package and use `%load_ext bigquery_magics`, instead.