2017-11-30 1 views
1

저는 처음에는 BigQuery를 처음 사용하기 때문에 좀 녹슬 었습니다.BigQuery에서 TABLE_DATE_RANGE 함수 사용하기

enter image description here

가 난 할 노력하고있어 것은 2017에서 모든 데이터를 추출하는 쿼리를 만드는 것입니다 : 내가 여기 found here for Reddit data.

할 수있는 공개 데이터 세트를 사용하고

은 스냅 샷입니다 .

:

는 기본적으로, 표준 SQL을 사용하여 작성이의 BQ 구문 특정 상당을 사용하려면 0

fh-bigquery.reddit_posts.2017*

나는 그것이 TABLE_DATA_RANGE 함수를 사용하는 것을 포함하고 있지만 그것의 특정 표현에 난처한 생각이 들었다.

SELECT 
    FORMAT_UTC_USEC(SEC_TO_TIMESTAMP(created_utc)) AS created_date 
FROM 
[fh-bigquery:reddit_posts.2017_06] 
LIMIT 
10 

을하지만 분명이 여러 개월에 걸쳐 시도하고있다 :

난 그냥 하나의 테이블을 사용하는 경우, 그것은 다음과 같을 것이다. 다음은

+0

에 추천 'fh-bigquery.reddit_posts.2017 *'의 문제점은 무엇입니까? 표준 SQL을 사용하십시오 (레거시 SQL을 사용하는 TABLE_DATE_RANGE가 아님). –

+0

BQ 구문을 익숙하게 사용하고 싶습니다. – RIPHarambe

답변

0

#standardSQL 
SELECT 
    TIMESTAMP_SECONDS(created_utc) AS created_date 
FROM `fh-bigquery.reddit_posts.2017_*` 
LIMIT 10 

그것은 하나 개의 테이블에 대한 쿼리가 무엇을 수행 BigQuery에 표준 SQL

입니다 -하지만 2017에 대한 모든 테이블 (대한 확실하지 않은 것을 실제로 당신이 당신의 쿼리에서 찾고있는 논리 - 하지만 난 당신이 단지

주) 단순 위해 질문 외부로 왼쪽 희망 : 특정 행에서 오는 정확히 테이블 식별하기 위해 쿼리에서 _TABLE_SUFFIX을 사용할 수 있습니다 - 예를 들면 :

어떤 이유로 당신은 여전히 ​​BigQuery를 기존 SQL에 바인딩 된 경우
#standardSQL 
SELECT 
    _TABLE_SUFFIX AS month, 
    COUNT(1) AS records 
FROM `fh-bigquery.reddit_posts.2017_*` 
GROUP BY month 
ORDER BY month 
경우

month records  
----- --------- 
01  9,218,513 
02  8,588,120 
03  9,616,340 
04  9,211,051 
05  9,498,553 
06  9,597,725 
07  9,989,122 
08  10,424,133 
09  9,787,604 
10  10,281,718 

아래와 같이 출력

- 당신은

#legacySQL 
SELECT 
    FORMAT_UTC_USEC(SEC_TO_TIMESTAMP(created_utc)) AS created_date 
FROM TABLE_QUERY([fh-bigquery:reddit_posts], "LEFT(table_id, 5) = '2017_'") 
LIMIT 10 

이하로 사용할 수 있습니다 그러나 그것은 매우 migrate to Standard SQL

+0

'..2017 *'이 아니고 '..2017_ *'이 아닌 경우를 잡아야합니다. '201708_'? –

+0

'201708_'과'201707_'는 0 행이있는 이상치라고 생각하여 의도적으로'2017_'을 넣었습니다. –

+0

@MikhailBerlyant 고마워요,하지만 다시, 나는 BQ 특정 구문을 찾고 있어요. 나는 이미 Standard SQL을 알고있다. – RIPHarambe