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.
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
bigquery.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
bigqueryフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
BigQuery CLI Skill
このスキルは、Monzo の BigQuery プロジェクトでデータをクエリおよび検査するための BigQuery CLI (bq) の使用に関する包括的なガイダンスを提供します。
コア原則
--project_id=PROJECT_NAMEを使用して、常にプロジェクトを明示的に指定してください。--use_legacy_sql=falseを使用して、常に Standard SQL を使用してください。- データの機密性を尊重してください - 機密性の高いテーブルから実際のコンテンツをクエリすることは避けてください。
- メタデータクエリ(スキーマ、カラム、テーブル)には 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 データ
データ機密性に関するガイドライン
✅ 安全な操作 (常に許可)
- INFORMATION_SCHEMA クエリ - これらは実際のデータではなく、メタデータのみを返します。
- *COUNT() クエリ** - これらは行数のみを返します。
- スキーマ検査 - カラム名、型、テーブル構造
⚠️ 制限された操作 (注意して使用)
-
以下からの実際のコンテンツのクエリ:
- 人/スタッフデータテーブル
- PII を含むテーブル
- 顧客の財務データ
- 認証/セキュリティテーブル
-
不明な場合:
- 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
- Always specify the project explicitly using
--project_id=PROJECT_NAME - Always use Standard SQL with
--use_legacy_sql=false - Respect data sensitivity - avoid querying actual content from sensitive tables
- 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 warehousemonzo-analytics-v2- New OOM architecture modelsmonzo-analytics-pii- PII-containing data (use with caution)sanitized-events-prod- Sanitised event dataraw-analytics-events-prod- Raw event data
Common Datasets
dims- Dimension tablesprod- Production tableslending- Lending-specific tablesslurpee- Slurpee data
Data Sensitivity Guidelines
✅ SAFE Operations (Always Allowed)
- INFORMATION_SCHEMA queries - These only return metadata, not actual data
- *COUNT() queries** - These only return row counts
- Schema inspection - Column names, types, table structure
⚠️ RESTRICTED Operations (Use with Caution)
-
Querying actual content from:
- People/staff data tables
- PII-containing tables
- Customer financial data
- Authentication/security tables
-
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,hibobtables - 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
-
Always use fully-qualified table names with backticks:
`project-id.dataset.table` -
Use LIMIT for exploratory queries to avoid large result sets:
SELECT * FROM `project.dataset.table` LIMIT 10 -
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 -
Use dry-run for cost estimation (for expensive queries):
bq query --dry_run --use_legacy_sql=false "YOUR_QUERY_HERE" -
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:
- Before creating import models - Use BigQuery CLI to inspect source schemas
- Before running dbt - Verify source tables exist and have expected structure
- Debugging dbt failures - Query actual tables to understand data issues
- Validating generators - Check that column types match between source and generator
Remember: Always respect data sensitivity guidelines and use INFORMATION_SCHEMA when possible.