通过CLI在BigQuery中调用外部UDF

时间:2015-09-16 12:04:31

标签: json google-bigquery user-defined-functions talend

我正在尝试使用BigQuery中的UDF [或通过Talend]在我首选的JSON中查询表作为输出。我已经通过链接解释了内联和外部UDF的用法。但我想不出从CLI执行UDF的方法。

是否可以从CLI [bq或gsutil]执行外部UDF,我可以通过Talend Data Integerator工具使用它。任何人都可以建议指向这个指针吗?

1 个答案:

答案 0 :(得分:2)

您可以通过" bq"运行UDF。命令行工具,通过指定--udf_resource标志。您可以将标记值设置为gs:// URL或本地文件的名称。

例如,您可以从UDF documentation运行urlDecode UDF,如下所示:

$ cat urldecode.js
// UDF definition
function urlDecode(row, emit) {
  emit({title: decodeHelper(row.title),
        requests: row.num_requests});
}

// Helper function with error handling
function decodeHelper(s) {
  try {
    return decodeURI(s);
  } catch (ex) {
    return s;
  }
}

// UDF registration
bigquery.defineFunction(
  'urlDecode',  // Name used to call the function from SQL

  ['title', 'num_requests'],  // Input column names

  // JSON representation of the output schema
  [{name: 'title', type: 'string'},
   {name: 'requests', type: 'integer'}],

  urlDecode  // The function reference
);

$ cat query.sql
SELECT requests, title
FROM
  urlDecode(
    SELECT
      title, sum(requests) AS num_requests
    FROM
      [fh-bigquery:wikipedia.pagecounts_201504]
    WHERE language = 'fr'
    GROUP EACH BY title
  )
WHERE title LIKE '%ç%'
ORDER BY requests DESC
LIMIT 100

$ bq query --udf_resource=urldecode.js "$(cat query.sql)"