簡體   English   中英

BigQuery:查詢錯誤:MERGE 表時列名_PARTITIONDATE 不明確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM