hiveql(配置单元查询语言):将类似矩阵的表转换为3列表

2o7dmzc5  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(357)

我的表格结构如下:

  1. code | col1 | col2 | col3 |
  2. 0001 | c11 | c12 | c13 |
  3. 0002 | c21 | c22 | c23 |
  4. 0003 | c31 | c32 | c33 |
  5. 0004 | c41 | c42 | c43 |

我想把它变成

  1. code | col_to_row | value
  2. 0001 | col1 | c11
  3. 0001 | col2 | c12
  4. 0001 | col3 | c13
  5. 0002 | col1 | c21

还有一个。是否有任何内置函数,因为我不喜欢使用下面的查询,因为我的列形式的输入表可以随时间增长

  1. select code,'col1' as col_to_row, col1 as value, from database.table
  2. union all
  3. select code,'col2' as col_to_row, col2 as value, from database.table
  4. union all
  5. select code,'col3' as col_to_row, col3 as value, from database.table
wn9m85ua

wn9m85ua1#

您可以将map函数用于 lateral view explode 作为一种比 UNION ALL s

  1. select code, col_to_row, value
  2. from (
  3. select code, map( "col1", col1
  4. , "col2", col2
  5. , "col3", col3
  6. ) as col_map
  7. from t ) x
  8. lateral view explode(col_map) exptab as col_to_row, value ;

样品o/p

  1. Total MapReduce CPU Time Spent: 3 seconds 620 msec
  2. OK
  3. 1 col2 c12
  4. 1 col1 c11
  5. 1 col3 c13
  6. 2 col2 c22
  7. 2 col1 c21
  8. 2 col3 c23
  9. 3 col2 c32
  10. 3 col1 c31
  11. 3 col3 c33
  12. 4 col2 c42
  13. 4 col1 c41
  14. 4 col3 c43
  15. Time taken: 27.876 seconds, Fetched: 12 row(s)
展开查看全部

相关问题