Hive命令行
Hive在存储文件时候,有一些文件命名的规则,现在还不是很懂底层的原理,但是把现象记录下来,以备之后讨论。
hive> insert into table db.table PARTITION (part_date = '2018-12-12') values ('col1_value', 9),('col1_value', 10);
在表中插入数据后,可以hdfs对应路径下找到存储的文件
$ hadoop fs -ls /user/hive/warehouse/dw_dev.db/wxm_dev_hive02/part_date=2018-12-12
Found 1 items
-rwxr-xr-x 3 hadoop supergroup 356 2018-12-12 17:22 /user/hive/warehouse/db.db/table/part_date=2018-12-12/000000_0
继续插入另一些数据
hive> insert into table db.table PARTITION (part_date = '2018-12-12') values ('col1_value', 1),('col1_value', 2);
在hdfs对应路径下找到存储的文件,是一个名为000000_0的文件
$ hadoop fs -ls /user/hive/warehouse/db.db/table/part_date=2018-12-12
Found 2 items
-rwxr-xr-x 3 hadoop supergroup 356 2018-12-12 17:22 /user/hive/warehouse/db.db/table/part_date=2018-12-12/000000_0
-rwxr-xr-x 3 hadoop supergroup 356 2018-12-12 17:32 /user/hive/warehouse/db.db/table/part_date=2018-12-12/000000_0_copy_1
多了一个名为000000_0_copy_1的文件,继续添加,会生成类似的000000_0_copy_x文件。
Spark SQL
Spark SQL也可以在hive中操作文件,但是生成的文件名与命令行生成的文件名有所不同。执行命令insert into table db.table02 PARTITION (part_date = '2018-12-12') values ('col1_value', 6),('col1_value', 7)
,文件形式如下:
$ hadoop fs -ls /user/hive/warehouse/db.db/table02/part_date=2018-12-12
Found 2 items
-rwxr-xr-x 3 hadoop supergroup 345 2018-12-12 18:39 /user/hive/warehouse/dw_dev.db/wxm_dev_hive03/part_date=2018-12-12/part-00000-7eab8ca9-3ed1-42c6-8dfa-3ea622518542-c000
-rwxr-xr-x 3 hadoop supergroup 345 2018-12-12 18:39 /user/hive/warehouse/dw_dev.db/wxm_dev_hive03/part_date=2018-12-12/part-00001-7eab8ca9-3ed1-42c6-8dfa-3ea622518542-c000
值得注意的是,两个文件的文件名完全相同,或许这与hive纪录的无序特性相关。