Как получить динамический сводной результат в новую или существующую таблицу Bigquery?

avatar
Jeremiah
9 августа 2021 в 01:15
59
0
0

Я пытаюсь вставить результат динамического сводного запроса в новую или существующую таблицу. Проблема возникает, когда я пытаюсь сказать Bigquery: «Я понятия не имею, сколько столбцов (и их имен) в запросе, который я только что выполнил, просто поместите результаты в новую постоянную таблицу».

Есть несколько сообщений, которые я прочитал на эту тему, ни в одном из них не используется EXECUTE IMMEDIATE, как у меня, или они находятся в другой системе (например, SQL Server), которая имеет немного другой синтаксис. Например, было предложено «SELECT INTO FROM», что не работает для Bigquery. Для Bigquery я считаю, что здесь задействованы SET, CREATE OR REPLACE TABLE и, возможно, PROCEDURE, но я не уверен, как правильно это реализовать. Как написано ниже, я получаю синтаксическую ошибку, которая говорит мне, что я не могу использовать инструкцию в целом, чтобы привести таблицу к правильной схеме.

Вставка результата динамического свода в существующую таблицу без знания определения таблицы

Похожий вопрос: что лучше: «удалить, а затем создать» или «создать или заменить» при повторном запуске?

Примечание: я использую веб-интерфейс, чтобы написать ниже. Кроме того, я закомментировал свою последнюю попытку вставки в таблицу.

Заранее спасибо за любую помощь или соответствующие ссылки, которые я мог пропустить.

#Part 1: A script that creates the names for the series of columns that will be used in the pivot table
DECLARE Q_YEAR STRING
DEFAULT (
SELECT 
    #The first part is the opening parenthasis and first quote, followed by an aggregate of all q-years, followed by close quote and parenthasis
    CONCAT('("', STRING_AGG(DISTINCT DATE_YEAR, '", "'), '")')
FROM (
    SELECT 
    CONCAT('Q',EXTRACT(QUARTER FROM `DATE`), EXTRACT(YEAR FROM `DATE`)) AS DATE_YEAR 
    FROM `qb-invoice-data.Compiled_Invoice_Data.COMPILE` 

    WHERE UPC IS NOT NULL GROUP BY DATE_YEAR
    )
);

#Part 2: The part that executes the pivot table that aggregates sales of each item by quarter/year

#CREATE OR REPLACE TABLE `qb-invoice-data.Compiled_Invoice_Data.compile_PIVOT` as (

EXECUTE IMMEDIATE FORMAT("""


SELECT *

FROM(
    SELECT 
        ITEM,
        UPC, 
        QTY, 
        CONCAT('Q',EXTRACT(QUARTER FROM `DATE`), EXTRACT(YEAR FROM `DATE`)) AS DATE_YEAR 
    FROM `qb-invoice-data.Compiled_Invoice_Data.COMPILE` 

    WHERE UPC IS NOT NULL

    ) as src

PIVOT(
    SUM(QTY) 
    FOR DATE_YEAR
    IN %s
    ) AS pvt

"""
, Q_YEAR
);
#)
Источник

Ответы (0)