我知道Big Query中有一个AVG函数,并且有一些窗口函数可以向上或向下移动上一个或下一个值,但有没有任何函数可以让你在指定的时间间隔内进行平均?例如,我想要像下面这样的东西:
SELECT
city
AVG(temperature) OVER(PARTITION BY city, INTERVAL day,14, ORDER BY day) as rolling_avg_14_days,
AVG(temperature) OVER(PARTITION BY city, INTERVAL day,30, ORDER BY day) as rolling_avg_30_days,
WHERE
city IN ("Los Angeles","Chicago","Sun Prairie","Sunnyvale")
AND year BETWEEN 1900 AND 2013
Run Code Online (Sandbox Code Playgroud)
我想进行滚动平均计算,允许我指定一系列值来执行聚合函数,以及要按什么值排序.平均函数将采用当前温度和之前的13天(或之前的29天)来计算和平均.今天有可能吗?我知道如果我在SELECT语句中放入13个LAG/OVER字段然后平均所有这些字段的结果,我可以做这样的事情,但这是很多开销.
我想使用 SPLIT 函数对各种文本条目进行单词分析,在本例中是 git commit 注释。通常,单词由空格分隔,但我还想在分隔符列表中包含逗号、分号、冒号、句点、问号、感叹号、制表符、新行。本质上使用 REGEX 模式来指定分隔符,如果找到其中任何一个,则将其视为分隔符。
例如:
SELECT
split(commit_message, " ") as words,
FROM [project:dataset.table]
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
如果输入数据类似于:
"Commit message XYX: Hello. This is a test. This is a fun test! First, we'll run a test, then we'll check the results. A test is currently running."
Run Code Online (Sandbox Code Playgroud)
我希望如果我们对单词进行 GROUP BY 操作,单词“test”的计数将为 4,但使用上面的查询 test 只会计数一次。如果分隔符字段接受类似于下面的 REGEXP,那就太好了,但我认为这是不可用的,或者语法尚未发布。
SELECT
split(commit_message, "[\W]+") as words,
FROM [project:dataset.table]
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,如果检测到一个或多个非单词字符,这些字符都将被视为分隔符。如果这个功能不存在,是否可以考虑在未来进行改进?此时,我需要获取“单词”列中的结果并删除所有非单词字符以获得我想要的结果。(见下文)
SELECT
LOWER(REGEXP_EXTRACT(words, r'(\w+)')) as words
FROM
(
SELECT
split(commit_message, " ") as words,
FROM …Run Code Online (Sandbox Code Playgroud) 大约两年前,我还看过另一篇有关FORMAT_STRING的文章。我正在寻找类似的内容,因此,如果我有一个字符串,如123456789,我将能够对其进行格式化以包括适当的逗号,使其看起来像123,456,789。
在Google表格中,有一个TEXT函数可以启用多种格式。如果要在Google表格中执行此操作,则可以=TEXT("123456789", "#,##0")。是否有某个功能或计划具有一个功能来启用文本格式设置(例如Google表格TEXT功能中存在的功能)?在许多情况下,当我创建报表并需要将FLOAT或INTEGER数据格式化为字符串以便与其他字段连接时,这会派上用场,而在适当的地方仍保留逗号或百分比。