这个,为什么只有在别名之后才起作用?

问题描述 投票:0回答:1

以下查询导致“无法识别的名称: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
sql google-bigquery syntax-error alias
1个回答
0
投票

项目、数据集、列和表名称是“标识符”。标识符在不加引号时只能包含某些字符,否则必须用

`
来引用它们。

未加引号的标识符

  • 必须以字母或下划线 (_) 字符开头。
  • 后续字符可以是字母、数字或下划线 (_)。

引用标识符

  • 必须用反引号 (`) 字符括起来。
  • 可以包含任何字符,包括空格和符号。
  • 不能为空。
  • 具有与字符串文字相同的转义序列。

所以

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 词法结构和语法

© www.soinside.com 2019 - 2024. All rights reserved.