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

#sql #presto

Вопрос:

У меня есть таблица квадроключей, и я хочу найти самые короткие уникальные квадроключевые ключи, которые являются подстроками других (в частности, там, где другие значения начинаются с этих значений квадроключей), т. Е. Самые большие, содержащие плитки Bing. Как я могу это сделать? Моей первой мыслью было сгенерировать все возможные подстроки для уровней масштабирования, которые я использую, просто создав столбец для каждой длины и ища самые короткие уникальные подстроки, но я не уверен, как на самом деле выполнить сравнение. Рассмотрим следующий пример:

У меня есть стол, который выглядит так

квадрокоптер
121310
12131022
1213102
00321023
0032102

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

original_quadkey quadkey_6 quadkey_7 quadkey_8
121310 121310 нулевой нулевой
12131022 121310 1213102 12131022
1213102 121310 1213102 нулевой
00321023 003210 0032102 00321023
0032102 003210 0032102 нулевой

Я хочу сохранить самые короткие уникальные значения и отбросить строки с более длинными значениями original_quadkey, которые содержат эти «самые короткие уникальные значения» в качестве подстрок. В этом случае я бы хотел сохранить 121310 и 0032102, а остальные строки, начинающиеся с 121310 или 0032102, удалить. Как я могу запросить любую из этих таблиц для достижения этой цели? Мне придется сделать это для миллионов строк, так что это потенциально усложнит эту проблему.

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

1. Отредактируйте свой вопрос и покажите результаты, которые вы хотите.

Ответ №1:

Если я правильно понимаю, вы можете использовать коррелированный подзапрос:

 select t.*,
       (select t2.quadkey
        from t t2
        where t.quadkey like t2.quadkey || '%'
        order by t2.quadkey asc
        limit 1
       ) as shortest_quadkey
from t;
 

При большом объеме данных это привело бы к очень низкой производительности.