我在hive中有1000个表。所有都有相同的列。这些表将逐步更新。列是ID,名称,dno,loc,sal ...... 我想通过从每个表中仅选择Id,name和sal来创建一个大表。
Table 1:
ID name dno loc sal ………
1 sam 201 HYD 2000 ………
Table2
ID name dno loc sal ………
2 Ram 203 BAN 3000 ………
Table 3
ID name dno loc sal ………
3 Bam 301 NY 4000 ………
等等......
大表:
ID name sal
1 sam 2000
2 Ram 3000
3 Bam 4000
等等
这就是我想要实现的目标。
说如果明天有新的记录,请插入表3,用Id 100说,名字杰克......
表3包含新记录
Table 3
ID name dno loc sal ………
3 Bam 301 NY 4000 ………
100 Jack 101 LA 5000 ……….
新的大表应该是
ID name sal
1 sam 2000
2 Ram 3000
3 Bam 4000
100 Jack 5000
这是我想要在每次将新记录插入原始1000个表时删除大表的目的而实现的目标
答案 0 :(得分:1)
ravinder的略微修改版本。
如下所示创建子外部表。
create external table table1 (
column1 String,
Column2 String
)
row format delimited
fields terminated by ','
LOCATION '/user/cloudera/data_p/table_name=data1/';
现在,您的父表将使用分区列table_name创建。
create external table parent_table (
column1 String,
Column2 String
)
partitioned by (table_name String)
row format delimited
fields terminated by ','
LOCATION '/user/cloudera/data_p/';
msck修复表parent_table;
答案 1 :(得分:0)
如果您的所有表之间的ID都是唯一的,您可以更新您的大表,如
with q1 as (
select * from T1 where ID not in (select ID from BIGTABLE)
union
select * from T2 where ID not in (select ID from BIGTABLE)
.... so on
)
from q1
insert into table BIGTABLE select *;
如果您可以在不同的表之间找到相同的ID(例如,在T1和T4中,例如ID = 1),我建议在大表中使用一个额外的列来标识记录源(来自它来自哪些表)或分区数据(取决于数据的大小)。如果某些事情没有意义,发表评论
问候!
编辑:就像我在评论中说的,如果不可能为所有表做一个联合,我建议创建一个分区表。这个想法是在这个表中添加一个指向其他表的位置的分区,这样你应该能够应用我之前写过的逻辑,如果你使用模式进化使用avro / parquet格式,这是可能的。 。答案 2 :(得分:0)
你可以做几种方式,但如果没有限制,我喜欢下面的内容。确保所有小表位置都是一个目录。
如果以下不起作用,需要更多信息(小表命名的标准,表格的行格式)(另一种方法是创建一个从元数据中选择的脚本并获取小表名,并使用union来执行一个脚本小数据并插入大表)
小桌子r1& r2和大桌部
create table r1
(dept int
,dept_name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION '/apps/hive/warehouse/dept/r1';
create table r2
(dept int
,dept_name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION '/apps/hive/warehouse/dept/r2';
[root@sandbox ~]# hadoop fs -ls -R /apps/hive/warehouse/dept
drwxrwxrwx - root hdfs 0 2017-01-25 17:43 /apps/hive/warehouse/dept/r1
-rwxrwxrwx 3 root hdfs 105 2017-01-25 17:43 /apps/hive/warehouse/dept/r1/000000_0
-rwxrwxrwx 3 root hdfs 0 2017-01-25 17:43 /apps/hive/warehouse/dept/r1/000001_0
drwxrwxrwx - root hdfs 0 2017-01-25 17:44 /apps/hive/warehouse/dept/r2
-rwxrwxrwx 3 root hdfs 105 2017-01-25 17:44 /apps/hive/warehouse/dept/r2/000000_0
-rwxrwxrwx 3 root hdfs 0 2017-01-25 17:44 /apps/hive/warehouse/dept/r2/000001_0
create external table dept
(dept int
,dept_name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION '/apps/hive/warehouse/dept/';