insert overwrite from spark正在更改配置单元表目录的权限和所有者

rmbxnbpk  于 2021-06-25  发布在  Hive
关注(0)|答案(0)|浏览(319)

我有一个简单的要求,读取一个HiveParquet表,并在应用逻辑后覆盖到同一个表中。
直线::

create external table test_table (id int,name string) stored as parquet location '/dev/test_db/test_table';
insert into test_scd values (1,'John'),(2,'Myna'),(3,'Rakesh');

Pypark公司

from pyspark.sql import SparkSession

spark = SparkSession.builder.enableHiveSupport().getOrCreate()
src_table=spark.sql("select * from test_db.test_table")

src_table.write.mode("overwrite").saveAsTable("test_db.temp_test_table")
tempDF=spark.sql("select * from test_db.temp_test_table")
spark.sql("insert overwrite table test_db.test_table select * from test_db.temp_test_table")

结果:
它会按预期覆盖表。但是它改变了表目录的权限。在本例中,它将“/dev/test\u db/test\u table”的权限从771更改为755。它还将组的所有者从hive:hive to 批量_user:hive.
因为它从组级别更改了权限,所以我无法从hive2服务器写入此表,可能是beeline或hue,也可能是任何第三方工具,如oracle odi。
有没有人面临过这样的问题。我很惊讶spark job为什么要更改目录权限。在大多数操作中,它不会更改权限,请将其保留为hive:hive. 但在覆盖的情况下,它是按照我的分析。我尝试过其他API,如“saveastable”和“insertinto”。在这两种情况下都是一样的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题