GCP Big Query 中的动态查询

问题描述 投票:0回答:1

我正在尝试在 GCP bigquery 中执行此动态查询。

EXECUTE IMMEDIATE 'INSERT INTO `project.dataset.tbl` (MARKET, PARAMETERS, KPI, VALUE_TYPE,  `03_2023`,    `04_2023`,  `05_2023`,  `06_2023`,  `07_2023`,  `08_2023`,  `09_2023`,  `10_2023`,  `11_2023`,  `12_2023`,  `01_2024`,  `02_2024`,  `03_2024`,  `04_2024`,  `05_2024`,  `06_2024`,  `07_2024`,  `08_2024`,  `09_2024`,  `10_2024`,  `11_2024`,  `12_2024`,  `01_2025`,  `02_2025`,  `03_2025`,  `04_2025`, HIST_DATE) SELECT A.MARKET, A.PARAMETERS, A.KPI, A.VALUE_TYPE,  @A , @B ,cast(FORMAT_DATE(\'%Y-%m-%d\',@LD)as date) FROM ( SELECT * FROM `project.dataset.tbl`      WHERE LAST_DAY(HIST_DATE) = LAST_DAY(DATE_ADD(cast(FORMAT_DATE(\'%Y-%m-%d\',@LD)as date),INTERVAL -1 MONTH)) ) AS A         INNER JOIN `project.dataset.tbl2` AS B ON A.MARKET = B.MARKET AND A.PARAMETERS = B.PARAMETERS       AND A.KPI = B.KPI AND A.VALUE_TYPE = B.VALUE_TYPE' USING COLUMN_A AS A,COLUMN_B AS B, LAST_DATE AS LD;

column_A 的值为

A.03_2023, A.04_2023, A.05_2023, A.06_2023, A.07_2023, A.08_2023, A.09_2023, A.10_2023, A.11_2023
,它将替换动态查询中的@A。 而column_B的值是
B.12_2023, B.01_2024, B.02_2024, B.03_2024, B.04_2024, B.05_2024, B.06_2024, B.07_2024, B.08_2024, B.09_2024, B.10_2024, B.11_2024, B.12_2024, B.01_2025, B.02_2025, B.03_2025, B.04_2025
,它正在替换动态查询中的@B。

但是,插入失败,表明 select 仅返回 7 行,而 insert 预期返回 31 行。 我该怎么做才能将@A替换为COLUMN_A的值,将@B替换为column_B,总共为31列?

google-bigquery dynamic-sql
1个回答
0
投票

我能够将存在的字符串值放入 COLUMN_A 变量中。 FROM 子句成功了。我没有在解决方案中包含 @A 作为占位符。只需使用“||A_COLUMN_NAME||”进行串联中断即可。 表 STRING_AGGREGATED_COLUMNS 的 A_COLUMN_NAME 字段包含我之前尝试使用 @A 替换的字符串。

set COLUMN_NAME_QUERY =(select  'INSERT INTO `project.dataset.tbl`  (MARKET, PARAMETERS, KPI, VALUE_TYPE,  `03_2023`,    `04_2023`,  `05_2023`,  `06_2023`,  `07_2023`,  `08_2023`,  `09_2023`,  `10_2023`,  `11_2023`,  `12_2023`,  `01_2024`,  `02_2024`,  `03_2024`,  `04_2024`,  `05_2024`,  `06_2024`,  `07_2024`,  `08_2024`,  `09_2024`,  `10_2024`,  `11_2024`,  `12_2024`,  `01_2025`,  `02_2025`,  `03_2025`,  `04_2025`, HIST_DATE) SELECT A.MARKET, A.PARAMETERS, A.KPI, A.VALUE_TYPE, '||A_COLUMN_NAME||','||B_COLUMN_NAME||' ,cast(FORMAT_DATE(\'%Y-%m-%d\','||LAST_DATE||')as date) FROM ( SELECT * FROM `project.dataset.tbl`       WHERE LAST_DAY(HIST_DATE) = LAST_DAY(DATE_ADD(cast(FORMAT_DATE(\'%Y-%m-%d\','|| LAST_DATE || ')as date),INTERVAL -1 MONTH))) AS A INNER JOIN `project.dataset.tbl2`  AS B ON A.MARKET = B.MARKET AND A.PARAMETERS = B.PARAMETERS        AND A.KPI = B.KPI AND A.VALUE_TYPE = B.VALUE_TYPE' 
from STRING_AGGREGATED_COLUMNS);

EXECUTE IMMEDIATE (COLUMN_NAME_QUERY);
© www.soinside.com 2019 - 2024. All rights reserved.