GCP触ってみた⑥

# BigQuery
AWSでいうとRedshiftに近い？
サーバレス、フルマネージドのエンタープライズデータウェアハウス

### ※前提条件
SQLについて詳しくないので、とりあえず触ってみた要素が強いです

## データセットの作成
```shell
# bq mk <データセットID>
bq mk gcpstudybq01
Dataset 'gcpstudybq:gcpstudybq01' successfully created.
```

## データセットの確認
```shell
# bq ls
bq ls
   datasetId
 --------------
  gcpstudybq01
```
作成したデータセットが表示されている

## データセットの詳細表示
```shell
# bq show <データセットID>
bq show gcpstudybq01
Dataset gcpstudybq:gcpstudybq01

   Last modified             ACLs             Labels    Type     Max time travel (Hours)
 ----------------- ------------------------- -------- --------- -------------------------
  14 Feb 16:43:30   Owners:                            DEFAULT   168
                      projectOwners,
                      mail@gmail.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders
```

## テーブルの作成、およびスキーマの定義
```shell
# bq mk -t <データセットID>.<テーブルID> <スキーマ>
bq mk -t gcpstudybq01.table2 firstname:string,lastname:string,age:integer
Table 'gcpstudybq:gcpstudybq01.table2' successfully created.
```

## 作成したテーブルの確認
```shell
# bq ls <データセットID>
bq ls gcpstudybq01
  tableId   Type    Labels   Time Partitioning   Clustered Fields
 --------- ------- -------- ------------------- ------------------
  table1    TABLE
  table2    TABLE
```

## table2の詳細確認
```shell
# bq show <データセットID>.<テーブルID>
bq show gcpstudybq01.table2
Table gcpstudybq:gcpstudybq01.table2

   Last modified           Schema          Total Rows   Total Bytes     Expiration      Time Partitioning   Clustered Fields   Total Logical Bytes   Total Physical Bytes   Labels
 ----------------- ---------------------- ------------ ------------- ----------------- ------------------- ------------------ --------------------- ---------------------- --------
  17 Feb 07:56:49   |- firstname: string   0            0             18 Apr 07:56:49                                          0
                    |- lastname: string
                    |- age: integer
```

## データのインポート
```shell
# bq load <データセットID>.<テーブルID> <ローカルファイルのパス> [<スキーマ>]
# 今回はスキーマ定義済みのため<スキーマ>は入力しない
bq load gcpstudybq01.table2 nohara_family.csv
Upload complete.
Waiting on bqjob_r2c54640de50a3229_000001865c7554bc_1 ... (1s) Current status: DONE
```

```nohara_family.csv
hiroshi,nohara,35
misae,nohara,29
shinnosuke,nohara,5
himawari,nohara,0
```

## インポートしたデータの確認
```shell
# bq head <データセットID>.<テーブルID>
bq head gcpstudybq01.table2
+------------+----------+-----+
| firstname  | lastname | age |
+------------+----------+-----+
| hiroshi    | nohara   |  35 |
| misae      | nohara   |  29 |
| shinnosuke | nohara   |   5 |
| himawari   | nohara   |   0 |
+------------+----------+-----+
```

## クエリの実行
```shell
# bq query <SQL文>
bq query "select * from gcpstudybq01.table2"
+------------+----------+-----+
| firstname  | lastname | age |
+------------+----------+-----+
| hiroshi    | nohara   |  35 |
| misae      | nohara   |  29 |
| shinnosuke | nohara   |   5 |
| himawari   | nohara   |   0 |
+------------+----------+-----+
```

# 後片付け

# テーブルの削除
```shell
# bq rm <データセットID>.<テーブルID>
bq rm gcpstudybq01.table2
rm: remove table 'gcpstudybq:gcpstudybq01.table2'? (y/N) y

# テーブルの削除確認
# bq ls <データセットID>
bq ls gcpstudybq01
  tableId   Type    Labels   Time Partitioning   Clustered Fields
 --------- ------- -------- ------------------- ------------------
  table1    TABLE
# table2が削除されているのでOK
```

# データセットの削除
```shell
# bq rm <データセットID>
bq rm gcpstudybq01
rm: remove dataset 'gcpstudybq:gcpstudybq01'? (y/N) y
BigQuery error in rm operation: Dataset gcpstudybq:gcpstudybq01 is still in use

# まだ使用中です とのエラーが出たのでtable1も削除する
bq rm gcpstudybq01.table1
rm: remove table 'gcpstudybq:gcpstudybq01.table1'? (y/N) y

bq rm gcpstudybq01
rm: remove dataset 'gcpstudybq:gcpstudybq01'? (y/N) y
```