100万行以上のデータと20列以上のテーブルがあります。
テーブル(tableX)内で、特定の1つの列(troubleColumn)で重複レコード(〜80k)を識別しました。
可能であれば、元のテーブル名を保持し、問題のある列から重複レコードを削除します。そうしないと、同じスキーマで重複のない新しいテーブル(tableXfinal)を作成できます。
私はSQLやその他のプログラミング言語に不慣れなので、無知を許してください。
delete from Accidents.CleanedFilledCombined
where Fixed_Accident_Index
in(select Fixed_Accident_Index from Accidents.CleanedFilledCombined
group by Fixed_Accident_Index
having count(Fixed_Accident_Index) >1);
テーブルを書き換えるクエリを実行して、重複を削除できます(宛先と同じテーブルを使用するか、新しいテーブルを作成し、必要なものがあることを確認してから、古いテーブルにコピーします)。
動作するはずのクエリは次のとおりです。
SELECT *
FROM (
SELECT
*,
ROW_NUMBER()
OVER (PARTITION BY Fixed_Accident_Index)
row_number
FROM Accidents.CleanedFilledCombined
)
WHERE row_number = 1
UPDATE 2019:MERGE
を使用して単一パーティションの行の重複を排除するには、以下を参照してください。
ジョーダンの答えに代わるもの-これはあまりにも多くの複製を持っているときにスケーリングします:
#standardSQL
SELECT event.* FROM (
SELECT ARRAY_AGG(
t ORDER BY t.created_at DESC LIMIT 1
)[OFFSET(0)] event
FROM `githubarchive.month.201706` t
# GROUP BY the id you are de-duplicating by
GROUP BY actor.id
)
または、より短いバージョン(最新のものではなく、任意の行を使用):
SELECT k.*
FROM (
SELECT ARRAY_AGG(x LIMIT 1)[OFFSET(0)] k
FROM `fh-bigquery.reddit_comments.2017_01` x
GROUP BY id
)
既存のテーブルの行を重複排除するには:
CREATE OR REPLACE TABLE `deleting.deduplicating_table`
AS
# SELECT id FROM UNNEST([1,1,1,2,2]) id
SELECT k.*
FROM (
SELECT ARRAY_AGG(row LIMIT 1)[OFFSET(0)] k
FROM `deleting.deduplicating_table` row
GROUP BY id
)
誰もDISTINCTクエリに言及していない理由がわかりません。
重複する行を削除する方法は次のとおりです。
CREATE OR REPLACE TABLE project.dataset.table
AS
SELECT DISTINCT * FROM project.dataset.table
スキーマにレコードがない場合-ジョーダンの回答のvariation
以下は、同じテーブルまたは新しいテーブルに書き込むなどで十分に機能します。
SELECT <list of original fields>
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Fixed_Accident_Index) AS pos,
FROM Accidents.CleanedFilledCombined
)
WHERE pos = 1
より一般的な場合-レコード/ネット化フィールドなどの複雑なスキーマを使用する場合-上記のアプローチは課題になる可能性があります。
Tabledata:insertAll APIを rows []。insertId 各行のそれぞれのFixed_Accident_Indexに設定して使用することをお勧めします。この場合、重複した行はBigQueryによって削除されます
もちろん、これにはクライアント側のコーディングが含まれるので、この特定の質問には関係ないかもしれません。私はこのアプローチを自分で試したことはありませんが、試してみると面白いかもしれません:o)