2017-12-21 19 views
4

BigQuery Standard SQL이 마침표를 허용하지 않는 것 같습니다. " select 문에서. 간단한 쿼리 (아래 참조)조차도 실패한 것 같습니다. 이것은 "."을 포함하는 필드 이름을 가진 데이터 세트의 경우 큰 문제입니다. 이 문제를 피할 수있는 쉬운 방법이 있습니까?마침표 사용 중 "." BigQuery의 표준 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

+0

테이블 이름을 완성한 것처럼 필드를 인용하면 어떻게됩니까? – Nick

답변

3

그것은 당신이 달성 하려는지에 따라 달라집니다. 한 해석은 time이라는 STRUCT을 반환하고 그 안에 ts이라는 단일 필드를 반환하려는 것입니다. 그것은 후자는 tstime라는 STRUCT 내부에 있음을 나타냅니다 idtime.ts로 결과를 표시 것이라고 BigQuery의 UI에서

SELECT 
    id, 
    STRUCT(time_ts AS ts) AS time 
FROM `bigquery-public-data.hacker_news.comments` 
LIMIT 10; 

: 그런 경우에는, 당신은 결과를 구축하기 위해 STRUCT 연산자를 사용할 수 있습니다 .

BigQuery에이 이름이 기간을 포함 결과에 열을 허용하지 않습니다, 그래서 당신은 다음과 같은 쿼리를 실행할 경우 오류가 발생합니다 :

SELECT 
    id, 
    time_ts AS `time.ts` 
FROM `bigquery-public-data.hacker_news.comments` 
LIMIT 10; 

잘못된 필드 이름 "time.ts". 입력란에는 문자, 숫자 및 밑줄 만 포함하고 문자 또는 밑줄로 시작해야하며 길이는 최대 128 자 여야합니다. SELECT * EXCEPT이 지원됩니다 같은

3

엘리엇의 대답은 위대하고 귀하의 질문의 첫 번째 부분을 해결하므로 (이 상당히 다르다으로) 나

먼저 그것의 두 번째 부분을 해결하자, 그 선택 수정을 언급하고 싶었다 BigQuery에 표준 SQL에 대한 그래서, 대신

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 
0을 시도한다

와 물론 지금 우리는 당신이 detected_circle STRUCT (널 (NULL) 기록)에서 center_x 필드를 제거하려고으로`만 해석 할 수있는 코드 위

그래서 표준 SQL에 시간을 사용하여 다시 문제에 있습니다. 기술적으로 말하면,이 의미가 코드 여전히

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 
+0

감사합니다. 좋은 답변이지만, 전체'detected_circle을 제거하기 위해 당신의 추천을 사용하는 방법을 아직 명확하게 밝히지 않았습니다.* '오류 아래 '' 선택 * (detected_circle AS)) 반경 (단 * (AS STRUCT detected_circle를 선택한다.)에서 교체 ( 선택 제외 * * ((AS STRUCT detected_circle를 선택한다. REPLACE (center_y))를 반환) detected_circle AS로부터 ( 가 선택 REPLACE * ((AS STRUCT detected_circle를 선택한다. * EXCEPT (center_x)) detected_circle AS) '으로부터의 BigQuery -공개 data.eclipse_megamovie.photos_v_0_2' ) ) '' –

+1

@YerachmielElimelechWeiss - 답변에 추가보기 –