— 全データを取得
SELECT *
FROM `my-project-12345.my_first_dataset.customers`
ORDER BY customer_id;
【実行結果】
customer_id | name | email | age | country | signup_date
————|————–|———————-|—–|———|————
1 | 佐藤太郎 | sato@example.com | 28 | Japan | 2024-01-15
2 | 鈴木花子 | suzuki@example.com | 35 | Japan | 2024-02-20
3 | John Smith | john@example.com | 42 | USA | 2024-03-10
4 | Maria Garcia | maria@example.com | 31 | Spain | 2024-04-05
5 | 山田次郎 | yamada@example.com | 25 | Japan | 2024-05-12
✅ 5行が返されました(0.3秒)
💰 処理データ量:0 B(キャッシュから)
💻 4. BigQueryでSQLを書こう
基本的なSELECT文
— 例1: 日本のお客様だけを取得
SELECT
customer_id,
name,
age,
signup_date
FROM `my-project-12345.my_first_dataset.customers`
WHERE country = ‘Japan’
ORDER BY signup_date;
— 例2: 国別の顧客統計
SELECT
country,
COUNT(*) AS customer_count,
ROUND(AVG(age), 1) AS average_age,
MIN(age) AS youngest,
MAX(age) AS oldest
FROM `my-project-12345.my_first_dataset.customers`
GROUP BY country
ORDER BY customer_count DESC;
— 例3: 日付関数を使う
SELECT
name,
signup_date,
CURRENT_DATE() AS today,
DATE_DIFF(CURRENT_DATE(), signup_date, DAY) AS days_since_signup,
DATE_ADD(signup_date, INTERVAL 1 YEAR) AS one_year_anniversary
FROM `my-project-12345.my_first_dataset.customers`
ORDER BY signup_date;
📚 BigQueryの主な関数
【集計関数】
COUNT(*), SUM(col), AVG(col), MIN(col), MAX(col)
COUNT(DISTINCT col) — 重複を除いてカウント
【文字列関数】
CONCAT(str1, str2) — 文字列結合
UPPER(str) — 大文字変換
LOWER(str) — 小文字変換
LENGTH(str) — 文字数
SUBSTR(str, start, len) — 部分文字列
【日付関数】
CURRENT_DATE() — 今日の日付
CURRENT_TIMESTAMP() — 現在日時
DATE_DIFF(date1, date2, DAY) — 日数差
DATE_ADD(date, INTERVAL n DAY) — 日付加算
EXTRACT(YEAR FROM date) — 年を抽出
【条件関数】
IF(条件, true値, false値)
CASE WHEN 条件 THEN 値 ELSE 値 END
COALESCE(val1, val2) — NULLでない最初の値
IFNULL(val, default) — NULLなら代わりの値
【ウィンドウ関数】
ROW_NUMBER() OVER(ORDER BY col) — 行番号
RANK() OVER(ORDER BY col) — 順位
LAG(col) OVER(ORDER BY col) — 前の行の値
LEAD(col) OVER(ORDER BY col) — 次の行の値
— ❌ NG例:全カラムを取得(無駄が多い)
SELECT *
FROM `bigquery-public-data.usa_names.usa_1910_current`;
— → 処理データ量:約500MB
— ✅ OK例:必要なカラムだけ指定
SELECT name, year, number
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = 2020;
— → 処理データ量:約50MB(1/10に削減!)
⚠️ コスト確認方法
クエリを実行する前に、エディタの右上に「このクエリでは○○ B を処理します」と表示されます。実行前に必ず確認しましょう!予想外に大きい場合は、WHERE句やカラム指定を見直してください。
🌍 6. 公開データセットで実践演習
BigQueryには、無料で使える公開データセットがたくさんあります!
公開データセットの追加方法
左側のナビゲーションで「+ データを追加」をクリック
「公開データセットを調べる」を選択
興味のあるデータセットを選んで「データセットを表示」
演習1: アメリカの赤ちゃんの名前ランキング
— 2020年の人気の名前TOP10(男の子)
SELECT
name,
SUM(number) AS total_count
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = 2020
AND gender = ‘M’
GROUP BY name
ORDER BY total_count DESC
LIMIT 10;
【実行結果】
name | total_count
———-|————
Liam | 19659
Noah | 18252
Oliver | 14147
Elijah | 13034
William | 12541
James | 12250
Benjamin | 12136
Lucas | 11281
Henry | 10705
Theodore | 9535
💰 処理データ量:約50MB(無料枠内)
演習2: 年代別の人気の名前の変遷
— 「James」という名前の人気の変遷
SELECT
year,
SUM(number) AS count
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE name = ‘James’
AND gender = ‘M’
AND year >= 1950
GROUP BY year
ORDER BY year;
SELECT
name,
SUM(number) AS total_count
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = 2020
AND gender = ‘F’
GROUP BY name
ORDER BY total_count DESC
LIMIT 5;
【実行結果】
name | total_count
———-|————
Olivia | 17535
Emma | 15581
Ava | 13084
Charlotte | 13003
Sophia | 12976