Нужна помощь в поиске похожих ключевых слов из столбца, содержащего весь список слов в Большом запросе

# #sql #google-bigquery

Вопрос:

У меня есть таблица брендов с 2 столбцами, скажем, например,

 ------------------------------------------------
|Brand_id   |  Brand_name|
------------------------------------------------
| 54         | Samsung   |
------------------------------------------------
 

И еще одна таблица, содержащая поисковые запросы, например

 query_id    query_text
12  Samsung_Refrigerator
13  LG_washing_machine
14  Sony_camera
15  Sony playstation
16  Why is the earth not flat
17  How to use BigQuery
 

Здесь я хочу вытащить все поисковые запросы, которые включают название бренда, например » %Имя_бренда%», И здесь название бренда может быть любым из брендов, таких как Amazon, LG и т. Д. И Samsung является примером, здесь у меня около 14000 брендов, и я работаю над большим запросом.

Какая-нибудь помощь?

Ответ №1:

вы можете использовать регулярное выражение и REGEXP_CONTAINS(value, regexp) функцию:

например, чтобы получить все бренды, которые содержатся sams в их названиях:

 SELECT * FROM table 
where REGEXP_CONTAINS(Brand_name, r'sams


Комментарии:

1. Привет, спасибо за вклад, но здесь у меня около 14 тысяч брендов, где я должен вытащить все термины, которые содержат какие-либо бренды в этом термине. пример: Холодильник Samsung, Стиральная машина Lg, телевизор Samsung как таковой

2. @kirantirupathi , ну , я не понимаю , у вас есть столбец под названием "имя бренда", и если вы хотите вытащить их все, выберите их все. но если вы хотите выполнить поиск внутри этой колонки, это ответ на ваш вопрос.

3. Я буду более точным, скажем, у меня есть около 1 миллиона поисковых запросов с именем "запрос" в отдельной таблице - Таблица1, и теперь я хотел использовать только запросы брендов и примеры, такие как "Samsung_Refrigerator", "LG_washing_machine" и т. Д. Но проблема в том, что у меня есть все эти названия брендов в отдельной таблице, Таблица 2 с "Кодом бренда" в 1 столбце и "Названием бренда" в другом столбце, поэтому теперь я хотел взять все поисковые запросы, в которых есть название бренда, сопоставив эти 2 таблицы.

Ответ №2:

Предполагая, что это одноразовая задача, и она вам не нужна в производстве, вы можете использовать свою таблицу брендов для создания [частей] инструкций SQL, например

 SELECT CONCAT(" OR Query like '%", Brand_name, "%' ") FROM Brands
 

Затем выведите результат в файл и добавьте базовый ВЫБОР вверху:

 SELECT *
FROM Table1
WHERE 1=0 OR 
<Generated statements go here>
 

затем вы можете выполнить скрипт и получить результаты

Ответ №3:

Учитывая ваши комментарии к ответу @eshirvana, я воссоздал две таблицы, которые, как мне кажется, у вас есть:

  • таблица списка брендов:

    С ТАКИМИ брендами, КАК ( ВЫБЕРИТЕ 54 В КАЧЕСТВЕ ИДЕНТИФИКАТОРА бренда, "Samsung" В КАЧЕСТВЕ ИМЕНИ бренда, ВСЕ ВЫБЕРИТЕ 56, "LG", ВСЕ ВЫБЕРИТЕ 59, "Sony")

введите описание изображения здесь

  • таблица поисковых запросов:
       search_results AS (
    
      SELECT 12 AS query_id, "Samsung_Refrigerator" AS query_text
      UNION ALL 
      SELECT 13, "LG_washing_machine"
      UNION ALL 
      SELECT 14, "SONY_camera",
      UNION ALL 
      SELECT 15, "Sony playstation",
      UNION ALL 
      SELECT 16, "Why is the earth not flat"
      UNION ALL 
      SELECT 17, "How to use BigQuery"
    
      )
     

введите описание изображения здесь

Оттуда вы можете извлечь поисковые запросы, содержащие одно из ваших фирменных наименований, с помощью СОЕДИНЕНИЯ:

 SELECT
  s.query_id AS query_id,
  s.query_text AS query_text,
  b.Brand_name AS Brand_id
FROM
  search_results s
JOIN
  brands b
ON
  REGEXP_CONTAINS(UPPER(s.query_text),UPPER(b.Brand_name))
 

Результат по данным выборки:

введите описание изображения здесь

Комментарии:

1. Также обратите внимание, что объединение-дорогостоящая операция, возможно, вам следует попробовать небольшую репрезентативную выборку ваших данных, прежде чем запускать ее во всей таблице.

2. ВЕРХНЯЯ часть предназначена для игнорирования случая (SONY и Sony извлечены)

3. Привет @Cylinby, здесь нет сопоставления между 2 таблицами с любым идентификатором как таковым, называемым "query_id". У меня есть только brand_id, brand_name в таблице брендов и в таблице запросов, у меня есть условия поиска с другими показателями

4. Затем просто оставьте query_id вне предложения Select, это не обязательно.. наиболее важным является предложение JOIN, для которого требуется только имя бренда из столбца вашего бренда и столбец query_text из условий поиска

);

Комментарии:

1. Привет, спасибо за вклад, но здесь у меня около 14 тысяч брендов, где я должен вытащить все термины, которые содержат какие-либо бренды в этом термине. пример: Холодильник Samsung, Стиральная машина Lg, телевизор Samsung как таковой

2. @kirantirupathi , ну , я не понимаю , у вас есть столбец под названием «имя бренда», и если вы хотите вытащить их все, выберите их все. но если вы хотите выполнить поиск внутри этой колонки, это ответ на ваш вопрос.

3. Я буду более точным, скажем, у меня есть около 1 миллиона поисковых запросов с именем «запрос» в отдельной таблице — Таблица1, и теперь я хотел использовать только запросы брендов и примеры, такие как «Samsung_Refrigerator», «LG_washing_machine» и т. Д. Но проблема в том, что у меня есть все эти названия брендов в отдельной таблице, Таблица 2 с «Кодом бренда» в 1 столбце и «Названием бренда» в другом столбце, поэтому теперь я хотел взять все поисковые запросы, в которых есть название бренда, сопоставив эти 2 таблицы.

Ответ №2:

Предполагая, что это одноразовая задача, и она вам не нужна в производстве, вы можете использовать свою таблицу брендов для создания [частей] инструкций SQL, например


Затем выведите результат в файл и добавьте базовый ВЫБОР вверху:


затем вы можете выполнить скрипт и получить результаты

Ответ №3:

Учитывая ваши комментарии к ответу @eshirvana, я воссоздал две таблицы, которые, как мне кажется, у вас есть:

  • таблица списка брендов:

    С ТАКИМИ брендами, КАК ( ВЫБЕРИТЕ 54 В КАЧЕСТВЕ ИДЕНТИФИКАТОРА бренда, «Samsung» В КАЧЕСТВЕ ИМЕНИ бренда, ВСЕ ВЫБЕРИТЕ 56, «LG», ВСЕ ВЫБЕРИТЕ 59, «Sony»)

введите описание изображения здесь

  • таблица поисковых запросов:
    
    

введите описание изображения здесь

Оттуда вы можете извлечь поисковые запросы, содержащие одно из ваших фирменных наименований, с помощью СОЕДИНЕНИЯ:


Результат по данным выборки:

введите описание изображения здесь

Комментарии:

1. Также обратите внимание, что объединение-дорогостоящая операция, возможно, вам следует попробовать небольшую репрезентативную выборку ваших данных, прежде чем запускать ее во всей таблице.

2. ВЕРХНЯЯ часть предназначена для игнорирования случая (SONY и Sony извлечены)

3. Привет @Cylinby, здесь нет сопоставления между 2 таблицами с любым идентификатором как таковым, называемым «query_id». У меня есть только brand_id, brand_name в таблице брендов и в таблице запросов, у меня есть условия поиска с другими показателями

4. Затем просто оставьте query_id вне предложения Select, это не обязательно.. наиболее важным является предложение JOIN, для которого требуется только имя бренда из столбца вашего бренда и столбец query_text из условий поиска