BigQuery标准SQL似乎不允许句点“。”在select语句中。即使是简单的查询(见下文)似乎也失败了。对于字段名称包含“。”的数据集,这是一个大问题。有没有简单的方法来避免这个问题?
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
这取决于你想要完成什么。一种解释是你想要返回一个名为STRUCT
的time
,里面有一个名为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个字符。
Elliot的答案非常好,并解决了你问题的第一部分,所以让我解决它的第二部分(因为它完全不同)
首先,我想提一下像Bigzi 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中使用句号的问题
所以,上面的代码只能解释为你试图从center_x
STRUCT(可空记录)中消除detected_circle
字段。从技术上讲,这是有道理的,可以使用下面的代码完成
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
...仍然不清楚如何使用您的建议删除整个detected_circle。*
SELECT * EXCEPT(detected_circle)
FROM `bigquery-public-data.eclipse_megamovie.photos_v_0_2`
LIMIT 10