С приходом на рынок мобильных приложений, размер установочного файла которых стал превышать 1 гигабайт, проблема ожидания загрузки встает наиболее остро. У Google есть решение. Вы, наверняка, сталкивались с ситуацией, когда хотели скачать мобильную игру, но вы уже представляли долгие часы ожидания - либо файл был огромным, либо скорость скачки была не очень. Приходилось ждать, ждать, ждать. Но Google нашла решение проблемы - виртуальная инкрементальная файловая система, которая позволит использовать приложение, даже пока оно скачивается...
🔍 ETL с помощью SQL: Инкрементальная загрузка 🔍 ✨ В отличие от полной перезагрузки (Full Reload), описанного в этом посте, инкрементальная загрузка перемещает только новые или обновленные данные. Это экономит ресурсы и время, особенно при работе с большими объемами данных. Давайте поговорим о ключевых этапах этого процесса: 1️⃣ Определение инкремента данных Инкремент - набор данных, которые нужно загрузить. Он может определяться как набор новых строк в источнике, так и набор строк с обновленными значениями. Для определения инкремента обычно используются поля со смыслом как "дата обновления записи", "дата создания записи" и др. с похожим смыслом, по которым можно сделать выборку нужного инкремента. Пример выделения инкремента из таблицы source по условию, что поле update_date имеет сегодняшнюю дату SELECT * FROM source s WHERE update_date = CURRENT_DATE() 2️⃣ Вставка инкремента в target таблицу Пример запроса может выглядеть так: INSERT INTO target SELECT * FROM source s WHERE update_date = CURRENT_DATE(); Здесь есть нюанс, что в таблицу target попадут все записи инкремента и останутся те, которые были уже в таблице например под одним и тем же id. Таким образом может собираться накопительная историческая таблица, например с продажами. К примеру в таблице target уже была запись по продаже с id = 5 и status = 'buy'. А в новом инкременте из source прилетит обновленная строка с id = 5 и status = 'cancelled'. Таким образом в target будет зафиксирована вся история обновления строк. Если в target таблице нужно оставить только актуальную версию данных без исторического состояния, такой способ я распишу в одном из следующих постов этой серии. Оставляйте реакции, если пост был полезен 😉