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;