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 |
+----------+------------+---------+