Spark 2.0-pyspark
我看到以下两个属性配对。它们之间有什么区别?
{ "state" : "created", "_id" : 6 }
{ "state" : "changed", "_id" : 5 }
{ "state" : "deleted", "_id" : 3 }
我知道使用它们时的结果是什么-您可以使用动态分区来加载/创建多个分区,但是我不知道这两个类似命令之间的区别。
当我运行这段代码时
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")
以及选择使用哪个我还要知道些什么。
答案 0 :(得分:1)
尽管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
否则,您需要这样做,自己/明确设置分区的值:
INSERT into table tblename PARTITION(starttime='2017-08-09') SELECT h,m,mv,country from tblname2 where to_date(starttime)='2017-08-09'
默认值'strict'的用途 hive.exec.dynamic.partition.mode 可以防止用户 意外覆盖所有分区,即避免数据丢失。
因此,没有区别的情况,而是谨慎的情况,但是就像枪支上的安全钩一样。