GBQ query pro společný view Meta, Google Ads, Adform – Campaigns Total

Níže je příkladové query, které z “campaigns total” tabulek v GBQ, separovaných pro Meta, Google Ads a Adform, udělá jednu společnou tabulku se základními unifikovanými metrikami. (pozor, počítá že mají všechny stejnou měnu).

CREATE OR REPLACE VIEW CAMPAIGNDASH.DashSampleCampaignALL1074 AS

— Meta (DashSampleMeta1074_2)
SELECT
campaign_name,
SAFE_CAST(impressions AS INT64) AS impressions,
SAFE_CAST(clicks AS INT64) AS clicks,
SAFE_CAST(spend AS NUMERIC) AS spend
FROM CAMPAIGNDASH.DashSampleMeta1074_2

UNION ALL

— Google Ads
SELECT
campaign_name,
SAFE_CAST(metrics_impressions AS INT64) AS impressions,
SAFE_CAST(metrics_clicks AS INT64) AS clicks,
SAFE_CAST(metrics_costmicros AS NUMERIC) / 1000000 AS spend
FROM CAMPAIGNDASH.DashSampleGAdsCampaignTotal1074

UNION ALL

— Adform
SELECT
campaign AS campaign_name,
SAFE_CAST(impressions AS INT64) AS impressions,
SAFE_CAST(clicks AS INT64) AS clicks,
SAFE_CAST(cost AS NUMERIC) AS spend
FROM CAMPAIGNDASH.DashSampleAdform1074;

A níže je prompt pro Chat GPT, který to vygeneruje, můžete si ho případně upravit pokud jste líní nebo nemáte znalosti si upravovat to query.

You are a Google Big Query expert. Your task is to create a query for creating / updating a new table view in GBQ, that will contain the values from other tables.

The view name will be CAMPAIGNDASH.DashSampleCampaignALL1074 with columns: campaign_name impressions clicks spend

and it will consist of the following tables. Each table has several columns to display, they all are in the same order, but in the query I need you to name them, because I will work on that query further CAMPAIGNDASH.DashSampleMeta1074 campaign_name impressions clicks spend

CAMPAIGNDASH.DashSampleGAdsCampaignTotal1074 campaign_name metrics_impressions metrics_clicks metrics_costmicros – please divide this by 1000000 before inserting the value into the view

CAMPAIGNDASH.DashSampleAdform1074 campaign impressions clicks cost

please output the query for the view

Spojení dvou Google Big Query tabulek v jednu

V H3.0 METRICS se pracuje s velkými objemy dat a snahou v rámci datové hygieny je aktualizovat jenom ta data, která dávají smysl. Takový přístup šetří čas, datové objemy, náklady na GBQ i přírodu symozřejmě. Proto se, zejména při práci s Ads Transparency daty od Meta, přistupuje k rozdělení dat do více tabulek, přičemž se aktualizuje jenom ta poslední.

Například:
– do tabulky “META_competitors_daily_2024” si uložíme data za rok 2024 a tuto už neaktualizujeme
– na tabulku “META_competitors_daily_2025” si nastavíme aktivní, pravidelně aktualizovaný datatask, který do ní bude pravidelně posílat denní data za 2025

Takto mohou vznikat i složitejší komplexy tabulek například s měsíčními daty.

Vzhledem k tomu, že ale chceme data vizualizovat společně, spojíme pro potřebu vizualizace data “do jedné tabulky”.

To se udělá tak, že se vytvoří tzv. “databázové view”, které spojí tabulky do jedné.

Toto view je pak v GBQ dispozici stejně jako jednotlivé tabulky a tak ho můžeme například napojit do Google Looker Studio jako zdroj dat.

    1. Vytvoření databázového view v Google Big Query se vytvoří spuštěním níže uvedeného query

    Pokud mají obě tabulky stejné pořadí sloupců, uděláme view spuštěním následujícího jednoduchého query:

    CREATE VIEW project.META_competitors_daily AS
    SELECT *
    FROM `project.META_competitors_daily_2024`
    UNION ALL
    SELECT *
    FROM `project.META_competitors_daily_2025`;

    V případě, že je pořadí sloupců v každé z tabulek odlišné, je jistější sloupce do view vypsat.

    Nerjdříve si zjistíme seznam všech sloupců oddělených čárkou

    SELECT STRING_AGG(column_name, ', ') AS columns
    FROM `PROJECT.INFORMATION_SCHEMA.COLUMNS`
    WHERE table_name = 'competitorsdaily2024';

    Ty pak můžeme vložit do následujího query. To spojuje dvě tabulky pro Meta Ads Transparency daily data ve struktuře platné k 3.1.2025:

    CREATE VIEW PROJECT.competitorsdaily_current AS
    SELECT
    __h30_primary_key, _h30_datatask_uuid, _h30_datatask_custom_id, _h30_datatask_name, _h30_datatask_group_name, _h30_datetime, _h30_datatype_time_incremet, _h30_datatype_level, _h30_datatype_breakdowns, target_gender, page_name, page_id, languages, eu_total_reach, ad_snapshot_url, ad_delivery_start_time, ad_delivery_stop_time, ad_creative_bodies, ad_creation_time, id, this_day_date, ad_creative_link_titles, ad_creative_link_descriptions, ad_creative_link_captions, ad_creative_body_example, ad_creative_link_description_example, ad_creative_link_title_example, payer, beneficiary, facebook, target_ages_out, publisher_platforms_out, instagram, messenger, audience_network, target_locations_out, est_frequency, est_impressions, est_cpm_eur, est_cost_eur, acgb_countries, agb_reach_unknown_total, agb_reach_female_total, agb_reach_male_total, agb_reach_65__male, agb_reach_65__female, agb_reach_65__unknown, agb_reach_65__total, agb_reach_18_24_male, agb_reach_18_24_female, agb_reach_18_24_unknown, agb_reach_18_24_total, agb_reach_25_34_male, agb_reach_25_34_female, agb_reach_25_34_unknown, agb_reach_25_34_total, agb_reach_35_44_male, agb_reach_35_44_female, agb_reach_35_44_unknown, agb_reach_35_44_total, agb_reach_45_54_male, agb_reach_45_54_female, agb_reach_45_54_unknown, agb_reach_45_54_total, agb_reach_55_64_male, agb_reach_55_64_female, agb_reach_55_64_unknown, agb_reach_55_64_total, est_cost_eur_ageweighted, days_on_air
    FROM PROJECT.competitorsdaily2024
    UNION ALL
    SELECT
    __h30_primary_key, _h30_datatask_uuid, _h30_datatask_custom_id, _h30_datatask_name, _h30_datatask_group_name, _h30_datetime, _h30_datatype_time_incremet, _h30_datatype_level, _h30_datatype_breakdowns, target_gender, page_name, page_id, languages, eu_total_reach, ad_snapshot_url, ad_delivery_start_time, ad_delivery_stop_time, ad_creative_bodies, ad_creation_time, id, this_day_date, ad_creative_link_titles, ad_creative_link_descriptions, ad_creative_link_captions, ad_creative_body_example, ad_creative_link_description_example, ad_creative_link_title_example, payer, beneficiary, facebook, target_ages_out, publisher_platforms_out, instagram, messenger, audience_network, target_locations_out, est_frequency, est_impressions, est_cpm_eur, est_cost_eur, acgb_countries, agb_reach_unknown_total, agb_reach_female_total, agb_reach_male_total, agb_reach_65__male, agb_reach_65__female, agb_reach_65__unknown, agb_reach_65__total, agb_reach_18_24_male, agb_reach_18_24_female, agb_reach_18_24_unknown, agb_reach_18_24_total, agb_reach_25_34_male, agb_reach_25_34_female, agb_reach_25_34_unknown, agb_reach_25_34_total, agb_reach_35_44_male, agb_reach_35_44_female, agb_reach_35_44_unknown, agb_reach_35_44_total, agb_reach_45_54_male, agb_reach_45_54_female, agb_reach_45_54_unknown, agb_reach_45_54_total, agb_reach_55_64_male, agb_reach_55_64_female, agb_reach_55_64_unknown, agb_reach_55_64_total, est_cost_eur_ageweighted, days_on_air
    FROM PROJECT.competitorsdaily2025;