BigQuery错误“查看X是自我引用”

时间:2017-04-20 01:35:19

标签: google-bigquery standard-sql

我正在从legacySQL迁移到standardSQL,并且我在遗留的相对简单的查询中收到错误。

错误是“查看myproject.mydataset.vw_1是自我引用”。

#standardSQL
SELECT a.LineItemID
FROM
  (
  SELECT
    LineItemID,
    EXTRACT(YEAR FROM DATE(`Date`)) AS Order_Year
  FROM
    `myproject.mydataset.vw_1`
  ) a  
LEFT JOIN
  `myproject.mydataset.vw_2` b
  ON
    b.Line_Item_ID = a.LineItemID
LEFT JOIN
  `myproject.mydataset.vw_3` c
  ON
    c.Line_Item_ID = a.LineItemID

有2个视图(别名b和c)左连接到1个子查询(别名为a)。

请注意,vw_2和vw_3都返回1列(Line_Item_ID),并且它们都从`myproject.mydataset.vw_1中选择。我怀疑这个问题与这两个视图有关,每个视图都查询相同的视图,但它似乎很奇怪,它可以在遗产中工作,而不是标准。

如果我注释掉表别名b或表别名c的连接,查询将起作用并返回a.LineItemID。当b和c都加入时,它只给出“视图X是自引用”错误。

我尝试用这样的子查询将连接替换为b和c,这些子查询指定了列名Line_Item_ID,但它给出了相同的错误。

LEFT JOIN
  (select Line_Item_ID from `myproject.mydataset.vw_2) b
  ON
    b.Line_Item_ID = a.LineItemID
LEFT JOIN
  (select Line_Item_ID from `myproject.mydataset.vw_3) c
  ON
    c.Line_Item_ID = a.LineItemID

vw_1的定义如下。请注意,它查询日期分区表。此视图在旧SQL时使用了TABLE_DATE_RANGE。

#standardSQL
SELECT
  *
FROM
  `myproject.mydataset.orders_daily_*`
WHERE
  _TABLE_SUFFIX >= '20170101'

1 个答案:

答案 0 :(得分:0)

它不会以您发布的方式显示,但是myproject.mydataset.orders_daily_*的星形扩展是否也可能包含视图(在_TABLE_SUFFIX上的过滤器之前)?如果是这种情况,您将需要为视图提供不同的名称,或者为通配符表使用更长的前缀,以便它不会在其扩展中包含视图。