bigquery

SQL入門 – 1)BigQueryセットアップ

本記事ではSQL入門としてBigQueryのセットアップを行います。SQLとはStructured Query Languageの頭文字で、リレーショナルデータベースを操作するための言語です。その歴史は古く誕生から約50年にもなります。「データベースを操作するための言語」と考えるとよいでしょう。世の中にはいろいろなデータベースシステムが存在します。MySQL, Oracle, PostgreSQL, SQLiteなどが有名です。それぞれ、開発元がことなるため細かい点では文法の差異がありますが、主な使い方は共通しています。一つに習熟すれば、他のシステムで利用することも容易になります。本書ではクラウド上のデータベースであるBigQueryを使用します。BigQueryはGooglerが開発した、膨大なデータを高速に処理できるリレーショナルデータベースです。

ちなみに、リレーショナルとは関係という意味ですが、行と列からなる構造のデータから構成されます。Excelなどの表計算アプリをイメージしていただくとよいでしょう。

テーブルは行と列から構成されます。行のことをレコード、列のことをカラムと呼ぶこともあります。テーブルの各列のデータなどの規定をスキーマと呼びます。このスキーマを参照することで、各列のデータ型や制約(とりうる値)などを確認することができます。

本投稿はオリジナル教材からの引用です。

BigQuery のセットアップ

BigQueryを使用するにはまずデータが必要です。データをセットアップするところからはじめましょう。BigQuery では毎月最初の10GBのストレージと、1TBのクエリ処理は無料になります。今回は以下のようなデータを用意します。

people.csv ランダムに人のデータを生成するAPIです。ここから名前・性別・メール・誕生日などをランダムに生成しました。

https://randomuser.me/api/?format=csv&inc=id,name,gender,email,dob,phone,nat&nat=AU,BR,CA,NZ,US&results=500

squirrel census NYCでのリスの観察結果のデータセットです。以下のURLで無料で提供されています。

https://www.thesquirrelcensus.com/data

BigQueryにおける階層構造

BigQueryでは、プロジェクト / データセット / テーブル といった階層を作ってデータを管理します。

データ構造
SQL入門 - 1)BigQueryセットアップ 17
  • プロジェクト = GCPのリソースを管理する単位、BigQueryはプロジェクトに含まれるリソースという位置づけ
  • データセット = テーブルをまとめて管理するフォルダ
  • テーブル = 実際のデータ

プロジェクトの作成

以下のURLからGCPのコンソールにアクセスして、新規プロジェクトを作成します。

https://console.cloud.google.com/

プロジェクトの作成
SQL入門 - 1)BigQueryセットアップ 18

sql-studyという名前のプロジェクトを作成します(名前は任意で構いません)。

プロジェクト名の指定
SQL入門 - 1)BigQueryセットアップ 19

画面左上隅にあるプロジェクト選択用のプルダウンメニューでsql-studyが選択されていることを確認し、画面左上のメニューからBigQuery、SQLワークスペースと選択します。

SQLワークスペースの選択
SQL入門 - 1)BigQueryセットアップ 20

もし「APIを有効化する」という旨のメッセージが表示された場合は、有効化ボタンを押下してください。

データセットの作成

プロジェクト名の横の「アクションを表示」から「データセットを作成」をクリックします。管理しやすい名前をつけて下さい。1つのプロジェクトで複数のデータセットを作成することができます。

データセットの作成
SQL入門 - 1)BigQueryセットアップ 21

以下の画面データセットを作成します。

  • データセットID = データセット名を指定します。今回は「sample」としました。
  • ロケーションタイプ = リージョンかマルチリージョンを選択します。重要なデータは複数地点で管理するマルチリージョンを選ぶのが良いのですが、今回は学習用なのでリージョンを選択し、「asia-northeast1(東京)」を選びます。

データセットを作成ボタンを押下してデータセットを作成します。作成したデータセットはいつでも削除できます。

データセットの作成
SQL入門 - 1)BigQueryセットアップ 22

テーブルの作成

では、データセットにデータを追加してゆきましょう。この操作を行うことでテーブルが作成されます。エクスプローラの「その他の操作」メニューから、「データを追加」を選択します。

テーブルの作成
SQL入門 - 1)BigQueryセットアップ 23

データを追加画面から「ローカルファイル」を選択します。

ローカルファイルのアップロード
SQL入門 - 1)BigQueryセットアップ 24

ファイルを選択します。データセット任意のフォルダを選択します。ここでは先ほど作成した「sample」を選択しました。テーブル名はファイル名と同じにしました。自動検出をチェックして「テーブルを作成」をクリックしてテーブルを作成します。自動検出をオフにした場合、自分で各列のデータ型を明示的に指定することも可能です。

ソースの指定
SQL入門 - 1)BigQueryセットアップ 25

テーブルが作成され、以下のように表示されます。デフォルトで「スキーマ」(=テーブルの構造:各列の名前とデータ型)が表示されています。内容を確認してください。

スキーマの確認
SQL入門 - 1)BigQueryセットアップ 26

同じ手順で以下のファイルのテーブルを作成してください。

  • park-data.csv
  • squirrel-data.csv
  • people.csv
  • countries.csv

storiesはCSV形式のまま読み込むとエラーになってしまったので、Pandasを使用して一旦parquet形式に変換してから読み込みました。

import pandas as pd
df = pd.read_csv("stories.csv")
df.to_parquet("stories.parquet")

以下のように5つのテーブルがある状態にしてください。

プレビュー
SQL入門 - 1)BigQueryセットアップ 27

一般公開データの閲覧

BigQueryには一般公開データ(public-data)が用意されています。ここではそれらデータの使い方を簡単に説明します。詳しい手順は以下のURLを参照してください。

https://cloud.google.com/bigquery/docs/quickstarts/query-public-dataset-console?hl=ja

データの読み込み

[検索語句を入力] フィールドに 「bigquery-public-data」 と入力して、データセットを検索します。その中にある usa_names というテーブルを使ってみましょう。1910年から2013年までの米国での名前の情報を管理するテーブルです。

検索してもデータセットが表示されないことがあります。もしデータが見つからない場合は、「すべてのリソースを表示します」や「検索範囲をすべてのプロジェクトに広げます」をクリックしてください。また、キーワードを「public」に変更することも試してください。”bigquery-public-data” でデータセットが表示されないときは、”usa_names” で検索すると表示されるかもしれません。いずれにせよ、以下のように “usa_names/usa_1910_2013” が表示される状態にしてください。

一般データセット
SQL入門 - 1)BigQueryセットアップ 28

「クエリを新規作成」をクリックして、以下のSQLを入力します。

SELECT
  name, gender, SUM(number) AS total
FROM
  `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY
  name, gender
ORDER BY
  total DESC
LIMIT
  10

画面右上に「このクエリを実行すると、99.95MBが処理されます」と概要が表示されています。この数値によって課金が変わってくるので注意してください。

料金の確認
SQL入門 - 1)BigQueryセットアップ 29

実行ボタンを押下するとSQLが実行され、結果が表示されます。男性の名前の多い順からトップ10が表示されます。

結果の確認
SQL入門 - 1)BigQueryセットアップ 30

James, John, Robert, Micheal, …と続いていることが分かります。

ちなみに、SQLは途中で自由に改行することができます。展開メニューの「クエリを書式設定」を選択すると、SQLを自動でフォーマットし、読みやすい形に整形されます。

編集の様子
SQL入門 - 1)BigQueryセットアップ 31

Categories: Programming, SQL