2016-10-10 71 views
1

運行查詢時出現內部錯誤,因爲特殊情況在'WHEN'子句中包含'CASE'子句和兩個不同的字段。查詢如下:bigquery內部錯誤情況條件

SELECT 
    CASE WHEN site != 'a' OR geo LIKE 'NO%' THEN "test" END 
FROM elc.CpEvents_agderposten 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

相似的查詢,做工精細:

SELECT 
    CASE WHEN site != 'agderposten' OR geo LIKE 'NO%' THEN "test" END 
FROM elc.CpEvents_agderposten 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

-

SELECT 
    CASE WHEN geo LIKE 'NO%' THEN "test" END 
FROM elc.CpEvents_agderposten 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

-

SELECT 
CASE WHEN site != 'a' AND geo LIKE 'NO%' THEN "test" END 
FROM elc.CpEvents_agderposten 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

-

SELECT 
    CASE WHEN site != 'a' THEN "test" WHEN geo LIKE 'NO%' THEN "test" END 
FROM 
    elc.CpEvents_agderposten 
WHERE 
    _partitiontime BETWEEN TIMESTAMP('2014-09-24') 
    AND TIMESTAMP('2014-09-24') 

我知道最後一個例子可以用作第一個查詢的解決方法,但它不能始終應用。例如,下面的查詢失敗過:

SELECT 
     CASE WHEN site == 'a' and geo >= 'NO' THEN "test" END 
    FROM elc.CpEvents_agderposten 
    WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

作業ID爲第一個查詢是:CPCD-1357:bquijob_24edf89_157ae353e1e

及最近查詢:CPCD-1357:bquijob_1b26172b_157ae348938

任何人都知道如何避免這個錯誤?

回答

0

看起來您正在使用傳統SQL中的邊緣案例,涉及在條件中使用重複列。如果您通過在用戶界面中的「顯示選項」取消選中「使用傳統的SQL」啓用standard SQL,下面的查詢應該工作:

SELECT 
    CASE WHEN site != 'a' OR geo LIKE 'NO%' THEN "test" END 
FROM `elc.CpEvents_agderposten` t, t.geo geo 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24'); 

該查詢,以比較反對geo「變平」的重複。

或者,你可以使用FLATTEN運營商與傳統的SQL來解決內部錯誤:

SELECT 
    CASE WHEN site != 'a' OR geo LIKE 'NO%' THEN "test" END 
FROM FLATTEN([elc.CpEvents_agderposten], geo) 
WHERE _partitiontime BETWEEN TIMESTAMP('2014-09-24') AND TIMESTAMP('2014-09-24') 

你可以閱讀更多有關migration guide傳統和標準SQL之間的差異。