hive 在presto sql中将varchar转换为数组

57hvy0tb  于 2023-10-18  发布在  Hive
关注(0)|答案(3)|浏览(380)

我想得到varchar列上的jaccard相似性有两个列带有varchar(string)
我想把下面的列值从apple(varchar)改为[a,p,p,l,e](array)

  1. select
  2. column
  3. ,split(column,',') as column_array
  4. ,split(column, '') as column_array2
  5. from sample_table

但没有"“有没有什么函数可以把字符串转换成数组(或列表)?谢谢

wooyq4lh

wooyq4lh1#

哦,我试着regexp_replace函数如下,它的作品!

  1. array_remove(array_remove(split(regexp_replace(column,'', ','),','), ' '),'')
vm0i2vca

vm0i2vca2#

如果您使用的数据库支持正则表达式,则可以使用regexp_split_to_array函数将字符串拆分为字符数组。

  1. SELECT
  2. column,
  3. regexp_split_to_array(column, '') AS column_array
  4. FROM
  5. sample_table;

如果不支持正则表达式,则需要使用循环或用户定义函数。

  1. CREATE OR REPLACE FUNCTION string_to_array_of_chars(input_str VARCHAR)
  2. RETURNS VARCHAR[] AS $$
  3. DECLARE
  4. char_array VARCHAR[] := '{}';
  5. i INT;
  6. BEGIN
  7. FOR i IN 1..LENGTH(input_str) LOOP
  8. char_array := array_append(char_array, SUBSTRING(input_str FROM i FOR 1));
  9. END LOOP;
  10. RETURN char_array;
  11. END;
  12. $$ LANGUAGE plpgsql;
  13. SELECT
  14. column,
  15. string_to_array_of_chars(column) AS column_array
  16. FROM
  17. sample_table;

通过使用不需要正则表达式或用户定义函数的解决方法,可以在Presto中实现将VARCHAR列转换为字符数组的目标。下面是如何使用数字表来实现的

  • 创建数字表:如果您没有数字表,请创建一个包含连续数字的单列表。
  • 拆分字符:使用数字表模拟拆分每个

将VARCHAR列的字符插入数组。
int count(int count);转换为数字值(1),(2),(3),.;

  1. -- Split Characters
  2. SELECT
  3. st.column,
  4. ARRAY_AGG(SUBSTRING(st.column FROM n.num FOR 1)) AS column_array
  5. FROM
  6. sample_table st
  7. CROSS JOIN
  8. numbers n
  9. WHERE
  10. n.num <= LENGTH(st.column)
  11. GROUP BY
  12. st.column;
展开查看全部
zyfwsgd6

zyfwsgd63#

您可以尝试regexp_extract_all.模式(匹配任何字符(行终止符除外)):

  1. select regexp_extract_all('apple', '.');

输出量:

  1. _col0
  2. -----------------
  3. [a, p, p, l, e]

相关问题