2017-03-16 73 views
0

我在使用標準SQL和JavaScript UDF的bigquery中編寫查詢。我能夠使用WebUI和bigquery命令行工具來實現這一點,但我的要求是使用谷歌python客戶端進行此查詢。無法實現這一點。請有人幫忙。在谷歌BigQuery中,如何使用谷歌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)的一個[最小,完整,可驗證的示例]你遇到問題的代碼ñ我們可以嘗試幫助解決具體問題。你也可以閱讀[如何問](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

請發佈一個單獨的問題,而不是在這裏的評論部分詢問。 –

相關問題