[英]BigQuery : Query error: Column name _PARTITIONDATE is ambiguous when MERGE table
我有一個查詢,當源中有新行而不在目標表中時,它會將源臨時表合並到目標表。 源表使用 WITH 子句和 ROW_NUMBER() 從臨時表中獲取非重復行。 我使用了一個攝取時間分區表(天),這意味着在合並期間我必須指定來自官方文檔的列名(兩個表具有相同的表架構)
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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.