Google bigquery BigQuery标准SQL-在表中存储查询或自定义项

Google bigquery BigQuery标准SQL-在表中存储查询或自定义项,google-bigquery,bigquery-standard-sql,Google Bigquery,Bigquery Standard Sql,是否可以将数据存储在表中,然后将其转换为SQL查询或UDF(如javascript eval())呢 用例是,我有一个客户列表,其中每个客户的收入计算方式都有很大的不同,这可能会随着时间的推移而变化。因此,我希望有一个查找表,它可以用计算这个数字的公式进行更新,而不必不仅编写数百个查询(每个客户端一个),而且还要维护这些查询 我一直在想,是否有一种方法可以让标准配方足够灵活,但不幸的是,我真的认为这是不可能的。当然!BigQuery可以定义和使用JS UDF。好消息是eval() CREATE

是否可以将数据存储在表中,然后将其转换为SQL查询或UDF(如javascript eval())呢

用例是,我有一个客户列表,其中每个客户的收入计算方式都有很大的不同,这可能会随着时间的推移而变化。因此,我希望有一个查找表,它可以用计算这个数字的公式进行更新,而不必不仅编写数百个查询(每个客户端一个),而且还要维护这些查询


我一直在想,是否有一种方法可以让标准配方足够灵活,但不幸的是,我真的认为这是不可能的。

当然!BigQuery可以定义和使用JS UDF。好消息是
eval()

CREATE TEMP FUNCTION calculate(x FLOAT64, y FLOAT64, formula STRING)
RETURNS FLOAT64
LANGUAGE js AS """
  return eval(formula);
""";

WITH table AS (
  SELECT 1 AS x, 5 as y, 'x+y' formula
  UNION ALL SELECT 2, 10, 'x-y'
  UNION ALL SELECT 3, 15, 'x*y'
)

SELECT x, y, formula, calculate(x, y, formula) result
FROM table;

谢谢:)这对于临时查询肯定很有用。但是,UDF不能与视图一起存储,对吗?是否有解决方法?这将是另一个堆栈溢出问题;)当然:)我更想说的是——这需要一个JSUDF来实现,因此这就是需要问的问题?没有UDF是不可能的?…我不认为我们只能在SQL中使用eval()