我在一个目录中有三个csv文件,每个文件都有不同的架构。我需要创建一个可以组合来自所有三个文件的数据的hive表。
每个文件的模式如下
/example/test1.csv -- C1, C2, C3, C4
/example/test2.csv -- C1, C2, C3, C4, C5
/example/test3.csv -- C1, C2, C6, C3, C4, C5
在这里,我可以使用架构C1,C2,C3,C4,C5,C6创建一个配置单元表吗?
答案 0 :(得分:1)
注意:Hive是读取的架构。该表将被创建。你可以创建一个像
这样的表CREATE EXTERNAL TABLE tab3(
c1 int,
c2 int,
c3 int,
c4 int,
c5 int,
c6 int)
row format delimited
fields terminated by ','
location '/example'
此表已创建。使用test1.csv,test2.csv,test3.csv作为其数据源。
当您尝试查询表时,请注意test1.csv中的c3,test2.csv中的c3和test3.csv中的c6都将是hive表中的相同列。同样适用于C4,c4和c3等。
这就是你要找的东西吗?对于那些没有像c5这样的数据的文件,这些列将填充为null,对于test1.csv,这些文件将为null,对于test2.csv,c6将为null。
答案 1 :(得分:1)
如果我理解正确,我认为你想要一个视图,它是不同表的联合。 @ venBigData的解决方案并不常用,因为它会将c6解释为c3。
像
这样的东西CREATE VIEW union_view
AS
SELECT c1, c2, c3, c4, null as c5, null as c6
FROM test1
UNION ALL
SELECT c1, c2, c3, c4, c5 , null as c6
FROM test2
UNION ALL
SELECT c1,c2, c4 as c3, c5 as c4, c6 as c5, c3 as c6
FROM test3;
这是你的意思吗?