хочу!
залил рандомные 500gb raw данных и вижу вот такое распределение по датам:
SELECT
year(data_time) AS year,
count(*) AS cnt
FROM r2
GROUP BY year
ORDER BY year ASC
┌─year─┬────────cnt─┐
│ 1900 │ 1717 │
│ 1970 │ 336 │
│ 1991 │ 10 │
│ 1993 │ 1 │
│ 1998 │ 1 │
│ 1999 │ 7 │
│ 2000 │ 56 │
│ 2001 │ 74706 │
│ 2002 │ 424137 │
│ 2003 │ 27645 │
│ 2004 │ 31 │
│ 2005 │ 62790 │
│ 2006 │ 65497 │
│ 2007 │ 20372 │
│ 2008 │ 507930 │
│ 2009 │ 1053681 │
│ 2010 │ 321839 │
│ 2011 │ 399510 │
│ 2012 │ 88383979 │
│ 2013 │ 189136342 │
│ 2014 │ 380106969 │
│ 2015 │ 607335989 │
│ 2016 │ 801748373 │
│ 2017 │ 1257747968 │
│ 2018 │ 1810193807 │
│ 2019 │ 2366066940 │
│ 2020 │ 3058931244 │
│ 2021 │ 3963027933 │
│ 2022 │ 2998302621 │
│ 2023 │ 15 │
│ 2026 │ 7 │
│ 2029 │ 16670 │
│ 2032 │ 20 │
│ 2045 │ 6 │
│ 2051 │ 81 │
│ 2059 │ 905 │
│ 2060 │ 156 │
│ 2061 │ 6220 │
│ 2062 │ 20918 │
│ 2063 │ 92 │
│ 2081 │ 9 │
│ 2102 │ 28 │
когда залью оставшиеся 200TB картина немного измениться, но все равно 99% данных равномерно размажется по 10и годам, остальное раскидает практически рандомно (сбитые чаcы на датчиках).
какой ключ партиционирования посоветуете чтобы запросы с предикатом по timestamp работали максимально быстро? при toYYYYMM еще на этапе заливки raw данных будет too many parts per insert, т.к. исходные данные в csv сортированы по device_id, data_item_id
хотелось бы toYYYYMM для диапазона 2000-2030 и toYYYY для всего остального, но как это сформулировать?
сделайте новую колонку, в которой либо настоящая дата, либо первое января, в зависимости от года, все данные года будут в январской партиции но и фильтровать в запросах надо будет по этой же колонке, а не по оригинальной
Обсуждают сегодня