У меня большая таблица фактов, примерно 500M строк в день. Таблица разделена на region_date.Оптимизация большого стола Присоединиться к PySpark
Я должен ежедневно сканировать через 6 месяцев данных, оставлять внешние соединения с другим меньшим подмножеством (строки 1M) на основе идентификатора столбца id & и вычислять два суммарных значения: sum (факт), если id существует в правой таблице & сумма (факт)
Мой SparkSQL выглядит следующим образом:
SELECT
a.region_date,
SUM(case
when t4.id is null then 0
else a.duration_secs
end) matching_duration_secs
SUM(a.duration_secs) total_duration_secs
FROM fact_table a LEFT OUTER JOIN id_lookup t4
ON a.id = t4.id
and a.region_date = t4.region_date
WHERE a.region_date >= CAST(date_format(DATE_ADD(CURRENT_DATE,-180), 'yyyyMMdd') AS BIGINT)
AND a.is_test = 0
AND a.desc = 'VIDEO'
GROUP BY a.region_date
Что является лучшим способом для оптимизации и распределения/разделения данных? Запрос выполняется более 3 часов. Я попробовал spark.sql.shuffle.partitions = 700
Если я скатываю ежедневные данные на уровне «id», это около 5 миллионов строк в день. Должен ли я сначала сверлить данные, а затем выполнить соединение?
Thanks,
Ram.
Вы можете включить план выполнения? –