使用句号“。”在BigQuery中的标准SQL中

时间:2017-12-21 17:08:20

标签: google-bigquery

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

2 个答案:

答案 0 :(得分:3)

这取决于你想要完成的任务。一种解释是,您希望返回名为STRUCT的{​​{1}},其中包含一个名为time的字段。如果是这种情况,您可以使用ts运算符来构建结果:

STRUCT

在BigQuery用户界面中,它会将结果显示为SELECT id, STRUCT(time_ts AS ts) AS time FROM `bigquery-public-data.hacker_news.comments` LIMIT 10; id,后者表示time.ts位于名为ts的{​​{1}}内

BigQuery不允许结果中包含句点的列,因此如果运行以下查询,您将收到错误:

STRUCT
  

无效的字段名称" time.ts"。字段必须仅包含字母,数字和下划线,以字母或下划线开头,最多128个字符。

答案 1 :(得分:3)

Elliot的回答非常好,并解决了你问题的第一部分,所以让我解决它的第二部分(因为它完全不同)

   

首先,我想提一下,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中使用句号

的问题

因此,上述代码只能在您尝试从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