使用#standardsql的Google Big Query SPLIT()函数

时间:2019-05-30 19:48:35

标签: split google-bigquery tableau standard-sql legacy-sql

我正在尝试使用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。由于每个ID关联有多个票证(最多200张),因此输入每个票证似乎效率低下。票号也被格式化为字符串。

如果有人对此有解决方案,将不胜感激!

1 个答案:

答案 0 :(得分:1)

以下BigQuery标准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