2017-03-16 9 views
0

私はbigqueryで標準SQLとjavascript UDFを使用してクエリを作成しています。私はWebUIとbigqueryコマンドラインツールを使用してこれを実装することができますが、私の要件はGoogleのpythonクライアントを使用してこのクエリを行うことです。これを達成することはできません。誰か助けてください。google bigqueryでは、Google Pythonクライアントを使用してjavascript UDFを使用する方法

from google.cloud import bigquery 
bigquery_client = bigquery.Client() 
client = bigquery.Client() 
query_results = client.run_sync_query(""" 

CREATE TEMPORARY FUNCTION CategoriesToNumerical(a array<STRING>,b array<STRING>) 
RETURNS string 
LANGUAGE js AS """ 

var values = {}; 

var counter = 0; 

for(i=0;i<a.length;i++) 

{ var temp; 

    temp = a[i]; 

    a[i] = counter; 

    values[temp] = counter; 

    counter ++; 
    } 

for(i=0;i<b.length;i++) 
    { 

for(var key in values) 
    { 
    if(b[i] == key) 
    { 
    b[i] = values[key]; 
    } 
    } 
} 

return b; 
"""; 

SELECT 
CategoriesToNumerical(ARRAY(SELECT DISTINCT ProspectStage from lsq.lsq_dest),ARRAY(SELECT ProspectStage from lsq.lsq_dest)) as prospectstageds 

;""") 

query_results.use_legacy_sql = False 

query_results.run() 

page_token = None 

while True: 
    rows1, total_rows, page_token = query_results.fetch_data(
     max_results=100, 
     page_token=page_token) 
    for row1 in rows1: 
     print "row",row1 
    if not page_token: 
     break 

これは私のために働いていません。どうすればいいか教えてください。

+0

あなたはこれまでにしようとしているかを示す必要がありますか?[、最小完全、かつ検証例]を表示するためにあなたの質問を編集してください(http://stackoverflow.com/help/mcve)のあなたが問題を抱えているコード、私たちは特定の問題を解決しようとすることができます。あなたは[How to Ask](http://stackoverflow.com/help/how-to-ask)を読むこともできます –

+0

私はどのPythonライブラリを使用しているのでしょうか、どのようなエラーが発生しているのでしょうか?ワーキングコード? –

+0

JavaScriptのUDF部分をGoogleクラウドストレージ内のファイルに入れてそこからコードを使用する必要がありますか?SQLクエリ関数の内部からそのファイルにアクセスする方法はわかりません。 –

答えて

0

問題は「『』トリプルのためにこれらのセットのいずれかを交換してください。あなたは「「」ここでは、競合の2セットを持っているように思われ、コードが動作するはずです。

ので、代わりの

query_results = client.run_sync_query(""" 

CREATE TEMPORARY FUNCTION CategoriesToNumerical(a array<STRING>,b array<STRING>) 
RETURNS string 
LANGUAGE js AS """ 
    javacript code 
""" 
SELECT * 
FROM 
""" 

書き込み

query_results = client.run_sync_query(''' 

CREATE TEMPORARY FUNCTION CategoriesToNumerical(a array<STRING>,b array<STRING>) 
RETURNS string 
LANGUAGE js AS """ 
    javacript code 
""" 
SELECT * 
FROM 
''' 
+1

ありがとうございました。この小さな事は4〜5日以来私を悩ませていました。 –

+0

また、元のデータの順序でbigqueryにアップロードされたデータを取得する方法はありますか?として、私はbigqueryにデータをアップロードしているように、そのソートされます。私はこの並べ替えを望んでいないし、元の順序でデータをしたい。そのために私は何ができますか? –

+0

こちらのコメント欄に質問するのではなく、別の質問を投稿してください。 –

関連する問題