I would try this in Hive (I suppose all the columns are string if not you can put another value, for example if fields were int you could put 0 instead of '', or you could put null also, the final result will be the same)
CREATE TABLE output_table
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
AS
SELECT cl1, cl2, cl3, cl4, '' AS cl5, '' AS cl6, '' AS cl7
FROM table1
UNION ALL
SELECT '' AS cl1, '' AS cl2, '' AS cl3, '' AS cl4, cl5, '' AS cl6, '' AS cl7
FROM table2
UNION ALL
SELECT '' AS cl1, '' AS cl2, '' AS cl3, '' AS cl4, '' AS cl5, cl6, '' AS cl7
FROM table3
UNION ALL
SELECT '' AS cl1, '' AS cl2, '' AS cl3, '' AS cl4, '' AS cl5, '' AS cl6, cl7
FROM table4;
then you can clean up this table as follow creating another table as final table
CREATE TABLE final_table
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
AS
SELECT t.cl1, t1.cl2,t2.cl3,t3.cl4,t4.cl5,t5.cl6,t6.cl7
FROM (SELECT cl1 FROM output_table WHERE cl1 <> '') AS t,
(SELECT cl2 FROM output_table WHERE cl2 <> '') AS t1,
(SELECT cl3 FROM output_table WHERE cl3 <> '') AS t2,
(SELECT cl4 FROM output_table WHERE cl4 <> '') AS t3,
(SELECT cl5 FROM output_table WHERE cl5 <> '') AS t4,
(SELECT cl6 FROM output_table WHERE cl6 <> '') AS t5,
(SELECT cl7 FROM output_table WHERE cl7 <> '') AS t6;