Ошибка в большом запросе с подстановочным знаком при выполнении операции агрегации SUM - PullRequest
2 голосов
/ 19 апреля 2019

Я пытаюсь выполнить агрегацию SUM , используя большой запрос Google для некоторых данных. Я пытаюсь использовать шаблон для запроса по нескольким таблицам. Формат подстановочный знак работает для столбцов некоторых типов данных, например INTEGER , но не удается для других, например. FLOAT . Ниже приводится представление запросов, которые я пытаюсь выполнить

[Обновить] кажется, что это не удается для trip_distance (FLOAT) на данный момент. тот же запрос отлично работает для другого столбца passenger_count (INTEGER)

НЕИСПРАВНОСТЬ: формат подстановки для FLOAT (trip_distance)

запрос для одной таблицы:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')

запрос для нескольких таблиц:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')

Приведенные выше запросы выдают ошибку, как показано ниже

ОШИБКА: невозможно прочитать поле 'trip_distance' типа FLOAT64 как NUMERIC

enter image description here

Я не уверен, почему ошибка ВЫШЕ, так как следующие запросы работают хочу избежать не подстановочного знака, так как он станет огромным как единое целое хочет запросить больше таблиц).

УСПЕШНО: формат подстановочного знака для индекса passenger_ (INTEGER)

запрос для одной таблицы:

select sum(passenger_count)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')

запрос для нескольких таблиц:

select sum(passenger_count)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')

УСПЕШНО: нормальный синтаксис без подстановочных знаков

запрос для одной таблицы

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`

запрос для нескольких таблиц:

select sum(trip_distance)
from 
(
  select trip_distance
  from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`
  UNION ALL
  select trip_distance
  from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2015`
)

Может кто-нибудь посоветовать, что мне не хватает, когда я использую подстановочный знак . Я предпочитаю ответ, который использует стандартный формат sql .

1 Ответ

3 голосов
/ 19 апреля 2019

Это слишком долго для комментария.

Когда я пытаюсь выполнить этот простой запрос:

select trip_distance
from `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')
limit 100

Я получаю ошибку:

Ошибка запроса

Ошибка: невозможно прочитать поле 'trip_distance' типа FLOAT64 как NUMERIC

Я не видел эту ошибку раньше. На панели предварительного просмотра данные выглядят нормально. Я могу только предположить, что что-то запуталось в базовых данных. В 2014 году (при условии, что данные были загружены в этот период), тип данных не мог быть NUMERIC - поэтому я не знаю, откуда взялся NUMERIC.

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

Я думаю, что данные повреждены. Я не уверен, с кем связаться в Google, но это должно быть исправлено или удалено.

EDIT:

Я понял. Данные NUMERIC в самой последней версии таблицы (2018). Проблема в синтаксисе *. Это использует самое последнее определение таблицы, и существует несовместимость типов. (Это может сделать преобразование, но это не так.

Я думаю, что вы выяснили, как запрашивать каждую таблицу независимо, чтобы вы могли обойти эту проблему.

Если это проблема, потому что вам нужно смешивать данные за разные годы, то вы можете создать представление, которое выполняет необходимые преобразования (хотя использование представления может увеличить стоимость ваших запросов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...