Выбрать все столбцы, кроме одного столбца в BigQuery - PullRequest
0 голосов
/ 26 октября 2018

Я хочу исключить счетчик для удаления дубликатов в запросе ниже

SELECT *, count(1) as count except (count)
  FROM PRD.sites  
  group by site,id ,site_desc,timestamp
  having count(1) < 2

но получено сообщение об ошибке Неожиданное ключевое слово, КРОМЕ в [1:29]. Я использую standardSQL

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Вы можете попробовать с временной таблицей

/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
0 голосов
/ 26 октября 2018

Вам даже не нужно включать COUNT () в список SELECT - ниже будет отлично работать и удалит дубликаты строк на основе перечисленных полей

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM PRD.sites t 
group by site,id ,site_desc,timestamp
having count(1) < 2

Выше будут отображаться только строки, которые не имеют дублирования(на основе полей в группе по)

Если вам скорее нужно удалить дублирование на основе полей - используйте ниже

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM PRD.sites t 
group by site,id ,site_desc,timestamp

Если вам нужно выполнить дедупликацию на основе всей строки - вы можетеиспользуйте ниже

SELECT DISTINCT *
FROM PRD.sites
0 голосов
/ 26 октября 2018

Вы можете попробовать ниже

select * except(count)
from
(
  SELECT *, count(1) as count 
  FROM PRD.sites  
  group by site,id ,site_desc,timestamp
  having count(1) < 2
)X

ИЛИ Вы можете использовать row_number () для поиска дубликатов

SELECT * except(rn)
FROM (
  SELECT
      *,
      ROW_NUMBER()
          OVER (PARTITION BY site,id ,site_desc,timestamp) as rn
  FROM FROM PRD.sites
)
WHERE rn= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...