jpskill.com
🛠️ 開発・MCP コミュニティ

bigquery

Comprehensive guide for using BigQuery CLI (bq) to query and inspect tables in Monzo's BigQuery projects, with emphasis on data sensitivity and INFORMATION_SCHEMA queries.

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o bigquery.zip https://jpskill.com/download/17520.zip && unzip -o bigquery.zip && rm bigquery.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17520.zip -OutFile "$d\bigquery.zip"; Expand-Archive "$d\bigquery.zip" -DestinationPath $d -Force; ri "$d\bigquery.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して bigquery.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → bigquery フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

BigQuery CLI Skill

このスキルは、Monzo の BigQuery プロジェクトでデータをクエリおよび検査するための BigQuery CLI (bq) の使用に関する包括的なガイダンスを提供します。

コア原則

  1. --project_id=PROJECT_NAME を使用して、常にプロジェクトを明示的に指定してください。
  2. --use_legacy_sql=false を使用して、常に Standard SQL を使用してください。
  3. データの機密性を尊重してください - 機密性の高いテーブルから実際のコンテンツをクエリすることは避けてください。
  4. メタデータクエリ(スキーマ、カラム、テーブル)には INFORMATION_SCHEMA を使用してください。

一般的なクエリパターン

1. テーブルスキーマの確認 (INFORMATION_SCHEMA)

機密データにアクセスせずに、カラム名、型、構造を検査するには、これを使用します。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type, is_nullable
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME'
   ORDER BY ordinal_position"

例:

# dims データセットのテーブルスキーマを確認
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'vulnerable_customer_logs_dim' ORDER BY ordinal_position"

# prod データセットのテーブルスキーマを確認
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type FROM \`monzo-analytics.prod.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'transactions' ORDER BY ordinal_position"

2. 行数のカウント (機密テーブルに対して安全)

データを開示せずにテーブルサイズを確認するには、COUNT(*) を使用します。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT COUNT(*) as row_count FROM \`monzo-analytics.DATASET.TABLE_NAME\`"

例:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT COUNT(*) as row_count FROM \`monzo-analytics.dims.vulnerable_customer_logs_dim\`"

3. データセット内のすべてのテーブルをリスト表示

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name, table_type
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   ORDER BY table_name"

例:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.TABLES\`
   ORDER BY table_name"

4. スキーマをファイルにエクスポート

テーブルスキーマのプログラムによる処理に役立ちます。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  --format=csv --quiet \
  "SELECT column_name FROM \`monzo-analytics.DATASET.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME' ORDER BY ordinal_position" \
  | tail -n +2 > /tmp/columns.txt

例:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  --format=csv --quiet \
  "SELECT column_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'vulnerable_customer_logs_dim' ORDER BY ordinal_position" \
  | tail -n +2 > /tmp/columns.txt

5. テーブルメタデータの確認

テーブルの作成時間、サイズ、その他のメタデータを取得します。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT
     table_name,
     creation_time,
     ROUND(size_bytes/1024/1024/1024, 2) as size_gb,
     row_count
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name = 'TABLE_NAME'"

6. パターンによるテーブルの検索

命名パターンに一致するテーブルを検索します。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name LIKE '%PATTERN%'
   ORDER BY table_name"

例:

# すべての顧客関連テーブルを検索
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name LIKE '%customer%' ORDER BY table_name"

7. 詳細なカラム情報の取得

説明を含む包括的なカラムメタデータを取得します。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT
     column_name,
     data_type,
     is_nullable,
     is_partitioning_column
   FROM \`monzo-analytics.DATASET.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME'
   ORDER BY ordinal_position"

8. データのサンプル (機密性の低いテーブルのみ)

⚠️ 警告: これは機密性の低いテーブルでのみ使用してください。人/スタッフ/PII テーブルから実際のコンテンツをクエリしないでください。

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT * FROM \`monzo-analytics.DATASET.TABLE_NAME\` LIMIT 10"

出力形式のオプション

結果の表示方法を制御します。

# CSV 形式
--format=csv

# JSON 形式
--format=json

# Pretty table 形式 (デフォルト)
--format=prettyjson

# Quiet モード (ステータスメッセージなし)
--quiet

# 返される最大行数
--max_rows=100

一般的なプロジェクトとデータセット

主要な分析プロジェクト

  • monzo-analytics - メインの分析ウェアハウス
  • monzo-analytics-v2 - 新しい OOM アーキテクチャモデル
  • monzo-analytics-pii - PII を含むデータ (注意して使用)
  • sanitized-events-prod - サニタイズされたイベントデータ
  • raw-analytics-events-prod - 生のイベントデータ

一般的なデータセット

  • dims - ディメンションテーブル
  • prod - 本番テーブル
  • lending - レンディング固有のテーブル
  • slurpee - Slurpee データ

データ機密性に関するガイドライン

✅ 安全な操作 (常に許可)

  1. INFORMATION_SCHEMA クエリ - これらは実際のデータではなく、メタデータのみを返します。
  2. *COUNT() クエリ** - これらは行数のみを返します。
  3. スキーマ検査 - カラム名、型、テーブル構造

⚠️ 制限された操作 (注意して使用)

  1. 以下からの実際のコンテンツのクエリ:

    • 人/スタッフデータテーブル
    • PII を含むテーブル
    • 顧客の財務データ
    • 認証/セキュリティテーブル
  2. 不明な場合:

    • INFORMATION_SCHEMA クエリに固執してください。
    • COUNT(*) を使用してテーブルが存在することを確認してください。
    • 実際のコンテンツをクエリする前にユーザーに確認してください。

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

BigQuery CLI Skill

This skill provides comprehensive guidance on using the BigQuery CLI (bq) for querying and inspecting data in Monzo's BigQuery projects.

Core Principles

  1. Always specify the project explicitly using --project_id=PROJECT_NAME
  2. Always use Standard SQL with --use_legacy_sql=false
  3. Respect data sensitivity - avoid querying actual content from sensitive tables
  4. Use INFORMATION_SCHEMA for metadata queries (schemas, columns, tables)

Common Query Patterns

1. Check Table Schema (INFORMATION_SCHEMA)

Use this to inspect column names, types, and structure without accessing sensitive data:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type, is_nullable
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME'
   ORDER BY ordinal_position"

Examples:

# Check dims dataset table schema
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'vulnerable_customer_logs_dim' ORDER BY ordinal_position"

# Check prod dataset table schema
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT column_name, data_type FROM \`monzo-analytics.prod.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'transactions' ORDER BY ordinal_position"

2. Count Rows (Safe for Sensitive Tables)

Use COUNT(*) to check table size without exposing data:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT COUNT(*) as row_count FROM \`monzo-analytics.DATASET.TABLE_NAME\`"

Example:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT COUNT(*) as row_count FROM \`monzo-analytics.dims.vulnerable_customer_logs_dim\`"

3. List All Tables in a Dataset

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name, table_type
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   ORDER BY table_name"

Example:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.TABLES\`
   ORDER BY table_name"

4. Export Schema to File

Useful for programmatic processing of table schemas:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  --format=csv --quiet \
  "SELECT column_name FROM \`monzo-analytics.DATASET.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME' ORDER BY ordinal_position" \
  | tail -n +2 > /tmp/columns.txt

Example:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  --format=csv --quiet \
  "SELECT column_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'vulnerable_customer_logs_dim' ORDER BY ordinal_position" \
  | tail -n +2 > /tmp/columns.txt

5. Check Table Metadata

Get table creation time, size, and other metadata:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT
     table_name,
     creation_time,
     ROUND(size_bytes/1024/1024/1024, 2) as size_gb,
     row_count
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name = 'TABLE_NAME'"

6. Find Tables by Pattern

Search for tables matching a naming pattern:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name
   FROM \`monzo-analytics.DATASET_NAME.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name LIKE '%PATTERN%'
   ORDER BY table_name"

Example:

# Find all customer-related tables
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name FROM \`monzo-analytics.dims.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name LIKE '%customer%' ORDER BY table_name"

7. Get Detailed Column Information

Get comprehensive column metadata including descriptions:

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT
     column_name,
     data_type,
     is_nullable,
     is_partitioning_column
   FROM \`monzo-analytics.DATASET.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE_NAME'
   ORDER BY ordinal_position"

8. Sample Data (Non-Sensitive Tables Only)

⚠️ WARNING: Only use this on non-sensitive tables. Never query actual content from people/staff/PII tables.

bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT * FROM \`monzo-analytics.DATASET.TABLE_NAME\` LIMIT 10"

Output Formatting Options

Control how results are displayed:

# CSV format
--format=csv

# JSON format
--format=json

# Pretty table format (default)
--format=prettyjson

# Quiet mode (no status messages)
--quiet

# Maximum rows to return
--max_rows=100

Common Projects and Datasets

Main Analytics Projects

  • monzo-analytics - Main analytics warehouse
  • monzo-analytics-v2 - New OOM architecture models
  • monzo-analytics-pii - PII-containing data (use with caution)
  • sanitized-events-prod - Sanitised event data
  • raw-analytics-events-prod - Raw event data

Common Datasets

  • dims - Dimension tables
  • prod - Production tables
  • lending - Lending-specific tables
  • slurpee - Slurpee data

Data Sensitivity Guidelines

✅ SAFE Operations (Always Allowed)

  1. INFORMATION_SCHEMA queries - These only return metadata, not actual data
  2. *COUNT() queries** - These only return row counts
  3. Schema inspection - Column names, types, table structure

⚠️ RESTRICTED Operations (Use with Caution)

  1. Querying actual content from:

    • People/staff data tables
    • PII-containing tables
    • Customer financial data
    • Authentication/security tables
  2. When in doubt:

    • Stick to INFORMATION_SCHEMA queries
    • Use COUNT(*) to verify table exists
    • Ask the user before querying actual content

🚫 NEVER Do This

  • Query actual rows from people, staff, hibob tables
  • Export PII data to local files
  • Query authentication credentials or tokens
  • Access customer financial details without explicit permission

Error Handling

Common Errors and Solutions

Error: "Not found: Table"

# Solution: Check the table exists first
bq query --project_id=monzo-analytics --use_legacy_sql=false \
  "SELECT table_name FROM \`monzo-analytics.DATASET.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name LIKE '%SEARCH_TERM%'"

Error: "Access Denied"

# Solution: You may not have permissions for that project/dataset
# Try a different project or ask the user about access

Error: "Syntax error"

# Solution: Ensure you're using Standard SQL (--use_legacy_sql=false)
# Check backtick usage around project.dataset.table identifiers

Best Practices

  1. Always use fully-qualified table names with backticks:

    `project-id.dataset.table`
  2. Use LIMIT for exploratory queries to avoid large result sets:

    SELECT * FROM `project.dataset.table` LIMIT 10
  3. Check row counts before running expensive queries:

    # First check size
    bq query --project_id=monzo-analytics --use_legacy_sql=false \
      "SELECT COUNT(*) FROM \`project.dataset.table\`"
    
    # Then run full query if reasonable
  4. Use dry-run for cost estimation (for expensive queries):

    bq query --dry_run --use_legacy_sql=false "YOUR_QUERY_HERE"
  5. Export large results to file:

    bq query --project_id=monzo-analytics --use_legacy_sql=false \
      --format=csv "YOUR_QUERY" > output.csv

Quick Reference Commands

# Schema check
bq query --project_id=PROJECT --use_legacy_sql=false \
  "SELECT column_name, data_type FROM \`PROJECT.DATASET.INFORMATION_SCHEMA.COLUMNS\`
   WHERE table_name = 'TABLE' ORDER BY ordinal_position"

# Row count
bq query --project_id=PROJECT --use_legacy_sql=false \
  "SELECT COUNT(*) FROM \`PROJECT.DATASET.TABLE\`"

# List tables
bq query --project_id=PROJECT --use_legacy_sql=false \
  "SELECT table_name FROM \`PROJECT.DATASET.INFORMATION_SCHEMA.TABLES\`
   ORDER BY table_name"

# Table metadata
bq query --project_id=PROJECT --use_legacy_sql=false \
  "SELECT table_name, row_count, size_bytes
   FROM \`PROJECT.DATASET.INFORMATION_SCHEMA.TABLES\`
   WHERE table_name = 'TABLE'"

When to Use This Skill

Invoke this skill when you need to:

  • Query BigQuery tables or datasets
  • Inspect table schemas or column types
  • Count rows or check table existence
  • Export table metadata
  • Verify data before running dbt models
  • Investigate data issues or table structures
  • Find tables by naming patterns

Integration with dbt Workflow

When working on dbt models in the analytics repository:

  1. Before creating import models - Use BigQuery CLI to inspect source schemas
  2. Before running dbt - Verify source tables exist and have expected structure
  3. Debugging dbt failures - Query actual tables to understand data issues
  4. Validating generators - Check that column types match between source and generator

Remember: Always respect data sensitivity guidelines and use INFORMATION_SCHEMA when possible.