Build a Data Warehouse with BigQuery

Solution for Build a Data Warehouse with BigQuery. 1 lab: GSP340. Fast copy-paste commands for Google Cloud.

GSP340 — Build a Data Warehouse with BigQuery: Challenge Lab

Estimated time: 1 hour 15 minutes

# 🚀 Implement Cloud Security Fundamentals on Google Cloud > ⚠️ **Disclaimer:** This guide is provided for educational and learning purposes only. It is intended to help you understand Google Cloud security concepts, IAM configuration, private GKE environments, service accounts, permissions, and secure deployment workflows while preparing for Google Cloud certifications and hands-on labs. Always follow the official Google Cloud documentation, Qwiklabs/Google Cloud Skills Boost instructions, and

clear

# ==============================================================================
# Color Variables & Orbit of Ops Branding
# ==============================================================================
RED='\e[1;31m'
GREEN='\e[1;32m'
YELLOW='\e[1;33m'
BLUE='\e[1;34m'
MAGENTA='\e[1;35m'
CYAN='\e[1;36m'
WHITE='\e[1;37m'
BOLD='\e[1m'
RESET='\e[0m'

echo -e "${CYAN}${BOLD}"
cat << "EOF"
  ____       _     _ _            __    ___            
 / __ \     | |   (_) |          / _|  / _ \           
| |  | |_ __| |__  _| |_   ___  | |_  | | | |_ __  ___ 
| |  | | '__| '_ \| | __| / _ \ |  _| | | | | '_ \/ __|
| |__| | |  | |_) | | |_ | (_) || |   | |_| | |_) \__ \
 \____/|_|  |_.__/|_|\__| \___/ |_|    \___/| .__/|___/
                                            | |        
                                            |_|        
EOF
echo -e "${RESET}"
echo -e "${MAGENTA}${BOLD} 🚀 Starting Orbit of Ops Execution (GSP340: Part 1)... ${RESET}"
echo -e "${BLUE}--------------------------------------------------------------------------------${RESET}\n"

# ==============================================================================
# PRE-FLIGHT CHECKS & VARIABLES (DYNAMIC AUTO-FETCH)
# ==============================================================================
echo -e "${BOLD}${YELLOW}[Orbit of Ops] Auto-fetching Project, Zone, and Region...${RESET}"

export PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
if [[ -z "$PROJECT_ID" ]]; then
    export PROJECT_ID=$DEVSHELL_PROJECT_ID
fi

export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)' 2>/dev/null)

export ZONE=$(gcloud compute project-info describe \
    --format="value(commonInstanceMetadata.items[google-compute-default-zone])" 2>/dev/null | tail -n 1)

if [[ -z "$ZONE" ]]; then
    echo -e "${BOLD}${RED}⚠️ Could not auto-detect the default zone via gcloud metadata.${RESET}"
    read -p "$(echo -e ${BOLD}${CYAN}Please enter the lab Zone \(e.g., us-east1-c\): ${RESET})" ZONE
    export ZONE
fi

export REGION=${ZONE%-*}

gcloud config set compute/zone $ZONE 2>/dev/null
gcloud config set compute/region $REGION 2>/dev/null

echo -e "✅ Project ID: ${GREEN}$PROJECT_ID${RESET}"
echo -e "✅ Zone:       ${GREEN}$ZONE${RESET}"
echo -e "✅ Region:     ${GREEN}$REGION${RESET}\n"
echo -e "${BLUE}--------------------------------------------------------------------------------${RESET}\n"

echo -e "${BOLD}${CYAN}[Orbit of Ops] Task 1: Creating 'covid' schema & oxford_policy_tracker table...${RESET}"
bq query --use_legacy_sql=false <<EOF
CREATE SCHEMA IF NOT EXISTS covid;

CREATE OR REPLACE TABLE covid.oxford_policy_tracker
PARTITION BY date
OPTIONS(
    partition_expiration_days=2175
) AS
SELECT *
FROM \`bigquery-public-data.covid19_govt_response.oxford_policy_tracker\`
WHERE alpha_3_code NOT IN ('GBR', 'BRA', 'CAN', 'USA');
EOF

echo -e "\n${BOLD}${CYAN}[Orbit of Ops] Task 2: Adding columns to global_mobility_tracker_data table...${RESET}"
bq query --use_legacy_sql=false <<EOF
ALTER TABLE \`covid_data.global_mobility_tracker_data\`
ADD COLUMN IF NOT EXISTS population INTEGER,
ADD COLUMN IF NOT EXISTS country_area FLOAT64,
ADD COLUMN IF NOT EXISTS mobility STRUCT<
  avg_retail FLOAT64,
  avg_grocery FLOAT64,
  avg_parks FLOAT64,
  avg_transit FLOAT64,
  avg_workplace FLOAT64,
  avg_residential FLOAT64
>;
EOF

echo -e "\n${GREEN}${BOLD}✅ Part 1 complete! Please proceed to Part 2.${RESET}"
RED='\e[1;31m'
GREEN='\e[1;32m'
CYAN='\e[1;36m'
MAGENTA='\e[1;35m'
BOLD='\e[1m'
RESET='\e[0m'

echo -e "\n${MAGENTA}${BOLD} 🚀 Starting Orbit of Ops Execution (GSP340: Part 2)... ${RESET}\n"

echo -e "${BOLD}${CYAN}[Orbit of Ops] Task 3: Populating country population data...${RESET}"
bq query --use_legacy_sql=false <<EOF
UPDATE
  \`covid_data.consolidate_covid_tracker_data\` t0
SET
  t0.population = t2.pop_data_2019
FROM
  (SELECT DISTINCT country_territory_code, pop_data_2019 FROM \`bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide\`) AS t2
WHERE
  t0.alpha_3_code = t2.country_territory_code;
EOF

echo -e "\n${BOLD}${CYAN}[Orbit of Ops] Task 4: Populating country area data...${RESET}"
bq query --use_legacy_sql=false <<EOF
UPDATE
  \`covid_data.consolidate_covid_tracker_data\` t0
SET
  t0.country_area = t2.country_area
FROM
  \`bigquery-public-data.census_bureau_international.country_names_area\` t2
WHERE
  t0.country_name = t2.country_name;
EOF

# ==============================================================================
# COMPLETION
# ==============================================================================
echo -e "\n${MAGENTA}${BOLD}╔════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${MAGENTA}${BOLD}║            🎉 AUTOMATION COMPLETED SUCCESSFULLY 🎉           ║${RESET}"
echo -e "${MAGENTA}${BOLD}╚════════════════════════════════════════════════════════════╝${RESET}"
echo -e "${GREEN}${BOLD}You can now safely click ALL 'Check my progress' buttons in your lab manual.${RESET}"
echo -e "${CYAN}${BOLD}Subscribe to Orbit of Ops: https://www.youtube.com/@orbitofops/videos${RESET}\n"