2012-11-01 12 views
11

BigQueryのテーブル内のデータを更新することはできず、追加メカニズムのみをサポートしているため、毎月新しいテーブルを作成することにしました。だから、2012年のテーブルは(tbl_012012tbl_022012tbl_032012、... tbl_122012)となります。各レコードは、文字列として日付timestampと共に保存されます。Big Queryで複数のテーブルをクエリする

2012年1月(tbl_012012)から2012年3月(tbl_032012)までのレコードをフェッチする場合、BigQuery APIは自動的に単一のSQL範囲クエリで目的のテーブルをトラバースするか、複数のSQLクエリを記述する必要があります追加のアプリケーションコードを使用して各クエリ結果を取得し、それらをまとめます。

答えて

12

1つのSQLクエリで複数のテーブルを参照できます。前述のすべてのテーブルを照会するには、各テーブルをFROM句のカンマで区切ります。ここで

+0

ありがとうございます。しかし、これはレンジクエリの場合に機能します。もし私のクエリが重複する可能性のある単一のレコードを検索すればどうでしょうか?したがって、このケースではBig Queryは明らかに毎月のテーブルをたどってレコードを見つけることになります。 –

+1

BigQueryは、単一のレコードを検索するクエリではなく、集約クエリ用に最適化されています。だから、残念なことに、残念なことに、このテーブルのいずれかにあるレコードを1つだけ探している場合は、毎月のテーブルを検索する必要があります。 –

+0

私を助けてくれてありがとう。 –

3

は、選択し、複数のテーブルの一例を実証抜粋です:

SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source 
FROM [608XXXXX.ga_sessions_20131008], 
[608XXXXX.ga_sessions_20131009], 
[608XXXXX.ga_sessions_20131010], 
[608XXXXX.ga_sessions_20131011], 
[608XXXXX.ga_sessions_20131012], 
[608XXXXX.ga_sessions_20131013], 
[608XXXXX.ga_sessions_20131014], 
[608XXXXX.ga_sessions_20131015], 
GROUP BY Traffic_Source 
ORDER BY Counts_Source DESC 
31

ます。また、表ワイルドカード機能を使用することができます。ここdocsから1つの例では、StandardSQLのためです:

SELECT 
    name 
FROM 
    mydata.people 
WHERE 
    age >= 35 
    AND 
    (_TABLE_SUFFIX BETWEEN '20140325' AND '20140327') 

そして、ここではLegacySQL(docs)のための同様の例です。

SELECT 
    name 
FROM 
    (TABLE_DATE_RANGE([mydata.people], 
       TIMESTAMP('2014-03-25'), 
       TIMESTAMP('2014-03-27'))) 
WHERE 
    age >= 35 

これは、テーブルを照会します:

  • mydata.people20140325
  • mydata.people20140326
  • mydata.people20140327

docsには、いくつかの他のオプションがあります。私はそれらをチェックアウトすることをお勧めします。

+0

月間のフォーム「201601」を照会することは可能ですか? –

1

2017更新:

BigQueryの#standardSQLで - あなたが複数のテーブルを通過する標準UNION ALLを使用するか、またはあなたが同じプレフィックスを共有するすべてのテーブルに一致するように*を使用することができます。 *マッチャーを使用している場合は、メタ列_TABLE_SUFFIXにアクセスすることもできます。これは、行がどのテーブルから来たのかを知るためです。

SELECT * FROM Roster 
UNION ALL 
SELECT * FROM TeamMascot 
関連する問題