2012-10-17 63 views
2

我需要每週顯示不同的用戶。我有一個日期訪問列和一個用戶ID,它是一個有10億行的大表。 我可以將CSV的日期列更改爲年,月,日的列。但是如何從查詢中推斷出這一週。 我可以從CSV中計算一週,但這是一個很大的流程步驟。在bigquery中使用周和年數

我還需要顯示有多少不同用戶日復一日地訪問,尋找解決方法,因爲沒有日期類型。

有什麼想法?

回答

2

如果您將日期作爲時間戳記(即自紀元開始的微秒數),則可以使用UTC_USEC_TO_DAY/UTC_USEC_TO_WEEK函數。或者,如果您有一個iso格式的日期字符串(例如「2012/03/13 19:00:06 -0700」),則可以調用PARSE_UTC_USEC將該字符串轉換爲時間戳,然後使用它獲取周或日。

要查看示例,請嘗試:

SELECT LEFT((format_utc_usec(day)),10) as day, cnt 
FROM (
    SELECT day, count(*) as cnt 
    FROM (
     SELECT UTC_USEC_TO_DAY(PARSE_UTC_USEC(created_at)) as day 
     FROM [publicdata:samples.github_timeline]) 
    GROUP BY day 
    ORDER BY cnt DESC) 

要顯示星期,只是改變UTC_USEC_TO_DAY(...)UTC_USEC_TO_WEEK(..., 0)(0末是指示一週開始於星期日)。有關更多信息,請參閱https://developers.google.com/bigquery/docs/query-reference上述功能的文檔。

+0

感謝了很多,唯一的一點是對大數據集上的查詢,業績,其中太慢比較還加入了「周」列源(通過改變大CSV)和加載到bigquery。 – user1516770

+0

要獲得年份的編號:SELECT STRFTIME_UTC_USEC(NOW(),「%W」); (另見答案) –

7

要獲得的年數星期:

SELECT STRFTIME_UTC_USEC(TIMESTAMP('2015-5-19'), '%W') 
20