BigQuery标准SQL-将查询或UDF存储在表中

时间:2019-01-24 11:34:21

标签: google-bigquery standard-sql

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

用例是,我有一个客户列表,其中每个客户的收入计算方式大不相同,并且随着时间的推移会发生变化。因此,我希望有一个查找表,可以使用用于计算该图的公式对其进行更新,而不必编写数百个查询(每个客户端一个),而且还必须维护这些查询。

我试图考虑是否有一种方法可以使标准公式具有足够的灵活性,但不幸的是,我真的认为这不可能。

1 个答案:

答案 0 :(得分:3)

当然! 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;

enter image description here