2017-04-26 97 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

我試過你的第一種方法,它幫助我達到了必要的結果。祝你今天愉快 –