在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF

Posted

技术标签:

【中文标题】在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF【英文标题】:In google bigquery, how to use javascript UDF using google python client 【发布时间】:2017-03-16 05:03:58 【问题描述】:

我正在使用标准 SQL 和 javascript UDF 在 bigquery 中编写查询。我可以使用 WebUI 和 bigquery 命令行工具来实现这一点,但我的要求是使用 google python 客户端进行此查询。无法做到这一点。请有人帮忙。

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

这对我不起作用。请有人帮助我该怎么做。

【问题讨论】:

您应该显示到目前为止您尝试了什么?请编辑您的问题以显示您遇到问题的代码的Minimal, Complete, and Verifiable example,然后我们可以尝试帮助解决具体问题。你也可以阅读How to Ask 我想知道您使用的是哪个 Python 库,以及您遇到了什么错误 - 您可以发布无效代码吗? 我是否需要将代码的 javascript UDF 部分放在谷歌云存储中的文件中,然后从那里在我的代码中使用它。但我什至不明白如何访问该文件sql查询函数内部 我在这里面临的问题是像 var values= ; 这样的Javascript命令给我语法错误。这是因为在 Python 中无法识别 java 脚本命令吗?我在上面编写的相同查询在 bigquery Web UI 中完美运行。 【参考方案1】:

问题似乎是您这里有 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 
'''

【讨论】:

非常感谢。这件小事从 4 到 5 天就一直困扰着我。 另外,有没有办法按照原始数据中的顺序在 bigquery 中上传数据?因为,当我将数据上传到 bigquery 时,它会被排序。我不希望这种排序并希望数据按原始顺序排列。我能做些什么呢? 请发表一个单独的问题,而不是在此处的评论部分提问。

以上是关于在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Bigquery 在 Google Bigquery 中进行身份验证,而无需使用服务帐户进行用户输入

如何在 Google 的 Bigquery 中获取最频繁的值

如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?

使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?

如何在 Google Cloud Datalab 中使用 Bigquery JSON 函数

如何在 Google BigQuery 中管理架构迁移