在Hive中寻找子串

yuvru6vn  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(320)

我正在尝试从字符串(复合\u键)获取子字符串值:我的复合\u键如下所述:

  1. string1|string2|string3|string4|string5|string6|string7

我可以使用impala的substring方法找到string1、string2、string3、string4和string5
有人能帮我用子串方法找到string6和string7吗?
任何帮助都会被满足的。

lo8azlld

lo8azlld1#

我可以通过以下查询完成:
对于string7

  1. select substring(composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key, locate('|',composite_key) + 1)+1)+1)+1)+1)+1)as a

对于string6

  1. select
  2. substring(composite_key,
  3. locate('|',composite_key,
  4. locate('|',composite_key,
  5. locate('|',composite_key,
  6. locate('|',composite_key,
  7. locate('|',composite_key) + 1)+1)+1)+1)+1,
  8. locate('|',composite_key,
  9. locate('|',composite_key,
  10. locate('|',composite_key,
  11. locate('|',composite_key,
  12. locate('|',composite_key,
  13. locate('|',composite_key) + 1)+1)+1)+1)+1)
  14. - locate('|',composite_key,
  15. locate('|',composite_key,
  16. locate('|',composite_key,
  17. locate('|',composite_key,
  18. locate('|',composite_key) + 1)+1)+1)+1)-1)
  19. as a
展开查看全部
zfciruhq

zfciruhq2#

您必须使用配置单元子查询+数组数据结构+拆分函数来实现这一点。然而,这只适用于Hive。impala不支持嵌套数据结构,除了impala2.3(对应于cdh5.5)和更高版本中基于parquet的表。

  1. select
  2. key_array[0] part0,
  3. key_array[1] part1,
  4. key_array[2] part2,
  5. key_array[3] part3,
  6. key_array[4] part4,
  7. key_array[5] part5,
  8. key_array[6] part6,
  9. from (
  10. select split(composite_key,'|') as key_array
  11. from mytable
  12. ) as temp

相关问题