LoginSignup
11
8

More than 5 years have passed since last update.

【BigQuery】Google Cloud Platform(GCP)でバケットを作成し、データをアップロードして、BigQueryで読み込み、SQL実行してテーブル作成する方法だおw

Last updated at Posted at 2019-03-06

概要


全ての人間は2種類に分けることができる。
        Google Cloud Platformでバケット作成とかわちゃわちゃいじれる者と、そうでない者。
                    @74kenshiro(1988~2130年)

名もなき初心者エンジニアがGoogle Cloud Platform でバケット作成してBigQueryで読み込んだりするだけの記事だお。

目次
1.バケットを作成する
2.バケットにデータをアップロードする
3.アップロードしたデータをBigQueryで読み込む(テーブルの作成)
4.SQL実行した出力結果をテーブルとして保存する

この記事で分かること

・バケットの作成方法
・バケットへのアップロード方法
・バケットのデータをBigQueryで読み込む方法
・出力結果をテーブルに保存する方法とその際の注意点

データ概要

元データ:とある会社の社員データ「staff_list.csv」
image.png

1.バケットを作成する

①Google Cloud Platform(以下GCP)の画面左のメニューで「Storage」➡「ブラウザ」➡「バケットを作成」を選択。

image.png

2.バケットの名前を入力し、各項目を選択、作成をクリック。

image.png

2.バケットにデータをアップロードする。

1.バケットを選択して対象をクリックする。 ドラッグでもいける!

image.png

3.アップロードしたデータをBigQueryで読み込む(テーブルの作成)

今回は新たにデータセットを作成します。

1.データセットの作成

①.プロジェクトを選択し、「データセットを作成」をクリック

image.png

②データセット名を入力、ロケーション、有効期限を指定し、「データセットを作成をクリック」

image.png

③プロジェクトに内蔵されているか確認。あればおk。

image.png

2.CSVデータを読込み、テーブルを作成する

①データセットを選択し、「テーブルを作成」をクリック

image.png

②「テーブルの作成元」をクリックし、「Google Cloud Storage」を選択、「参照」をクリック

image.png

③対象のバケットをダブルクリック、ファイルを選択し、「選択」をクリック

image.png

④ファイル形式(今回はCSV)を選択、テーブル名を入力しテーブルを作成

スキーマ自動検出とは、カラムとデータ型を自動で検出してくれる機能。
カラムが英字でデータ型に指定が無い場合はチェック。
元データにカラム(ヘッダー)がある場合は、「詳細オプション」をクリックし、「スキップするヘッダー行」を指定する
image.png

ちなみに、CSVの文字エンコードはUTF-8でないと日本語が文字化けする。
image.png

UTF-8だとしても、BigQueryはカラム日本語非対応なので、修正しないといけない。アッチャー!!
image.png

元データのカラム名(ヘッダー)が修正出来るなら、英字に変換しておく。
image.png
そしてUTF8で保存する。
image.png
同じように読込してみた!!
きれいに出来たとみせかけて、「id」の列が文字型から整数型に変換されてしまった。
自動検出あるある。
image.png
こうした場合、また、元データの変更が出来ない場合は、テーブルを作成する際に自動検出ではなく、手動でカラム名とデータ型を指定する!!

⑤カラム名とデータ型を自分で指定したい場合

元データが触れなかったり、数値が文字型でないといけないときなどは、テーブルを作成する際に自動検出ではなく「フィールドを追加」でカラム名を入力し、各データ型を選択する
image.png

⑥プレビューで確認する。

できた。
元データのカラム名が日本語だったり、データ型を指定する場合は、手動でやるべし。
image.png

4.SQL実行した出力結果をテーブルとして保存する

①SQLを実行

例:攻撃力の高い順に出力したランキングをテーブルに残したい

攻撃力の高い順に出力
SELECT
  RANK()OVER(ORDER BY attack DESC) AS attack_rank,
  id,
  division,
  attribute,
  attack,
  defense
FROM
  `company.staff_list_utf8_manual`
ORDER BY
  1;

出力結果 このままテーブルにしたい(しつこい)
image.png

②クエリ上でCREATE TABLEするのが一番オヌヌメ。

テーブル名「staff_attack_rank_c」

これが一番王道かつオヌヌメ
CREATE TABLE
  company.staff_attack_rank_c AS
SELECT
  RANK()OVER(ORDER BY attack DESC) AS attack_rank,
  id,
  division,
  attribute,
  attack,
  defense
FROM
  `company.staff_list_utf8_manual`
ORDER BY
  1;

③確認。そしてでけた。

image.png

え、でもクエリ打たずに画面上でテーブル作成出来そうじゃん?って思うじゃん?

image.png

①クエリ結果右手の「結果を保存する」をクリックし、「BigQueryテーブル」を選択

②保存先のプロジェクト、データセットを選択し、テーブル名を入力。そして保存。

③確認。順番がめちゃくちゃで草不可避

テーブル出来たけどORDER BY句が無効になってるー!!
ふざけんなー!!う〇こー!!!!

image.png

結論 クエリでCREATE TABLEすればよろし。

オワタ。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8