Как запустить Select Query with LIKE для тысяч строк - PullRequest
0 голосов
/ 09 февраля 2020

Новичок ie здесь. Я искал часы сейчас, но я могу найти правильный ответ или правильно сформулировать свой поиск.

У меня есть тысячи строк (ордерид), которые я хочу добавить в функцию IN, мне нужно запустить LIKE в то же время для этих значений, поскольку столбцы содержат json, и нет выделенной таблицы, которая имеет только значение order_id. Я выполняю запрос в BigQuery.

Пример ввода:

ORD12345 ORD54376

Таблица, которую я пытаюсь сделать запрос: Transactions_table

enter image description here

Запрос:

SELECT order_id, transaction_uuid,client_name 
FROM transactions_table 
WHERE  JSON_VALUE(transactions_table,'$.ordernum') LIKE IN ('%ORD12345%','%ORD54376%') 

Просто не работает, особенно если у меня тысячи строк.

Кроме того, как мне добавить идентификатор заказа что я запрашиваю, чтобы он отображался под столбцом order_id в результате запроса?

Желаемый результат:

enter image description here

Ответы [ 3 ]

1 голос
/ 09 февраля 2020

Один метод использует OR:

WHERE JSON_VALUE(transactions_table, '$.ordernum') LIKE IN '%ORD12345%' OR
      JSON_VALUE(transactions_table, '$.ordernum') LIKE '%ORD54376%'

Альтернативный метод использует регулярные выражения:

WHERE REGEXP_CONTAINS(JSON_VALUE(transactions_table, '$.ordernum'), 'ORD12345|ORD54376')
1 голос
/ 09 февраля 2020

Вариант один

WITH transf as (Select order_id, transaction_uuid,client_name , JSON_VALUE(transactions_table,'$.ordernum') as o_num from transactions_table)
Select * from transf where o_num like '%ORD12345%' or o_num like '%ORD54376%'

Вариант два

split o_num by "-" as separator , create table of orders like (select 'ORD12345' as num 
Union 
Select 'ORD54376' aa num) and inner join it with transf.o_num
0 голосов
/ 10 февраля 2020

Согласно документации, здесь , оператор LIKE работает следующим образом:

Проверяет, соответствует ли STRING в первом операнде X шаблону определяется вторым операндом Y. Выражения могут содержать следующие символы:

Знак процента "%" соответствует любому количеству символов или байтов.

Знак подчеркивания "_" соответствует одному символу или байту .

Вы можете экранировать "\", "_" или "%", используя две обратные косые черты. Например, "\%". Если вы используете необработанные строки, требуется только одна обратная косая черта sh. Например, r "\%".

Таким образом, синтаксис будет выглядеть следующим образом:

SELECT
  order_id,
  transaction_uuid,
  client_name
FROM
  transactions_table
WHERE
  JSON_VALUE(transactions_table,
    '$.ordernum') LIKE '%ORD12345%'
  OR JSON_VALUE(transactions_table,
    '$.ordernum') LIKE '%ORD54376%

Обратите внимание, что мы указываем два условия, связанные с ИЛИ логический оператор.

В качестве дополнительной информации при запросе больших наборов данных целесообразно выбирать только те столбцы, которые вы хотите использовать в выходных данных (либо в таблице временных параметров, либо в окончательном представлении) вместо использования *, поскольку BigQuery является столбцовым, одна из причин его ускорения.

В качестве альтернативы для использования LIKE , вы можете использовать REGEXP_CONTAINS , согласно документации:

Возвращает TRUE, если значение является частичным совпадением для регулярного выражения, регулярное выражение.

Использование следующего синтаксиса:

REGEXP_CONTAINS(value, regex)

Однако это также будет работать, если вместо выражения регулярного выражения вы используете STRING между одинарными / двойными кавычками , Кроме того, вы можете использовать оператор канала (|), чтобы разрешить логически упорядочивать искомые компоненты, когда у вас есть больше, чем выражение для поиска, следующим образом:

where regexp_contains(email,"gary|test")

Надеюсь, если поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...