我在bigquery中有一个表,其中有一列存储不同的日期公式,如DATE_ADD(CURRENT_DATE,INTERVAL 1 DAY),DATE_ADD(CURRENT_DATE,INTERVAL 7 DAY),根据不同行中的要求 . 我想使用此表来计算end_date in使用这些公式的另一个表 . 在当前表中,列类型是字符串 . 有什么办法可以计算bigquery中的公式,它在另一个表中存储为字符串?
如果需要处理任意表达式,请考虑将公式存储为Javascript表达式 . 然后,您可以使用JS UDF和eval()在查询执行时解析它们 .
不要忘记在它们周围放置一个try-catch(并返回NULL或某种错误记录) - 否则如果有人在某处输入无效表达式,则整个查询将失败 .
要在eval'd表达式和UDF包装器之间传递信息,您可以使用全局范围的变量 .
https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
如果您有一组有限的不同表达式,您也可以考虑制作一个表驱动的表达式解析器 . 这可能会将像LAST_WEEK这样的字符串映射到NOW()的实际值 - 7天等等 . 一个CASE语句就足够了 .
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#conditional-expressions
1 回答
如果需要处理任意表达式,请考虑将公式存储为Javascript表达式 . 然后,您可以使用JS UDF和eval()在查询执行时解析它们 .
不要忘记在它们周围放置一个try-catch(并返回NULL或某种错误记录) - 否则如果有人在某处输入无效表达式,则整个查询将失败 .
要在eval'd表达式和UDF包装器之间传递信息,您可以使用全局范围的变量 .
https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
如果您有一组有限的不同表达式,您也可以考虑制作一个表驱动的表达式解析器 . 这可能会将像LAST_WEEK这样的字符串映射到NOW()的实际值 - 7天等等 . 一个CASE语句就足够了 .
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#conditional-expressions