You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中基于含CTE的查询创建新表报错的解决方案咨询

BigQuery中基于含CTE的查询创建新表报错的解决方案咨询

你好,我看了你的问题,这个是BigQuery中CTAS(Create Table As Select)语法的常见误区,我来帮你梳理下问题和解决方法:

问题原因

你之前的写法是把CREATE OR REPLACE TABLE语句插在了CTE定义和主查询之间,这破坏了BigQuery中CTE的语法结构——所有CTE必须以WITH开头形成一个完整的块,不能被其他DDL语句打断,所以系统会报错识别不了CREATE关键字。

正确的语法逻辑

在BigQuery中,想要基于带CTE的查询创建表,必须把整个WITH开头的CTE块紧跟在CREATE TABLE ... AS的后面,也就是把CTE作为AS之后的查询主体的一部分。

修正后的完整SQL

我已经帮你把整个查询调整成了正确的结构,你可以直接使用:

CREATE OR REPLACE TABLE `stage.myassort.company_report` AS
WITH CATALOG_SKU_CTE AS (
    SELECT A.sku
    FROM `catalog-stage.catalog_enterprise_views.sku_hierarchy_view` A,
         `catalog-stage.catalog_enterprise_views.sku_v` B
    WHERE A.sku = B.SKU
      AND UPPER(B.group) = "MERCHANDISING"
      AND UPPER(B.specification) = "NONCONFIGURABLE"
      AND UPPER(B.classification) IN ("LUMBER","NORMAL")
),
-- Get all current stores and their markets
STORE_CTE AS (
    SELECT STR_NBR
    FROM `assrtmgmt-stage.assrtmgmt.STR_CRDB_VIEW`
    WHERE str_typ_ind = "N"
      AND MKT_NBR <> 401
),
-- Create a list of SKU-store combinations for this triangulation
SKU_STORE_CTE AS (
    SELECT A.SKU, B.STR_NBR
    FROM CATALOG_SKU_CTE A,
         STORE_CTE B
),
AC_CTE AS (
    SELECT SKU, ASSORTED, LOCATION, STRATEGY
    FROM `assrtmgmt-stage.AC_SHARED.product_assortment_commons_realtime`
    WHERE UPPER(LOCATION_TYPE) = "STR"
      AND SELLING_CHANNEL = 1
),
POG_PRODUCT_CTE AS (
    SELECT DISTINCT SKU_NBR, DBKEY
    FROM `spaceplanning-stage.SPACE_COMMONS.IX_SPC_PRODUCT_VIEW`
    WHERE ACTV_FLG = true
),
MYASSORT_CTE AS (
    SELECT DISTINCT A.sku_id, B.str_id
    FROM `assrtmgmt-stage.myassort_strategy.stock_set_sku` A,
         `assrtmgmt-stage.myassort_strategy.stock_set_str` B
    WHERE A.set_id = B.set_id
),
-- Get list of SKU-store combinations from POG where the SKU-store is either on live a POG or a Pending POG
POG_VIEW_CTE AS (
    SELECT DISTINCT POG_SKUS.SKU_NBR, POG_STORES.STR_NBR
    FROM POG_PRODUCT_CTE POG_SKUS,
         `spaceplanning-stage.SPACE_COMMONS.IX_SPC_PLANOGRAM_VIEW` POG,
         `spaceplanning-stage.SPACE_COMMONS.IX_SPC_POSITION_VIEW` POG_POS,
         `spaceplanning-stage.SPACE_COMMONS.THD_STORE_POG_ASSIGN_VIEW` POG_STORES
    WHERE POG_SKUS.DBKEY = POG_POS.DBPARENTPRODUCTKEY
      AND POG_POS.ACTV_FLG = true
      AND POG_POS.DBPRNTPLANOGRAMKEY = POG.DBKEY
      AND POG.ACTV_FLG = true
      AND POG.DBKEY = POG_STORES.DBPARENTPLANOGRAMKEY
      AND POG_STORES.FINISHEDDATE IS NULL
      AND POG_STORES.ACTV_FLG = true
)
-- MAIN QUERY
SELECT SSC.SKU AS `SKU`,
       SSC.STR_NBR AS `Store`,
       CASE WHEN MA.sku_id IS NULL THEN "N" ELSE "Y" END AS `MyAssortment`,
       CASE WHEN PVC.SKU_NBR IS NULL THEN "N" ELSE "Y" END AS `POG`,
       CASE
           WHEN AC.ASSORTED IS NULL THEN "N"
           WHEN UPPER(AC.ASSORTED) = "OFF" THEN "N"
           WHEN UPPER(AC.STRATEGY) LIKE "%INACTIVE%" THEN "N"
           WHEN UPPER(AC.STRATEGY) LIKE "%DELETE%" THEN "N"
           WHEN UPPER(AC.STRATEGY) = "CLEARANCE" THEN "N"
           ELSE "Y"
       END AS `Assortment_Commons`
FROM SKU_STORE_CTE SSC
LEFT OUTER JOIN MYASSORT_CTE MA ON SSC.SKU = MA.SKU_ID AND SSC.STR_NBR = MA.STR_ID
LEFT OUTER JOIN POG_VIEW_CTE PVC ON SSC.SKU = PVC.SKU_NBR AND SSC.STR_NBR = CAST(PVC.STR_NBR AS INT64)
LEFT OUTER JOIN AC_CTE AC ON SSC.SKU = AC.SKU AND SSC.STR_NBR = AC.LOCATION
ORDER BY SSC.SKU, SSC.STR_NBR;

额外的小调整说明

  1. 移除了主查询末尾多余的括号,避免潜在语法错误
  2. 统一了代码缩进,让结构更易读
  3. 保留了你原来的字符串引号风格(双引号),BigQuery中双引号和单引号都可用于字符串,只要保持一致即可

这样调整后,就能正常创建你需要的报表表了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:48:01