Static vs Dynamic Partitioning

В Hive есть два вида партицирования: статическое и динамическое

Сначала я столкнулась с ошибкой:

Exception in thread "main" org.apache.spark.SparkException: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

Давайте разберем на примерах

У нас есть таблица, которая партицирована по двум полям:

`CREATE TABLE sales_data (...) PARTITIONED BY (date STRING, country STRING);

Теперь пойдем вставлять данные

🤩Статическое

`INSERT INTO sales_data PARTITION (date=’2024–03–23', country=’USA’) VALUES (...);

Здесь мы заранее говорим, в какую партицию будем вставлять кусок данных

🤩 Динамическое

`INSERT INTO sales_data PARTITION (date, country) VALUES (..., ‘2024–03–23’, ‘USA’);

Здесь Hive сам определяет по данным, которые мы вставляем

Но чтобы такое сработало, нужны 2 конфига:

`.config("hive.exec.dynamic.partition", "true") .config("hive.exec.dynamic.partition.mode", "nonstrict")

По дефолту стоят false и strict. strict означает, что должна существовать хотя бы одна статическая партиция (о чем и была ошибка)````