# #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 из условий поиска