[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EF26284FNMR78QWP90HT1M":3,"skill-same:01M6EF26284FNMR78QWP90HT1M":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6EF26284FNMR78QWP90HT1M","gcp-bigquery",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fgcp-bigquery\u002FSKILL.md",[],[18,19,20],"bigquery","gcp","gcp bigquery","2026-11-10 10:12:30",false,"# GCP BigQuery\n\nGoogle BigQuery is a serverless, petabyte-scale data warehouse. It runs SQL queries across massive datasets in seconds, with no infrastructure to manage. Pay only for queries run and data stored.\n\n## Core Concepts\n\n- **Dataset** — a container for tables, scoped to a project and region\n- **Table** — structured data with a schema (native, external, or view)\n- **Partitioned Table** — split data by date\u002Finteger for query performance\n- **Clustered Table** — sort data within partitions for further optimization\n- **Streaming Insert** — real-time data ingestion\n- **BigQuery ML** — train and predict with ML models using SQL\n\n## Datasets and Tables\n\n```bash\n# Create a dataset\nbq mk --dataset --location=US my_project:analytics\n```\n\n```bash\n# Create a partitioned and clustered table\nbq mk --table \\\n  --time_partitioning_field created_at \\\n  --time_partitioning_type DAY \\\n  --clustering_fields user_id,event_type \\\n  --schema 'event_id:STRING,user_id:STRING,event_type:STRING,payload:JSON,created_at:TIMESTAMP' \\\n  analytics.events\n```\n\n```sql\n-- Create table with SQL DDL\nCREATE TABLE `my_project.analytics.page_views` (\n  session_id STRING NOT NULL,\n  user_id STRING,\n  page_url STRING,\n  referrer STRING,\n  duration_ms INT64,\n  created_at TIMESTAMP NOT NULL\n)\nPARTITION BY DATE(created_at)\nCLUSTER BY user_id, page_url\nOPTIONS (\n  partition_expiration_days = 365,\n  description = 'Page view events'\n);\n```\n\n## Loading Data\n\n```bash\n# Load CSV from local file\nbq load --source_format=CSV --autodetect \\\n  analytics.customers .\u002Fcustomers.csv\n```\n\n```bash\n# Load from Cloud Storage (JSON)\nbq load --source_format=NEWLINE_DELIMITED_JSON \\\n  --autodetect \\\n  analytics.events \\\n  gs:\u002F\u002Fmy-data-bucket\u002Fevents\u002F2024-01-*.json\n```\n\n```bash\n# Load Parquet from GCS (most efficient format)\nbq load --source_format=PARQUET \\\n  analytics.events \\\n  gs:\u002F\u002Fmy-data-bucket\u002Fevents\u002F2024-01\u002F*.parquet\n```\n\n## Streaming Data\n\n```python\n# Stream rows into BigQuery in real-time\nfrom google.cloud import bigquery\n\nclient = bigquery.Client()\ntable_id = \"my_project.analytics.events\"\n\nrows = [\n    {\n        \"event_id\": \"evt-001\",\n        \"user_id\": \"u-123\",\n        \"event_type\": \"purchase\",\n        \"payload\": '{\"amount\": 49.99, \"currency\": \"USD\"}',\n        \"created_at\": \"2024-01-15T10:30:00Z\"\n    },\n    {\n        \"event_id\": \"evt-002\",\n        \"user_id\": \"u-456\",\n        \"event_type\": \"page_view\",\n        \"payload\": '{\"url\": \"\u002Fproducts\u002Fwidget\"}',\n        \"created_at\": \"2024-01-15T10:30:01Z\"\n    }\n]\n\nerrors = client.insert_rows_json(table_id, rows)\nif errors:\n    print(f\"Insert errors: {errors}\")\nelse:\n    print(f\"Inserted {len(rows)} rows\")\n```\n\n## Querying\n\n```sql\n-- Query with partition pruning (scans only relevant partitions)\nSELECT\n  user_id,\n  event_type,\n  COUNT(*) as event_count,\n  AVG(CAST(JSON_VALUE(payload, '$.duration_ms') AS INT64)) as avg_duration\nFROM `analytics.events`\nWHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'\n  AND event_type IN ('page_view', 'purchase')\nGROUP BY user_id, event_type\nORDER BY event_count DESC\nLIMIT 100;\n```\n\n```sql\n-- Window functions for user journey analysis\nSELECT\n  user_id,\n  event_type,\n  created_at,\n  LAG(event_type) OVER (PARTITION BY user_id ORDER BY created_at) as prev_event,\n  TIMESTAMP_DIFF(\n    created_at,\n    LAG(created_at) OVER (PARTITION BY user_id ORDER BY created_at),\n    SECOND\n  ) as seconds_since_last\nFROM `analytics.events`\nWHERE DATE(created_at) = '2024-01-15'\nORDER BY user_id, created_at;\n```\n\n```bash\n# Run query from CLI\nbq query --use_legacy_sql=false \\\n  'SELECT COUNT(*) as total FROM `analytics.events` WHERE DATE(created_at) = CURRENT_DATE()'\n```\n\n## Materialized Views\n\n```sql\n-- Create a materialized view for fast dashboard queries\nCREATE MATERIALIZED VIEW `analytics.daily_metrics`\nOPTIONS (enable_refresh = true, refresh_interval_minutes = 30)\nAS\nSELECT\n  DATE(created_at) as date,\n  event_type,\n  COUNT(*) as event_count,\n  COUNT(DISTINCT user_id) as unique_users\nFROM `analytics.events`\nGROUP BY date, event_type;\n```\n\n## BigQuery ML\n\n```sql\n-- Train a classification model to predict churn\nCREATE OR REPLACE MODEL `analytics.churn_model`\nOPTIONS (\n  model_type = 'LOGISTIC_REG',\n  input_label_cols = ['churned']\n) AS\nSELECT\n  user_id,\n  COUNT(*) as total_events,\n  COUNT(DISTINCT DATE(created_at)) as active_days,\n  MAX(TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), created_at, DAY)) as days_since_last,\n  churned\nFROM `analytics.user_activity`\nGROUP BY user_id, churned;\n```\n\n```sql\n-- Predict churn for current users\nSELECT\n  user_id,\n  predicted_churned,\n  predicted_churned_probs[OFFSET(1)].prob as churn_probability\nFROM ML.PREDICT(\n  MODEL `analytics.churn_model`,\n  (SELECT user_id, total_events, active_days, days_since_last\n   FROM `analytics.current_user_stats`)\n)\nWHERE predicted_churned_probs[OFFSET(1)].prob > 0.7\nORDER BY churn_probability DESC;\n```\n\n## Scheduled Queries\n\n```bash\n# Create a scheduled query\nbq mk --transfer_config \\\n  --data_source=scheduled_query \\\n  --target_dataset=analytics \\\n  --display_name=\"Daily aggregation\" \\\n  --schedule=\"every 24 hours\" \\\n  --params='{\n    \"query\": \"INSERT INTO analytics.daily_summary SELECT DATE(created_at), COUNT(*) FROM analytics.events WHERE DATE(created_at) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) GROUP BY 1\",\n    \"destination_table_name_template\": \"\",\n    \"write_disposition\": \"WRITE_APPEND\"\n  }'\n```\n\n## Cost Control\n\n```bash\n# Dry run to estimate query cost\nbq query --dry_run --use_legacy_sql=false \\\n  'SELECT * FROM `analytics.events` WHERE DATE(created_at) = \"2024-01-15\"'\n```\n\n```bash\n# Set maximum bytes billed per query\nbq query --maximum_bytes_billed=1000000000 --use_legacy_sql=false \\\n  'SELECT COUNT(*) FROM `analytics.events`'\n```\n\n## Best Practices\n\n- Always partition tables by date and cluster by frequently filtered columns\n- Use `--dry_run` to estimate query costs before running expensive queries\n- Avoid `SELECT *` — query only the columns you need\n- Use materialized views for repeated dashboard queries\n- Stream only when real-time is required; batch load is cheaper\n- Set `maximum_bytes_billed` to prevent runaway query costs\n- Use Parquet or Avro for bulk loading (faster and cheaper than CSV\u002FJSON)\n- Expire old partitions automatically with `partition_expiration_days`\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fgcp-bigquery",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill gcp-bigquery",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill gcp-bigquery",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill gcp-bigquery","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fgcp-bigquery\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]