2017-03-16 69 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

请发布一个单独的问题,而不是在这里的评论部分询问。 –

相关问题