BigQuery Standard SQL似乎不允许使用"。在选择语句中。即使是一个简单的查询(见下文)似乎都失败了。对于包含"字段名称的数据集,这是一个大问题。有一种简单的方法可以避免此问题吗?
select id, time_ts as time.ts
from `bigquery-public-data.hacker_news.comments`
LIMIT 10
返回错误... Error: Syntax error: Unexpected "." at [1:27]
这也失败了...
select * except(detected_circle.center_x )
from [bigquery-public-data:eclipse_megamovie.photos_v_0_2]
LIMIT 10
这取决于您要完成的工作。一种解释是您要返回一个名为time
的STRUCT
,其中一个名为ts
的字段在其中。如果是这样,您可以使用STRUCT
操作员来构建结果:
SELECT
id,
STRUCT(time_ts AS ts) AS time
FROM `bigquery-public-data.hacker_news.comments`
LIMIT 10;
在BigQuery UI中,它将显示结果为id
和time.ts
,其中后者表明ts
在STRUCT
中,名为time
。
BigQuery在其名称包含期间的结果中删除列,因此,如果您运行以下查询,您将出现错误:
SELECT
id,
time_ts AS `time.ts`
FROM `bigquery-public-data.hacker_news.comments`
LIMIT 10;
无效的字段名称" time.ts"。字段必须仅包含字母,数字和下划线,从字母或下划线开始,最多为128个字符。
艾略特的答案很棒,并解决了您的问题的第一部分,所以让我解决第二部分(因为它完全不同)
首先,想提到BigQuery Standard SQL(而不是
)支持SELECT * EXCEPT
这样的选择修饰符 SELECT * EXCEPT(detected_circle.center_x )
FROM [bigquery-public-data:eclipse_megamovie.photos_v_0_2]
LIMIT 10
您应该尝试
#standardSQL
SELECT * EXCEPT(detected_circle.center_x )
FROM `bigquery-public-data.eclipse_megamovie.photos_v_0_2`
LIMIT 10
当然,现在我们回到标准SQL中的使用期限
中发行因此,仅当您尝试从detected_circle
struct(无效记录)中消除center_x
字段时,才能解释上述代码。从技术上讲,这是有道理的,可以使用以下代码
SELECT *
REPLACE(STRUCT(detected_circle.radius, detected_circle.center_y ) AS detected_circle)
FROM `bigquery-public-data.eclipse_megamovie.photos_v_0_2`
LIMIT 10
...我仍然不清楚如何使用您的建议删除整个检测到的_circle。*
SELECT * EXCEPT(detected_circle)
FROM `bigquery-public-data.eclipse_megamovie.photos_v_0_2`
LIMIT 10