外语教学网站开发/sem和seo哪个工作好
背景
今天用spark sql运行一个insert into 一张分区表table的语句,发现运行完之后hdfs路径没有体现出来分区的特点,而是显示像这样:
hdfs:/xxx/part-02000-ed511ebe-b44e-4531-ae6d-18a170b30451-c000.snappy.parquet
而如果用hive sql插入分区表的话,其路径是这样的:
hdfs:/xxx/dt=20210427
查表显示
虽然spark sql和hive sql写入表之后的hdfs文件路径形式不一样,但是查表的时候,都是可以正常显示每一个分区的的;通过show partitions tables:
partition
dt=20210501
dt=20210502
dt=20210503
dt=20210504
dt=20210505
dt=20210506
dt=20210507
...
原因分析
误导1:其实spark的那个保存路径事overwrite之后的非分区文件,之所以差对应的表仍有多个分区,是因为这个表之前是有那么多分区的,可以重新刷新一下这个表的路径指定,这样每次跑出来的表就不再是一个分区表;
总结
spark sql保存文件还是遵循相应的像hive的路径那样的规则,如果出现路径跟table查出来的分区情况不一致(比如:本省spark sql插入的是一张非分区表,而 table显示有多个分区,则需要爸表重新刷新一下,比如refresh table,或者更建议的方式是先把之前的分区文件移到别的目录,再重新运行spark sql跑数据,就可以看到实际的文件存储效果了)
参考
1)https://support.huaweicloud.com/sqlref-spark-dli/dli_08_0095.html
2)https://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html