7

Bigquery の結合機能を改善するための作業が行われていることは知っていますが、ここで暴言を吐くわけではありませんが、結合を適切に使用できない場合、「テラバイト」セットのデータを「広告」として分析することは困難です。

OK、問題に戻ります。1 つは 600 MB で、もう 1 つは 50 MB の 2 つのテーブルがあります。結合を試みたところ、小さいテーブルを残す必要があるというエラーが表示されました。いくつかの調査を行ったところBigquery、7MBを超える場合、両方のテーブルが大きいと見なされることがわかりましたか?

そこで、オンラインで見つけたいくつかのアドバイスに基づいて、問題の小さいテーブルのデータセットを選択し、それを新しいテーブルに保存しました。新しいデータ セットは 2 列で 12MB と 600K 行です。次に、クエリをもう一度試しましたが、まだ同じエラーが発生しています。

Query Failed : Error: Large table cdrs_test.geoIP_Left must appear as the leftmost table in a join query

geoIP_Left は 12 Megs、他のテーブルは 600 Megs です。

これはどういうわけか修正できますか、それとも私は逮捕されていますか? もしそうなら、結合をサポートする大きなデータセットを分析するために使用できる他のサービスについて知っている人はいますか?

編集: これは実際のクエリです。

SELECT COUNT(results.cc_card) AS count,
       sum(results.sessiontime) AS time, 
       geoIP_Left.place AS place 
FROM cdrs_test.cdrs_2010_5 AS results 
JOIN cdrs_test.geoIP_Left AS geoIP_table 
  ON results.cc_card = geoIP_table.vcard 
WHERE results.sessiontime > 0 AND results.countryName Contains 'India' 
GROUP BY place;
4

2 に答える 2

10

このクエリを、関心のある列のみを参照するサブセレクトとして表現できます。ここでcdrs_test.geoIP_Left2 番目の例を参照してください。

SELECT
  COUNT(results.cc_card) AS count,
  sum(results.sessiontime) AS time, 
  geoIP_table.place AS place 
FROM
  cdrs_test.cdrs_2010_5 AS results 
JOIN
  (SELECT place, vcard FROM cdrs_test.geoIP_Left)
AS
  geoIP_table 
ON
  results.cc_card = geoIP_table.vcard 
WHERE
  results.sessiontime > 0 AND results.countryName CONTAINS 'India' 
GROUP BY
  place;

単純に複数のクエリを実行することもできます。クエリ結果を名前付きテーブルとして明示的に保存し、そのテーブルを後のクエリで使用できることに注意してください。

最後に、MapReduce 変換パイプラインや、BigQuery ETL パートナーのいずれかが提供するETL ツールなどを使用して、データを事前に結合することもできます。

于 2012-11-20T19:07:10.763 に答える