2016-09-19 12 views
0

私はPython APIでBigQuery Standard SQLを使用しようとしていますが、WEB UIで正常に実行されたクエリは実行できません。BigQuery Pythonを使用した標準SQLはOFFSETキーワードを使用できません

基本的には、文字列を分割してから、OFFSETキーワードを使用して特定のインデックスの値を取得しています。次のように:

CASE WHEN t.depth = 1 THEN '' WHEN t.depth = 2 THEN '' WHEN t.depth = 3 THEN '' WHEN t.depth = 4 THEN '' WHEN t.depth = 5 THEN '' WHEN t.depth = 6 THEN t.curr WHEN t.depth = 7 THEN SPLIT(t.ancestry,'/')[OFFSET(6)] ELSE '' END AS level7, 


CASE WHEN t.depth = 1 THEN '' WHEN t.depth = 2 THEN '' WHEN t.depth = 3 THEN '' WHEN t.depth = 4 THEN '' WHEN t.depth = 5 THEN t.curr WHEN t.depth = 6 THEN SPLIT(t.ancestry,'/')[OFFSET(5)] WHEN t.depth = 7 THEN SPLIT(t.ancestry,'/')[OFFSET(5)] ELSE '' END AS level6, 

上記のコードはPythonのAPIを使用してuseLegacySQL = Falseを設定する一方で、私は次のエラー

raise HttpError(resp, content, uri=self.uri) 
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/bigquery/v2/projects/************* 
returned "Encountered " "]" "[OFFSET(6)] "" at line 7, column 217. Was expecting: "END" ..."> 

すべてのヘルプは高く評価されての取得、WEB UIで問題なく動作します。

+0

私は今それを試してみました。ここにコードを追加できますか? –

答えて

0

エラーメッセージに基づいてレガシーSQLを使用してクエリが実行されているようです。私は、例えば、この使用した従来のSQLを実行しようとすると、私は、同じメッセージが表示されます。

SELECT 
    CASE s 
    WHEN 'first' THEN SPLIT(arr, ',')[OFFSET(0)] 
    WHEN 'second' THEN SPLIT(arr, ',')[OFFSET(1)] 
    ELSE NULL 
    END AS val 
FROM (SELECT '1,2' AS arr, 'second' AS s); 

Error: Encountered " "]" "[OFFSET(0)] "" at line 1, column 48. Was expecting: "END" ... 

は編集:Enabling Standard SQLからリンクされている例が正しくありません。 useLegacySQLではなく、useLegacySql(小文字のql)です。追跡の問題はhttps://code.google.com/p/google-bigquery/issues/detail?id=701です。

関連する問題