hive/sparksql查询方法

qxgroojn  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(448)

问题陈述:我在hdfs上有大约400列的源数据,其中大约200列(我称之为var1..200)有可选的数据。有些行可能有v1..10的数据,有些行可能有v34..78的数据,依此类推。我需要读取这些数据,并将它们分为2个文件(或表格,如果你愿意)。表a将包含其他200列,表b将包含关于表a中行的var1..200列的信息。例如,如果表a中的一行有var1..20列的数据,那么表b应该有20行,每个行对应var1..20,以及链接表的列。所以,本质上我需要检查源数据集的var1..200列,然后如果其中任何一个var有值,我需要在表b中创建一个条目。
在源数据中,这些var1..200列成组出现,即var1..50一起放在文件中,然后在一些其他列之后,var51..100一起存储等。
我必须使用hiveql、spark-core或spark-sql来实现这一点,最好是spark解决方案。
我想到的方法是使用spark core,通过索引读取var1..200,检查值,然后将其移动到不同的数据集。
我想知道如何最好地实施这样一个解决方案。请分享你的想法。谢谢。

v1uwarro

v1uwarro1#

演示

  1. 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);
  2. insert into mytable values
  3. (123,null,null,null,'DD','EE','FF','GG',null,null,null)
  4. ,(456,null,null,null,null,null,null,null,null,'II','JJ')
  5. ;
  1. select * from mytable;
  1. +------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+
  2. | mytable.id | mytable.var1 | mytable.var2 | mytable.var3 | mytable.var4 | mytable.var5 | mytable.var6 | mytable.var7 | mytable.var8 | mytable.var9 | mytable.var10 |
  3. +------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+
  4. | 123 | NULL | NULL | NULL | DD | EE | FF | GG | NULL | NULL | NULL |
  5. | 456 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | II | JJ |
  6. +------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+
  1. select id
  2. ,v.i + 1 as i
  3. ,v.val
  4. from mytable
  5. lateral view posexplode (array(var1,var2,var3,var4,var5,var6,var7,var8,var9,var10)) v as i,val
  6. where v.val is not null
  7. ;
  1. +-----+----+-------+
  2. | id | i | v.val |
  3. +-----+----+-------+
  4. | 123 | 4 | DD |
  5. | 123 | 5 | EE |
  6. | 123 | 6 | FF |
  7. | 123 | 7 | GG |
  8. | 456 | 9 | II |
  9. | 456 | 10 | JJ |
  10. +-----+----+-------+
展开查看全部

相关问题