2015-03-13 3 views
1

Вы определили решение о нахождении площади в пределах ограничивающего прямоугольника/окружности с помощью перекрестного соединения, как показано ниже:Как я могу присоединиться к двум таблицам, используя интервалы в Google Big Query?

SELECT A.ID, C.Car 
FROM Cars C 
CROSS JOIN Areas A 
WHERE C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND 
    C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax 

по адресу: How to cross join in Big Query using intervals?

однако, с помощью перекрестного соединения для больших массивов данных, заблокированных Команда GBQ ops из-за ограничений на инфраструктуру.
Следовательно, мой вопрос: как я мог найти набор lat, longs в большой таблице данных (таблица A), которые находятся в пределах другого набора ограничивающих прямоугольников, small (таблица B)?

Мой запрос, как показано ниже был заблокирован:

select a.a1, a.a2 , a.mdl, b.name, count(1) count 
from TableMaster a 
CROSS JOIN places_locations b 
where (a.lat 
    BETWEEN b.bottom_right_lat AND b.top_left_lat) 
AND (a.long 
    BETWEEN b.top_left_long AND b.bottom_right_long) 
group by .... 

TableMaster составляет 538 ГБ с 6,658,716,712 строк (очищенную/абсолютного минимума) places_locations изменяется в зависимости от запроса около 5 до 100 Кб.

Я попытался адаптировать поддельный присоединиться на основе шаблона: How to improve performance of GeoIP query in BigQuery?

Однако запрос занимает час и не дает никаких результатов, ни отображается какая-либо ошибка.

Не могли бы вы определить возможный путь для решения этой головоломки?

+0

Есть ли у вас образец данных? Я специально интересуюсь областями мест_оценок, чтобы понять топологию проблемы. –

+0

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

ответ

1

ОКЕЙ так поддельные присоединиться ли работа в конце концов, решение:

` select a.B, a.C , count(1) count from (SELECT B, C, A, lat, long from [GB_Data.PlacesMasterA] WHERE not B 

равна нулю) а JOIN (SELECT top_left_lat, top_left_long, bottom_right_lat, bottom_right_long, A от [Places.placeABOXA]) б на аА = ЪА где (a.lat МЕЖДУ b.bottom_right_lat И b.top_left_lat) и (a.long МЕЖДУ b.top_left_long И b.bottom_right_long) группы каждого через В, с `

+0

, поэтому в таблицу a и b был добавлен поддельный столбец со строкой «a» –

2

проблема вы» я вижу, что кросс-соединение генерирует слишком много промежуточных значений (6 миллиардов x 1k = 6 триллионов).

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

Кроме того, для выполнения поиска вы можете сначала выполнить более грубый поиск. То есть, если вы могли бы выполнить начальное перекрестное соединение с меньшей таблицей с областями, выделенными курсом, то вы могли бы присоединиться к большей таблице идентификатора региона, а не выполнять перекрестное соединение.

+0

Привет, Джордан, спасибо вы для ответа, у меня все еще есть проблемы для выполнения этого запроса по GBQ, –

+0

Топология проблемы заключается в том, что мне нужно извлечь из больших идентификаторов и модели табличного устройства при условии, что их широта и долгота будут помещены в ограничительную рамку меньшая таблица.Таким образом, я смог выполнить его с помощью cross, тогда он был заблокирован Google из-за чрезмерного использования ресурсов, затем я обошел проблему с использованием поддельного соединения, теперь проблема в том, что когда меньшая таблица составляет> 1000 (приблизительная), тогда запрос выполняется в течение нескольких дней и не дает результатов. –

+0

Решение, над которым я сейчас работаю, состоит в том, чтобы разбить меньшую таблицу на меньшие таблицы с 1000 рядами каждый, и вот еще одна проблема. Я пытаюсь реализовать решение @FelipeHofa [http://stackoverflow.com/questions/11057219/row-number-in-bigquery?lq=1], но опять нет результатов, запрос продолжает работать в течение нескольких часов. –

 Смежные вопросы

  • Нет связанных вопросов^_^