TalendでBigQueryからデータを取得してみる

# はじめに

前回TalendをインストールしてCSVの読み取り・書き込みをしました。

https://qiita.com/takaHAL/items/b355c60d90110211dc14

この記事では、Talendで
- BigQueryでデータ取得
- CSV書き出し

をやってみようと思います。

# BigQueryでデータ取得

## 事前準備

### サービスアカウントの作成

今回は、BigQueryからデータを取得する際に
サービスアカウントを使って認証します。

まずは、GoogleCloud [コンソールのサービスアカウント](https://console.cloud.google.com/iam-admin/serviceaccounts)にアクセスし
サービスアカウント作成ボタンを押す。

![サービス-アカウント-–-IAM-と管理-–-data-transfer-–-Google-Cloud-コンソール (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/1d7c18bd-55ef-5702-88bd-b4256c1a3df6.png)


サービスアカウント名を入力

![サービス-アカウントの作成-–-IAM-と管理-–-data-transfer-–-Google-Cloud-コンソール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/eb9c2221-0c39-8370-ca79-49207e808631.png)

ロールを追加

- BigQueryデータ閲覧者
- BigQueryジョブユーザ

を付与しました。

ロール追加で、サービスアカウントの作成は完了です。

![スクリーンショット 2022-12-12 16.51.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/995f8fa4-a34a-974e-9501-c628bc1a93d2.png)

### サービスアカウントの鍵をダウンロード

サービスアカウント認証ではサービスアカウントに対応したJSONファイルを使用します。

作成したサービスアカウントの右端の３点リーダをクリックし、鍵を管理を選択

![サービス-アカウント-–-IAM-と管理-–-data-transfer-–-Google-Cloud-コンソール (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/6bc7133d-2af4-461f-d145-c4e13e06c78e.png)

新しい鍵を作成を選択

![talend-bq-–-IAM-と管理-–-data-transfer-–-Google-Cloud-コンソール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/e62ce7fe-31a8-a036-5265-d49bfddb260c.png)

JSONで作成

![スクリーンショット 2022-12-12 17.10.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/11217945-4de9-59ce-c967-0e3f4264d163.png)

`プロジェクトID.json`となっているファイルをこの後の記事でわかりやすくするために`service-account.json`というファイル名に変更しました。

### データの準備

今回は、一般公開データセットである気象データを使います。

https://techblog.gmo-ap.jp/2020/05/12/weatherbigdata/

## tBigQueryInputの定義

BigQueryからデータを読み取るには、**tBigQueryInput**コンポーネントを使用します。

パレットからデザインワークスペースにドラッグ&ドロップします。

![スクリーンショット 2022-12-12 16.27.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/d73199ef-ce35-ff1a-fe4e-e7b4bbaca059.png)

配置したコンポーネントをクリックし、設定を編集します。

設定には、以下の3つを設定していきます。
- Schema
- 認証方法
- Project ID
- SQL

![スクリーンショット 2022-12-12 16.30.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/160ae106-86a4-e992-f01a-6afb3e328fb3.png)

認証方法は、３通り存在しますが
今回はサービスアカウントを使用します。

![スクリーンショット 2022-12-12 16.33.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/721660bc-caec-43f4-2653-5d91932377a6.png)

![スクリーンショット 2022-12-12 17.19.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/e99775d7-c347-5897-da58-31cb7acfcbc7.png)

SQLを記述します。

気象データは、の列の説明についての詳細はこちら

https://www1.ncdc.noaa.gov/pub/data/ghcn/daily/readme.txt

東京 最高気温、最低気温、降水量のSQLを使わせていただきます。

https://techblog.gmo-ap.jp/2020/05/12/weatherbigdata/

```sql
SELECT
  id
  , date
  , MAX(tmin) AS tmin
  , MAX(tmax) AS tmax
  , MAX(prcp) AS prcp
FROM
  ( 
    SELECT
      tokyoweather.id
      , tokyoweather.date
      , IF ( tokyoweather.element = 'TMIN', tokyoweather.value / 10, NULL ) AS tmin
      , IF ( tokyoweather.element = 'TMAX', tokyoweather.value / 10, NULL ) AS tmax 
      , IF ( tokyoweather.element = 'PRCP', tokyoweather.value / 10, NULL ) AS prcp
    FROM
     `bigquery-public-data.ghcn_d.ghcnd_2022` AS tokyoweather 
    WHERE
      id = 'JA000047662'
  ) 
GROUP BY
  id,date 
ORDER BY
  date
```

- 認証方法
- Project ID
- SQL

の定義が完了しました。

![スクリーンショット 2022-12-12 18.00.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/0aa53358-6b83-d01f-0ee1-93c205275431.png)

schemaの定義

![スクリーンショット 2022-12-12 18.05.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/810e67d7-39c6-329d-a75e-6d3876519371.png)

## データ確認

### tLogRowの定義

**tLogRow**を配置し、データが取得できるかを確認します。

![スクリーンショット 2022-12-12 18.21.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/4aeddca3-c829-72a1-ef3e-64ec6a78b32b.png)

モードをテーブルに変更

![スクリーンショット 2022-12-12 18.22.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/616a2092-6166-f323-1443-56b7bf7e0b47.png)

### 実行

データが取得できることを確認できました。

![スクリーンショット 2022-12-12 18.24.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/3e744d34-27ad-b9d8-ec45-4156f9c0a34e.png)

# CSV書き出し

## tFileOutputDelimitedの定義

Field Separator`","`Include Headerにチェック、Sync columnsボタンを押しました。

![スクリーンショット 2022-12-12 18.27.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/dfdbda5a-9018-84d5-a690-b1768b7048a8.png)


## 実行してみる

データは取れたが、dateがおかしい？？

```csvs
id,date,tmin,tmax,prcp
JA000047662,15-07-0006,-1.0,,0.0
JA000047662,15-07-0007,0.4,,0.0
```

**tBigQueryInput**でのDate Patternでデフォルトのものが期待するものになっていなかったようです。

![スクリーンショット 2022-12-12 18.34.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/e69ef8af-7369-b9df-450d-62e95a657def.png)



![スクリーンショット 2022-12-12 18.36.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/5d44758f-4dfb-0c37-bf90-c519483fe471.png)

再度実行してみます。

無事想定したデータになりました！

```csvs
id,date,tmin,tmax,prcp
JA000047662,2022-01-01,-1.0,,0.0
JA000047662,2022-01-02,0.4,,0.0
JA000047662,2022-01-03,0.5,,0.0
```

# 最後に

今回は、Talendで　`BigQueryでデータ取得→CSV書き出し`を試してみました。
無料のETLでBigQueryに対応してくれているのはありがたいですね、
データ加工についてまだまだやれてないので
次回はデータ加工についてまとめてやっていこうと思います。