Hive/Spark SQL查询方法



问题语句:我拥有有关HDFS的源数据,其中约有400列,其中约200列(我称它们为var1..200)将选择具有数据。有些行可能具有v1..10的数据,有些行可能具有V34..78,依此类推。我需要读取此数据并将它们分成2个文件(或表格(如果可以的话))。表A将有其他200列和表B具有有关表A中的行的VAR1..200列的信息。例如,如果表A中的一行具有VAR1..20列的数据有20行,var1..20的每行,以及列以链接表的列。因此,从本质上讲,我需要检查源数据集的var1..200列,然后如果任何var具有值,我需要在表B中创建一个条目。

在源数据中,这些var1..200列出现在组中,即var1..50放在文件中,然后在其他一些列后,将var51..100存储在一起等。

我必须使用HiveQL或Spark Core或Spark SQL,最好是Spark Solutions。

我认为的方法是使用Spark Core,通过索引阅读VAR1..200,检查值,然后将其移至其他数据集。

我想知道如何最好地实施这样的解决方案。请分享您的想法。谢谢。

demo

create table mytable (id bigint,var1 string,var2 string,var3 string,var4 string,var5 string,var6 string,var7 string,var8 string,var9 string,var10 string);
insert into mytable values 
    (123,null,null,null,'DD','EE','FF','GG',null,null,null)
   ,(456,null,null,null,null,null,null,null,null,'II','JJ')
;   

select * from mytable;

+------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+
| mytable.id | mytable.var1 | mytable.var2 | mytable.var3 | mytable.var4 | mytable.var5 | mytable.var6 | mytable.var7 | mytable.var8 | mytable.var9 | mytable.var10 |
+------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+
|        123 | NULL         | NULL         | NULL         | DD           | EE           | FF           | GG           | NULL         | NULL         | NULL          |
|        456 | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | II           | JJ            |
+------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+

select  id
       ,v.i + 1 as i
       ,v.val
from    mytable
        lateral view posexplode (array(var1,var2,var3,var4,var5,var6,var7,var8,var9,var10)) v as i,val
where   v.val is not null
;
       

+-----+----+-------+
| id  | i  | v.val |
+-----+----+-------+
| 123 |  4 | DD    |
| 123 |  5 | EE    |
| 123 |  6 | FF    |
| 123 |  7 | GG    |
| 456 |  9 | II    |
| 456 | 10 | JJ    |
+-----+----+-------+

相关内容

  • 没有找到相关文章

最新更新