GROUP BY с использованием параметров в Ads Data Hub (BigQuery)
Я работаю над центром данных Google Ads и относительно новичок в bigquery (sql в целом). В определенном случае я пытаюсь создать динамическую группу на основе ввода параметра (я считаю, что параметр должен быть массивом?)
Итак, если, скажем, моя таблица имеет четыре поля (два числовых и два строковых)
И мне нужен сценарий, в котором я делаю группу по одной из строковых переменных или по обеим вместе
Таким образом, на основе ввода моих параметров мои данные будут сгруппированы по выбранному вводу, и к числовым данным будет применяться определенная математическая операция (например, среднее значение).
В настоящее время я могу просто комбинировать разные строковые столбцы (допустим, у меня есть возраст и имя в качестве столбцов, поэтому у меня есть один столбец возраста, один столбец имени и один столбец age_name), но этот обходной путь разваливается, когда мои строковые столбцы выходят за пределы числа так как будет слишком много возможных комбинаций.
Есть ли способ динамически указать, какие столбцы я хочу сгруппировать по моей таблице, и выбрать эти столбцы и числовые значения (пост-агрегирование) в моем выводе?
2 ответа
Попробуйте EXECUTE_IMMEDIATE:
DECLARE columns STRING;
CREATE TEMPORARY TABLE mytable as
select "Jolteon" as pokemon, "City1" as location, 230 as value union all
select "Jolteon", "City2", 210 union all
select "Umbreon", "City2", 240 union all
select "Umbreon", "City2", 180 union all
select "Umbreon", "City3", 180 union all
select "Espeon", "City3", 260 union all
select "Espeon", "City3", 100 union all
select "Espeon", "City4", 300
;
SET columns="pokemon, location";
EXECUTE IMMEDIATE "SELECT " || columns || ", AVG(value) as value FROM mytable GROUP BY " || columns;
Если я предоставлю параметр @hierarchy в виде массива строк ...
Рассмотрим ниже
DECLARE hierarchy ARRAY<STRING>;
SET hierarchy = ['pokemon', 'location'];
EXECUTE IMMEDIATE 'SELECT ' || ARRAY_TO_STRING(hierarchy, ',') ||
', AVG(value) as value FROM `project.dataset.table` GROUP BY ' || ARRAY_TO_STRING(hierarchy, ',');
Если применить к образцу данных в вашем вопросе - результат будет
В случае
SET hierarchy = ['pokemon'];
- выход