2016-10-10 7 views
1

'CASE'句と 'WHEN'句の2つの異なるフィールドが含まれているため、クエリを実行するときに内部エラーが発生します。次のようにクエリは次のとおりです。bigqueryの内部エラーケースcondtion

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:CPCD-1357:bquijob_1b26172b_157ae348938

誰もが知っている

bquijob_24edf89_157ae353e1eそして最後のクエリのためにこのエラーを回避する方法は?

答えて

0

条件内で繰返し列を使用することに関連して、従来のSQLの中で大文字になるようです。あなたはUIの「表示オプション」の下に「使用レガシー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と比較するために、繰り返しを「平坦化」。

代わりに、内部エラーを回避するために、従来のSQLでFLATTEN演算子を使用することができます。

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との違いについての詳細を読むことができます。

関連する問題