Функция Google Big Query SPLIT () с использованием #standardsql - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь использовать функцию SPLIT () для преобразования массива строк в отдельные строки.

Данные выглядят примерно так:

id   ticket
1    1,2,3,4,5,6,7,8,9...etc.
2    11,12,13,14,15,16,17,18,19...etc.
3    21,22,23,24,25,26,27,28,29...etc.

Я бы хотел, чтобы данные выглядели так:

id   ticket
1    1
1    2
1    3
1    4
1    5
1    6
1    7
1    8
1    9
2    11
2    12
2    13
2    14
2    15
2    16

... и так далее. Когда я использую следующее: SELECT id, SPLIT(ticket) FROM table, я получаю именно тот результат, который хочу. Проблема в том, что мне нужно объединить эту таблицу с другой таблицей, которая разбита на разделы, и я не могу использовать устаревший SQL. Из-за нескольких заявок, связанных с каждым идентификатором (до 200), ввод каждого из них кажется неэффективным. Номера билетов также форматируются в виде строки.

Если у кого-то есть решение для этого, оно будет очень признательно!

1 Ответ

2 голосов
/ 30 мая 2019

Ниже приведен пример для BigQuery Standard SQL

#standardSQL
SELECT id, CAST(ticket AS INT64) ticket
FROM `project.dataset.table`,
UNNEST(SPLIT(ticket)) ticket

Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, '1,2,3,4,5,6,7,8,9' ticket UNION ALL
  SELECT 2, '11,12,13,14,15,16,17,18,19' UNION ALL
  SELECT 3, '21,22,23,24,25,26,27,28,29' 
)
SELECT id, CAST(ticket AS INT64) ticket
FROM `project.dataset.table`,
UNNEST(SPLIT(ticket)) ticket

с результатом

Row id  ticket   
1   1   1    
2   1   2    
3   1   3    
4   1   4    
5   1   5    
6   1   6    
7   1   7    
8   1   8    
9   1   9    
10  2   11   
11  2   12   
12  2   13   
13  2   14   
14  2   15   
15  2   16   
16  2   17   
17  2   18   
18  2   19   
19  3   21   
20  3   22   
21  3   23   
22  3   24   
23  3   25   
24  3   26   
25  3   27   
26  3   28   
27  3   29  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...