Javascript 将表的每一列传递给UDF

Javascript 将表的每一列传递给UDF,javascript,python,sql,google-bigquery,udf,Javascript,Python,Sql,Google Bigquery,Udf,我需要用Python编写一个脚本,用它对上传到bigquery上的表的所有列运行查询。 我知道我可以按名称选择各个列,并按如下方式进行处理: 从表名称中选择不同的列名称 然后用javascript编写一个UDF来进行处理 但是,我的要求是以列表的形式获取SchemaPropose的所有列名,然后在select语句中逐个传递列表的元素,就像假设列名列表是l=[col1,col2,col3…] 我想做一些类似的事情: for i in range(0,len(l): SELECT DISTI

我需要用Python编写一个脚本,用它对上传到bigquery上的表的所有列运行查询。 我知道我可以按名称选择各个列,并按如下方式进行处理: 从表名称中选择不同的列名称 然后用javascript编写一个UDF来进行处理

但是,我的要求是以列表的形式获取SchemaPropose的所有列名,然后在select语句中逐个传递列表的元素,就像假设列名列表是l=[col1,col2,col3…] 我想做一些类似的事情:

for i in range(0,len(l):
    SELECT DISTINCT l[i] from table_name
因此,我不需要在代码中硬编码模式的列名。 如何使用标准sql执行这个大查询?
还是不可能,我需要将整个数据集传递到javascript UDF中,然后在那里进行所有处理?

目前无法将用户定义的函数分别应用于表中的每一列,而不枚举所有列。一个想法是执行基于行的处理,尽管这仍然需要在函数定义中列出列名和类型。例如:

#standardSQL
CREATE TEMP FUNCTION ProcessRow(t STRUCT<x FLOAT64, y STRING, z BOOL>)
RETURNS STRUCT<x FLOAT64, y STRING, z BOOL> LANGUAGE js AS """
  function ProcessColumn(x) {
    // (Some processing here)
    return x;
  }

  var new_t = new Object();
  for (var property in t) {
    if (t.hasOwnProperty(property)) {
      new_t[property] = ProcessColumn(t[property]);
    }
  }
  return new_t;
""";

WITH YourTable AS (
  SELECT 1 AS x, 'foo' AS y, true AS z
)
SELECT ProcessRow(t).*
FROM YourTable t;

如果BigQuery支持模板化函数,这将更简单,您可以使用模板化函数来注册您的兴趣。

是否尝试将UDF分别应用于每一列?或者UDF是采用列的某个子集?我不太理解您试图生成的查询的形状。我需要一次一列地将每个列传递给UDF