2017-04-26 65 views
1

请求Google Big Query的帮助
我们有一个数据表,其中一列是其状态,它捕获票证的生命周期

此字段有票分配日期,工作进行中,关闭,待处理等。
各种类别。下面的例子: '已分配(03/01/2017 06:13:47 AM) - >工作进展(03/02/2017 05:27:52 AM) - >已解决(04/06/2017 03:34 :16 AM)” 我们需要创建多个列依据此列 - 一个用于分配,另一个
的解决等 我们已经尝试了一些选项,如下将列分成多列

substr(STATUS_TRAIL,11,20) assigned_date, right(STATUS_TRAIL,34) as date,

但是这个结果是不是最新的,因为每列可能会错过其中一个
其他状态,即某些票据尚未关闭,或者任何未处于待处理状态,都是WIP,而有些则关闭。下面

回答

2

尝试使用BigQuery的标准SQL

#standardSQL 
WITH yourTable AS (
    SELECT 'Assigned (03/01/2017 06:13:47 AM) -> Work In Progress (03/02/2017 05:27:52 AM) -> Resolved (04/06/2017 03:34:16 AM)' AS ticket 
) 
SELECT 
    REGEXP_EXTRACT(ticket, r'Assigned \((\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d [AP]M)\)') AS assigned, 
    REGEXP_EXTRACT(ticket, r'Work In Progress \((\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d [AP]M)\)') AS inprogress, 
    REGEXP_EXTRACT(ticket, r'Resolved \((\d\d/\d\d/\d\d\d\d \d\d:\d\d:\d\d [AP]M)\)') AS resolved 
FROM yourTable 
+0

这个工作,这就是我想要的目的。米哈伊尔祝你有个愉快的一天。 –

+0

你可能想接受答案并投票:o) –

1

尝试SPLIT功能:

#standardSQL 
WITH Input AS (
    SELECT 'Assigned (03/01/2017 06:13:47 AM) -> Work In Progress (03/02/2017 05:27:52 AM) -> Resolved (04/06/2017 03:34:16 AM)' AS STATUS_TRAIL 
) 
SELECT 
    events[SAFE_OFFSET(0)] AS assigned_event, 
    events[SAFE_OFFSET(1)] AS progress_event, 
    events[SAFE_OFFSET(2)] AS resolved_event 
FROM (
    SELECT 
    SPLIT(STATUS_TRAIL, ' -> ') AS events 
    FROM Input 
); 

或者,就像看着你的数据的另一种方式,你可以把它建模为一个数组事件类型和时间戳条目:

#standardSQL 
WITH Input AS (
    SELECT 'Assigned (03/01/2017 06:13:47 AM) -> Work In Progress (03/02/2017 05:27:52 AM) -> Resolved (04/06/2017 03:34:16 AM)' AS STATUS_TRAIL 
) 
SELECT 
    ARRAY(
    SELECT AS STRUCT 
     parts[SAFE_OFFSET(0)] AS type, 
     PARSE_TIMESTAMP('%m/%d/%Y %T %p)', parts[SAFE_OFFSET(1)]) AS timestamp 
    FROM (
     SELECT SPLIT(event_string, ' (') AS parts 
     FROM UNNEST(event_strings) AS event_string 
    ) 
) AS events 
FROM (
    SELECT SPLIT(STATUS_TRAIL, ' -> ') AS event_strings 
    FROM Input 
); 

在输出的每一行看起来像:

[{Assigned, 2017-03-01 06:13:47+00}, 
{Work In Progress, 2017-03-02 05:27:52+00}, 
{Resolved, 2017-04-06 03:34:16+00}] 
+0

我试过你的第一种方法,它帮助我达到了必要的结果。祝你今天愉快 –