2017-11-30 21 views
1

BigQueryを初めて使用しているので、少し錆びます。BigQueryでTABLE_DATE_RANGE関数を使用する

私はここでfound here for Reddit data.

できる公開データセットを使用していますが、スナップショットです:

enter image description here

私が何をしようとしている2017年からすべてのデータを抽出し、クエリを作成することです

基本的には、標準SQLを使用して書かれたBQ構文に準ずるものを使用したいと思います。

fh-bigquery.reddit_posts.2017*

私はそれがTABLE_DATA_RANGE関数の使用に関係することを知っていますが、私はその特定の言い回しに困惑しています。

私はちょうど1テーブルのを使用していた場合、それは次のようになります。

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

は、BigQueryの標準SQL

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

ためのものですこれは、1つのテーブルのクエリが何を行います - しかし、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

私は意図的に '2017_'を' 201708_'と '201707_'がゼロ行の外れ値と信じています。 –

+0

@MikhailBerlyant ありがとうが、私はBQ固有の構文を探しています。私はすでにStandard SQLを知っています。 – RIPHarambe

関連する問題