문제
저는 Google의 BigQuery를 처음 접했습니다.
타임스탬프를 구문 분석하고 싶습니다(yyyy/mm/dd:hh:mm:ss
) 일과 월을 기준으로 일을 주로 분류하고자 합니다.이 작업을 수행하는 BigQuery 함수를 찾지 못했습니다.
그래서 글을 쓸 수 있는 방법이 있는지 궁금합니다. UDF
그런 다음 BigQuery 쿼리에서 액세스합니다.
해결책
여기에는 두 가지 질문이 있으므로 두 가지 답변이 있습니다.
BigQuery 하다 UDF를 지원합니다: 문서.(처음 답변했을 때는 그렇지 않았습니다.)
UDF가 없어도 날짜 버킷팅은 여전히 가능합니다.BigQuery에는 일회성 파싱 기능이 있습니다.
PARSE_UTC_USEC
, 이는 다음 형식의 입력을 기대합니다.YYYY-MM-DD hh:mm:ss
.당신은 사용해야합니다REGEXP_REPLACE
날짜를 올바른 형식으로 얻으려면.일단 그 일을 하고 나면,UTC_USEC_TO_WEEK
몇 주로 나누어서 그룹화할 수 있습니다.따라서 모든 것을 하나로 묶어 테이블에 다음과 같은 열이 있는 경우timestamp
, 다음과 같은 방법을 통해 주별 집계를 얻을 수 있습니다.SELECT week, COUNT(week) FROM (SELECT UTC_USEC_TO_WEEK( PARSE_UTC_USEC( REGEXP_REPLACE( timestamp, r"(\d{4})/(\d{2})/(\d{2}):(\d{2}):(\d{2}):(\d{2})", r"\1-\2-\3 \4:\5:\6")), 0) AS week FROM mytable) GROUP BY week;
참고
0
여기에 "시작"으로 사용할 요일에 대한 논쟁이 있습니다.저는 일요일을 사용했지만 "비즈니스" 용도로는 일요일을 사용했습니다.1
(즉.월요일)이 더 의미가 있을 것 같습니다.
꼭 필요한 경우를 대비해, 타임스탬프 함수 섹션 문서에 도움이 됩니다.
다른 팁
BigQuery의 UDF 지원은 이제 여기 있습니다! https://cloud.google.com/bigquery/user-defined-functions
문자열 타임 지정자를 JavaScript Date 객체로 변환하고 일부의 속성을 추출하는 몇 가지 코드가 있습니다. https://developer.mozilla.org/en-US / Docs / Web / JavaScript / Reference / Global_Objects / date js 날짜에 사용할 수있는 속성에 대한 정보는
쿼리 (중첩 된 선택을 테이블로 바꾸기) :
SELECT day_of_week, month_date
FROM parseDate(select '2015/08/01 12:00:00' as date_string);
.
코드 :
function parsedate(row, emit) {
var d = new Date(row.date_string);
emit({day_of_week: d.getDay(),
month_date: d.getDate()});
}
bigquery.defineFunction(
'parseDate', // Name of the function exported to SQL
['date_string'], // Names of input columns
[{'name': 'day_of_week', 'type': 'integer'},
{'name': 'month_date', 'type': 'integer'}],
parsedate
);
.