BigQuery:查询错误:MERGE表时列名_PARTITIONDATE不明确



我有一个查询,当源中有新行不在目标表中时,它会将源临时表合并到目标表。源表使用WITH子句和ROW_NUMBER((从临时表中获取一个不重复的行。我使用了一个摄取时间分区表(day(,这意味着在合并过程中,我必须指定官方文档中的列名(两个表都有相同的表模式(

MERGE mydataset.myfinaltable T 
USING (
WITH myNonDupSource AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY product, barcode) AS RowNumber
FROM mySourceTempTable
)
SELECT * EXCEPT (RowNumber)
FROM myNonDupSource
WHERE RowNumber = 1
) as S
ON
T.product = S.product
and  T.barcode= S.barcode
WHEN NOT MATCHED THEN
INSERT (
col_a,
col_b,
col_c,
product,
barcode
)
VALUES (
S.col_a,
S.col_b,
S.col_c,
S.product,
S.barcode
);

我运行了查询,它显示query error: Column name _PARTITIONDATE is ambiguous at mydataset.myfinaltable

起初我尝试了INSERT (col_a,col_b, col_c,product, barcode) ROW;,但它产生了相同的错误。不确定我错过了哪一部分,它不应该是模棱两可的,因为我指定了要插入的列,但为什么_PARTITIONDATE列仍然抛出错误

当您在SQL查询中连接多个表时,如果两个表中都存在具有相同名称的列,Bigquery不知道要使用哪一个(除非您明确告知(,因此它会抛出不明确的列名错误。

Bigquery WebUI编辑器足够智能,可以突出显示不明确列所在的确切行(在sql编辑器的页边空白处查找红色感叹号(。您可以查看更多文档。

您需要添加字段的名称,而不是所有字段(*(,如以下示例所示:

MERGE mydataset.myfinaltable T 
USING (
WITH myNonDupSource AS (
SELECT
fieldname1,fieldname2,fieldname3,
ROW_NUMBER() OVER (PARTITION BY product, barcode) AS RowNumber
FROM mySourceTempTable
)
SELECT fieldname1,fieldname2,fieldname3 EXCEPT (RowNumber)
FROM myNonDupSource
WHERE RowNumber = 1
) as S
ON
T.product = S.product
and  T.barcode= S.barcode
WHEN NOT MATCHED THEN
INSERT (
col_a,
col_b,
col_c,
product,
barcode
)
VALUES (
S.col_a,
S.col_b,
S.col_c,
S.product,
S.barcode
);

最新更新