18

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

さて、私のアプリケーションが 2012 年 1 月 ( tbl_012012) から 2012 年 3 月( ) までの範囲のレコードを取得したい場合、 tbl_032012BigQuery API は単一の SQL 範囲クエリを介して目的のテーブルを自動的にトラバースしますか、それとも追加のアプリケーション コードを取得するために複数の SQL クエリを作成する必要がありますか?各クエリの結果をまとめて集計しますか?

4

5 に答える 5

39

テーブル ワイルドカード関数を使用することもできます。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には他にもいくつかのオプションがあります。それらをチェックすることをお勧めします。

于 2015-02-19T06:10:22.410 に答える
15

1 つの SQL クエリで複数のテーブルを参照できます。FROM 句で各テーブルをコンマで区切るだけで、前述のすべてのテーブルに対してクエリを実行できます。

于 2012-11-01T06:15:29.213 に答える
5

複数のテーブル選択の例を示すスニペットを次に示します。

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
于 2013-11-28T18:03:31.187 に答える
3

2017 更新:

BigQuery #standardSQL では、standardUNION ALLを使用して複数のテーブルを処理するか、a を使用し*て同じプレフィックスを共有するすべてのテーブルに一致させることができます。マッチャーを使用すると、行がどのテーブルから来たかを知る*ために、メタ列にもアクセスできます。_TABLE_SUFFIX

SELECT * FROM Roster
UNION ALL
SELECT * FROM TeamMascot
于 2017-07-07T22:09:44.707 に答える