В чем разница между dynamic.partition = True и dynamic.partition.mode = nonstrict? - PullRequest
0 голосов
/ 09 января 2019

Spark 2.0 - pyspark

Я видел следующие 2 свойства в паре. В чем разница между ними?

 hive> SET hive.exec.dynamic.partition=true;
 hive> SET hive.exec.dynamic.partition.mode=non-strict;

Я знаю, каков будет результат их использования - вы можете использовать динамическое разбиение для загрузки / создания нескольких разделов, но я не знаю разницы между этими двумя похожими командами.

Когда я запускал этот код

input_field_names=['id','code','num']
df \
.select(input_field_names) \
.write \
.mode('append')\
.insertInto('test_insert_into_partition')

Я получил сообщение об ошибке Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

Используя spark.sql("SET hive.exec.dynamic.partition.mode = nonstrict") код работает. Мне не нужно использовать другой.

Почему мне не нужно устанавливать SET hive.exec.dynamic.partition=true; и что еще я должен знать, чтобы выбрать, какой использовать.

1 Ответ

0 голосов
/ 09 января 2019

Несмотря на то, что есть много Google, вот короткий ответ.

Если вы хотите динамически вставить в разделы Hive, оба значения должны быть установлены, и вы можете загрузить много разделов за один раз:

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict

create table tblename (h string,m string,mv double,country string)partitioned by (starttime string) location '/.../...'

INSERT overwrite table tblename PARTITION(starttime) SELECT h,m,mv,country,starttime from tblename2

В противном случае вам нужно сделать это следующим образом, установив столбец раздела самостоятельно / explicity:

INSERT into table tblename PARTITION(starttime='2017-08-09') SELECT h,m,mv,country from tblname2 where to_date(starttime)='2017-08-09'

Цель значения по умолчанию «строгого» для hive.exec.dynamic.partition.mode существует, чтобы запретить пользователю случайно перезаписать все разделы, т. е. чтобы избежать потери данных.

Таким образом, здесь не ситуация различий, скорее ситуация осторожности, но как бы предохранитель на огнестрельном оружии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...