以下查询导致“无法识别的名称:bigquery at [8:8]”错误:
WITH longest_used_bike AS(
SELECT bike_id,SUM(duration_minutes) AS trip_duration
FROM bigquery-public-data.austin_bikeshare.bikeshare_trips
GROUP BY bike_id
ORDER BY trip_duration DESC
LIMIT 1
)
SELECT
bigquery-public-data.austin_bikeshare.bikeshare_trips.start_station_id,
COUNT(*) AS trip_ct
FROM bigquery-public-data.austin_bikeshare.bikeshare_trips
JOIN longest_used_bike
ON longest_used_bike.bike_id = bigquery-public-data.austin_bikeshare.bikeshare_trips.bike_id
GROUP BY start_station_id
ORDER BY trip_ct DESC
LIMIT 1
但是下面的查询在别名后有效:
WITH longest_used_bike AS (
SELECT bike_id,SUM(duration_minutes) AS trip_duration
FROM bigquery-public-data.austin_bikeshare.bikeshare_trips
GROUP BY bike_id
ORDER BY trip_duration DESC
LIMIT 1
)
SELECT
trips.start_station_id,
COUNT(*) AS trip_ct
FROM bigquery-public-data.austin_bikeshare.bikeshare_trips as trips
JOIN longest_used_bike as longest
ON longest.bike_id = trips.bike_id
GROUP BY start_station_id
ORDER BY trip_ct DESC
LIMIT 1
项目、数据集、列和表名称是“标识符”。标识符在不加引号时只能包含某些字符,否则必须用
`
来引用它们。
未加引号的标识符
- 必须以字母或下划线 (_) 字符开头。
- 后续字符可以是字母、数字或下划线 (_)。
引用标识符
- 必须用反引号 (`) 字符括起来。
- 可以包含任何字符,包括空格和符号。
- 不能为空。
- 具有与字符串文字相同的转义序列。
所以
bigquery-public-data.austin_bikeshare.bikeshare_trips
由于破折号必须被引用。
但是,BigQuery 对带有破折号的表名称进行了例外处理,但仅在 from 子句中。大概是因为 BigQuery 喜欢用破折号来命名项目。
如果在 FROM 或 TABLE 子句中引用表名,则作为不带引号的标识符的表名还可以包含单破折号。只有表路径中的第一个标识符(项目 ID 或表名称)可以包含破折号。数据集中不支持破折号。
所以
from bigquery-public-data.austin_bikeshare.bikeshare_trips
可以,但 select bigquery-public-data.austin_bikeshare.bikeshare_trips.start_station_id
则不行。
有关更多详细信息,请参阅 BigQuery 词法结构和语法。