提问人:Danylo Borges Naves 提问时间:9/11/2023 最后编辑:lemonDanylo Borges Naves 更新时间:9/12/2023 访问量:99
对于参数类型,运算符 >= 没有匹配的签名:“INT64”、“ARRAY<INT64>”
No matching signature for operator >= for argument types: `INT64`, `ARRAY<INT64>`
问:
我正在尝试生成一个间隔为 30 的数字序列,分别表示 30 分钟。
目前,我的查询如下所示:
WITH bins AS(
SELECT GENERATE_ARRAY(0,1470,30) AS low,
GENERATE_ARRAY(0,1500,30) AS top
), ride AS(
SELECT DATE_DIFF(ended_at,started_at,minute) as cicle
FROM `data-project-389314.Cyclist.july23_trip_filtered`
WHERE rideable_type != 'docked_bike'
)
SELECT low,
top,
cicle
FROM bins
LEFT JOIN ride
ON cicle >= low --Error line
AND cicle < top
GROUP BY low,
top
ORDER BY low
我一直得到的错误是:
对于参数类型,运算符 >= 没有匹配的签名:, .支持的签名:ANY >= ANY at [18:11]
INT64
ARRAY<INT64>
我尝试了其他代码,这使我认识到Bigquery不允许时间日期>= 24:00:00,但是我总是在同一变量上出现错误。
我感谢任何帮助。
答:
0赞
lemon
9/11/2023
#1
查询中存在以下几个错误:
- 您的函数将生成一个数组,而不是一个表。因此,当您尝试连接匹配值时,您实际上是在尝试将“cicle”的每个值与完整数组匹配。
GENERATE_ARRAY
- 在最后一个查询中,您使用的是子句,但未使用聚合函数。您可以使用 删除重复的记录,如果根据数据的性质有必要的话。或者,如果应该执行任何聚合函数,请确保聚合“cicle”或将其添加到子句中,以避免细微的错误。
GROUP BY
DISTINCT
GROUP BY
要修复这些错误,您可以:
- 更改第一个 CTE,通过交叉连接函数输出的应用程序,将数组解压缩为表格值
UNNEST
GENERATE_ARRAY
- 在子句中添加“cicle”列,以反映 cicle 分区。
GROUP BY
次要可选修复:
- 使用子句中的两个条件代替
BETWEEN ... AND ...
WHERE
- 将名称“top”更改为“high”(相对于“low”看起来更合适)
WITH bins AS(
SELECT *
FROM UNNEST(GENERATE_ARRAY(0,1470,30)) AS low,
UNNEST(GENERATE_ARRAY(0,1500,30)) AS high
), ride AS(
SELECT DATE_DIFF(ended_at,started_at,minute) as cicle
FROM `data-project-389314.Cyclist.july23_trip_filtered`
WHERE rideable_type != 'docked_bike'
)
SELECT DISTINCT low,
high,
cicle
FROM bins
LEFT JOIN ride
ON cicle BETWEEN low AND high
ORDER BY low
评论
0赞
Danylo Borges Naves
9/12/2023
WITH bins AS( SELECT * FROM UNNEST(GENERATE_ARRAY(0,1470,30)) AS low, UNNEST(GENERATE_ARRAY(0,1500,30)) AS high ), RIDE AS( SELECT COUNT(rides_lenght) AS CICLE FROM WHERE rideable_type != 'docked_bike' ) SELECT low, high, cicle FROM bins LEFT JOIN RIDE ON cicle BETWEEN LOW AND HIGH GROUP BY low, high ORDER BY lowdata-project-389314.Cyclist.july23_trip_filtered
评论