9

毎日の増分データを BigQuery テーブルに追加することを計画しています。増分データを既存のテーブルに追加するたびに、重複レコード (主キー列に基づく) をテーブル内の既存のデータから削除したいと考えています。1つのアプローチは-

  1. 増分データからキーのセットを収集します (これを と呼びましょうINCR_KEYS)
  2. - - の行でクエリを実行しSELECT all_cols from table where pkey_col NOT IN (INCR_KEYS)、結果を新しいテーブルに保存します。
  3. 増分データを新しいテーブルに追加します。

このアプローチに関する私の懸念は、大きなテーブルの複製コピーが作成され、請求書に追加されることです。

重複したテーブルを作成せずに同じことを達成するより良い方法はありますか?

4

3 に答える 3

5

重複するテーブルを作成せずにこれを行う方法がわかりません。これは実際にはかなり賢い解決策のように聞こえます。

ただし、増分コストは非常に小さい可能性があります。BigQueryは、データが存在する期間のデータに対してのみ請求します。古いテーブルを削除した場合は、両方のテーブルの料金を数秒または数分間支払うだけで済みます。

于 2012-09-10T15:13:08.173 に答える
1

宛先テーブルを既存のテーブルに設定してクエリを実行し、書き込み処理を切り捨てに設定できます。

bq query --allow_large_results --replace --destination_table=mydataset.mytable \
    'SELECT * FROM mydataset.mytable
     WHERE key NOT IN (SELECT key FROM mydataset.update)'
bq cp --append_table mydataset.update mydataset.mytable

これでうまくいくと思いますが、特にすぐに削除できるので、バックアップを取る価値があると思います。

bq cp mydataset.mytable mydataset.backup
# You can also build the new table in one pass:
bq query --allow_large_results --replace --destination_table=mydataset.mytable \
    'SELECT * FROM (
         SELECT * FROM mydataset.mytable
         WHERE key NOT IN (SELECT key FROM mydataset.update)
     ), (
         SELECT * FROM mydataset.update
     )'
bq rm mydataset.backup
于 2014-04-04T05:41:06.043 に答える
0

新しい宛先テーブルを設定し、カウントをクエリして、すべての列でグループ化できます。

SELECT
  FIELD1,
  FIELD2,
  FIELD3,
  FIELD4
FROM (
  SELECT
    COUNT (*),
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4
  FROM
    [<TABLE>]
  GROUP BY
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4)
于 2015-12-02T18:09:00.013 に答える