BigQuery — Как я могу заставить оператор слияния обрабатывать повторяющиеся строки?

#sql #google-bigquery

#sql #google-bigquery

Вопрос:

В настоящее время у меня есть таблица, которая использует составные столбцы для уникальной идентификации каждой строки данных.. Таким образом, мы получаем повторяющиеся строки. У меня есть оператор слияния, который копирует данные из исходной таблицы в целевую. В любое время у нас есть повторяющиеся строки в исходной таблице. Оператор слияния копирует дубликат вместе с другими строками данных в пункт назначения. Оператор слияния

         MERGE `project.dataset.destination` T
        USING `project.dataset.source` S
        ON  (T.department = S.department OR T.department IS NULL and S.department IS NULL) AND
            (T.category = S.category OR T.category IS NULL AND S.category IS NULL) AND
            (T.subcategory = S.subcategory OR T.subcategory IS NULL AND S.subcategory IS NULL) AND
            (T.subset = S.subset OR T.subset IS NULL AND S.subset IS NULL) AND
            (T.country = S.country OR T.country IS NULL AND S.country IS NULL) AND
            (T.state = S.state OR T.state IS NULL AND S.state IS NULL) AND
            (T.county = S.county OR T.county IS NULL AND S.country IS NULL) AND
            (T.date = S.date OR T.date IS NULL AND S.date IS NULL)
        WHEN NOT MATCHED AND ((department = "SPORT" AND subcategory IN ("FOOTBALL", "PONG")) AND 
                     (country IN("USA", "CANADA") )) THEN 
            INSERT ROW
        WHEN NOT MATCHED BY SOURCE THEN
            DELETE
 

Мой вопрос в том, могу ли я каким-либо образом обработать вставку дубликатов в целевую таблицу?
Или, если строки дубликатов вставляются в пункт назначения. когда этот оператор слияния выполняется на следующий день; могу ли я в любом случае изменить этот оператор слияния, чтобы удалить любой дубликат, найденный в таблице назначения?

Заранее спасибо

Комментарии:

1. что такое дубликат? Я имею в виду, что определяет дублирование в вашем сценарии?

2. Вы пытаетесь заменить строку в таблице новым значением?

3. Дубликат @eshirvana означает, что одна и та же строка данных отображается более чем в одной исходной таблице… не является уникальным

4. @GordonLinoff я пытаюсь вставить данные из источника в пункт назначения.. но я не хочу дублировать данные

5. Почему бы вам не запланировать дополнительный BQ-SQL для обработки повторяющихся записей в соответствии с вашими требованиями.

Ответ №1:

Общие рекомендации для хорошего вопроса SQL: предоставьте пример исходной таблицы и таблицы dest, а затем ожидаемые результаты.

Тем не менее, основываясь на комментариях, «дублировать» здесь означает:

если в исходной таблице одна и та же строка данных отображается более одной

Дедупликация исходной таблицы может произойти в подзапросе, например

         MERGE `project.dataset.destination` T
        USING (
          SELECT ... 
          FROM `project.dataset.source` 
          GROUP BY <your_unique_key>
          ) S
        ON ...