BigQuery Standard SQL - сохранить запрос или UDF в таблице - PullRequest
0 голосов
/ 24 января 2019

Можно ли хранить данные в таблице, которая затем может быть преобразована либо в SQL-запрос, либо в UDF, например, в javascript eval ()?

В случае использования у меня есть список клиентовгде заработок рассчитывается совершенно разными способами для каждого, и это может меняться со временем.Поэтому я хотел бы иметь справочную таблицу, которая может быть обновлена ​​с помощью формулы для расчета этой цифры, вместо того, чтобы писать не только сотни запросов (по одному для каждого клиента), но и поддерживать их.

Я пыталсяподумать, есть ли способ иметь стандартную формулу, которая была бы достаточно гибкой, но я действительно не думаю, что это возможно, к сожалению.

1 Ответ

0 голосов
/ 24 января 2019

Конечно!BigQuery может определять и использовать пользовательские функции JS.Хорошей новостью является то, что 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

...