Hive 配置单元插入覆盖目录存储为拼花制作的空值

Hive 配置单元插入覆盖目录存储为拼花制作的空值,hive,Hive,我试图在一个目录中添加一些数据,然后将这些数据作为分区添加到表中 create table test (key int, value int) partitioned by (dt int) stored as parquet location '/user/me/test'; insert overwrite directory '/user/me/test/dt=1' stored as parquet select 123, 456, 1; alter table test add par

我试图在一个目录中添加一些数据,然后将这些数据作为分区添加到表中

create table test (key int, value int) partitioned by (dt int) stored as parquet location '/user/me/test';
insert overwrite directory '/user/me/test/dt=1' stored as parquet select 123, 456, 1;
alter table test add partition (dt=1);
select * from test;
这个代码示例很简单。。。但是不要工作。对于select语句,输出为NULL,NULL,1。但我需要1234561

当我用黑斑羚读取数据时,我收到了123456,1。。。什么是预期的

为什么??怎么了

如果我移除了作为拼花地板储存的两个,一切都没问题。。。但我想把我的数据放在拼花地板上

PS:我希望这个构造用于分区切换,以便在计算数据时,它们不会转到用户…

识别问题 蜂巢

猛击

验证问题 蜂巢

建议解决方案 创建额外的表test_admin并通过它进行插入

create table test_admin (key int, value int) 
partitioned by (dt int) 
stored as parquet location '/user/me/test'
;

create external table test (key int, value int) 
partitioned by (dt int) 
stored as parquet 
location '/user/me/test'
;

insert into test_admin partition (dt=1) select 123, 456
;

select * from test_admin
;

+----------+------------+---------+
| test.key | test.value | test.dt |
+----------+------------+---------+
|      123 |        456 |       1 |
+----------+------------+---------+

select * from test
;

(empty result set)

alter table test add partition (dt=1)
;

select * from test
;

+----------+------------+---------+
| test.key | test.value | test.dt |
+----------+------------+---------+
|      123 |        456 |       1 |
+----------+------------+---------+

有没有什么方法可以直接写入目录而不创建表?
parquet-tools cat hdfs://{fs.defaultFS}/user/me/test/dt=1/000000_0 
_col0 = 123
_col1 = 456
alter table test change column `key`    `_col0` int cascade;
alter table test change column `value`  `_col1` int cascade;

select * from test
;    

+------------+------------+---------+
| test._col0 | test._col1 | test.dt |
+------------+------------+---------+
|        123 |        456 |       1 |
+------------+------------+---------+
create table test_admin (key int, value int) 
partitioned by (dt int) 
stored as parquet location '/user/me/test'
;

create external table test (key int, value int) 
partitioned by (dt int) 
stored as parquet 
location '/user/me/test'
;

insert into test_admin partition (dt=1) select 123, 456
;

select * from test_admin
;

+----------+------------+---------+
| test.key | test.value | test.dt |
+----------+------------+---------+
|      123 |        456 |       1 |
+----------+------------+---------+

select * from test
;

(empty result set)

alter table test add partition (dt=1)
;

select * from test
;

+----------+------------+---------+
| test.key | test.value | test.dt |
+----------+------------+---------+
|      123 |        456 |       1 |
+----------+------------+---------+