GA4::BQ Kit

GA4::BQ Kit is the productivity tool for analysts and developers working with Google Analytics 4 data in BigQuery. It gives you instant access to a searchable library of SQL snippets directly in the BigQuery UI, helping you write accurate, complex queries faster.

➡️ Get the Extension: Chrome Web Store

Documentation

GA4::BQ Kit – Snippet Documentation

Component Snippets (🧩)

Reusable one-line snippets for common SQL tasks.

PARSE_DATE('%Y%m%d', event_date) AS event_date
CAST(FORMAT_DATE('%u', SAFE.PARSE_DATE('%Y%m%d', event_date)) AS INT64) AS day_of_week_iso
FORMAT_DATE('%A', PARSE_DATE('%Y%m%d', event_date)) AS day_of_week_name
EXTRACT(ISOWEEK FROM TIMESTAMP_MICROS(event_timestamp)) AS iso_week
_TABLE_SUFFIX BETWEEN '20260101' AND '20260101'
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event_timestamp), SECOND) AS event_ts_sec
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_title') AS page_title
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id
(SELECT value.float_value FROM UNNEST(event_params) WHERE key = 'value') AS value_float
(SELECT value.double_value FROM UNNEST(event_params) WHERE key = 'value') AS value_double
(SELECT COALESCE(value.int_value, value.float_value, value.double_value, SAFE_CAST(value.string_value AS FLOAT64)) FROM UNNEST(event_params) WHERE key = 'value') AS numeric_value
ROW_NUMBER() OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp DESC) AS row_num
CONCAT('(',STRING_AGG(DISTINCT TO_JSON_STRING(event_name)),')') AS event_names_agg

Query Snippets (🔗)

Complete queries for common usage and analysis.

# Insert all rows from a source table into a target table
INSERT INTO `target_table_id`
SELECT
  *
FROM
  `source_table_id`;
# Update rows in a table based on a condition
UPDATE `table_id`
SET column_a = 'new_value'
WHERE column_b = 'match_value';
# Delete rows from a table based on a condition
DELETE FROM `table_id`
WHERE column_a = 'value_a';
# Create a new table from an existing table
CREATE OR REPLACE TABLE `target_table_id` AS
SELECT
  *
FROM
  `source_table_id`;
# Create a partitioned and clustered table from an existing table
CREATE OR REPLACE TABLE `target_table_id`
PARTITION BY DATE(event_date)
CLUSTER BY column_a, column_b AS
SELECT
  *
FROM
  `source_table_id`;
# Use a Common Table Expression (CTE) to create a temporary result set
WITH base_cte AS (
  SELECT
    *
  FROM
    `source_table_id`
  WHERE
    column_a = 'filter_value'
)
SELECT
  *
FROM
  base_cte;
# Count the number of events by event name
SELECT
  event_name,
  COUNT(*) AS event_count
FROM
  `project.analytics123456.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260101' AND '20260101'
GROUP BY ALL;
# Find duplicate ecommerce transactions by transaction_id
SELECT
  event_date,
  event_name,
  ecommerce.transaction_id,
  COUNT(*) AS event_count
FROM
  `project.analytics123456.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260101' AND '20260101'
GROUP BY ALL
HAVING
  event_count > 1;
# Analyze consent status for selected events
SELECT
  event_name,
  privacy_info.ads_storage,
  COUNT(*) AS counter,
  ROUND((COUNT(*) * 100.0) / SUM(COUNT(*)) OVER (PARTITION BY event_name), 2) AS percentage_within_event
FROM
  `project.analytics123456.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260101' AND '20260101'
  AND event_name IN ('page_view', 'add_to_cart', 'purchase')
GROUP BY ALL
ORDER BY
  event_name, ads_storage;
# Find and display exact duplicate rows in a table
WITH keyed AS (
  SELECT
    FARM_FINGERPRINT(TO_JSON_STRING((SELECT AS STRUCT t.*))) AS row_hash,
    t.*
  FROM
    `table_id` AS t
)
SELECT
  *
FROM
  keyed
QUALIFY
  COUNT(*) OVER (PARTITION BY row_hash) > 1
ORDER BY
  row_hash;
# Get all column names for a specific table
SELECT ARRAY_AGG(column_name ORDER BY ordinal_position) AS column_names
FROM `project.dataset.INFORMATION_SCHEMA.COLUMNS`
WHERE table_name = 'your_table';