как получить все слова, начинающиеся с определенного символа в большом запросе - PullRequest
0 голосов
/ 17 марта 2020

У меня есть текстовый столбец в таблице больших запросов. Пример записи этого столбца выглядит следующим образом -

with temp as 
(
select 1 as id,"as we go forward into unchartered waters it's important to remember we are all in this together. #united #community" as input
union all
select 2 , "US cities close bars, restaurants and cinemas #Coronavirus"
)

select *
from temp

Я хочу извлечь все слова в этом столбце, которые начинаются с #. позже я хотел бы получить частоту этих терминов. Как мне сделать это в BigQuery?

Мой вывод будет выглядеть как -

id, word
1, united
1, community
2, coronavirus

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Ниже для BigQuery Standard SQL

Я хочу извлечь все слова в этом столбце, которые начинаются с #

#standardSQL
WITH temp AS (
  SELECT 1 AS id,"as we go forward into unchartered waters it's important to remember we are all in this together. #united #community" AS input UNION ALL
  SELECT 2 , "US cities close bars, restaurants and cinemas #Coronavirus"
)
SELECT id, word
FROM temp, UNNEST(REGEXP_EXTRACT_ALL(input, r'(?:^|\s)#([^#\s]*)')) word   

с выводом

Row id  word     
1   1   united   
2   1   community    
3   2   Coronavirus    

позже я хотел бы получить частоту этих терминов

#standardSQL
SELECT word, COUNT(1) frequency
FROM temp, UNNEST(REGEXP_EXTRACT_ALL(input, r'(?:^|\s)#([^#\s]*)')) word
GROUP BY word
0 голосов
/ 18 марта 2020

Вы можете сделать это без регулярных выражений, разделив слова, а затем выбрав те, которые начинаются так, как вы хотите. Например:

SELECT
  id,
  ARRAY(SELECT TRIM(x, "#") FROM UNNEST(SPLIT(input, ' ')) as x WHERE STARTS_WITH(x,'#')) str
FROM
  temp

Если вы предпочитаете, чтобы хэштеги были отдельными строками, вы можете быть немного более утомительными:

SELECT
  id,
  TRIM(x, "#") str
FROM
  temp,
  UNNEST(SPLIT(input, ' ')) x
WHERE
  STARTS_WITH(x,'#')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...