2016-05-17 2 views
0

以下は2つのテーブルRawDebugとCarrierDetailsです。 RawDebugでは、DebugDataがVER%の場合、ActualDebugDataはVerizonで、DebugDataが数値の場合は、まず(?、 ")のような他の文字を ''に置き換えなければならないので、CarrierDetailsテーブルを検索してMcc 。。= SUBSTR( "310410"、0,3)及びMNC = SUBSTR( "310410"、4,2)このネットワークは、次にActualDebugDataに移入されgoogleの大きなクエリで2つのテーブルからデータを取り込むために左に結合

表RawDebug:

HardwareId DebugData ActualDebugData 
123  VER%  Verizon 
456  310410? Bell 

表CarrierDetails。

Mcc Mnc Network 
310 410 Bell 

私が試したこと:

SELECT 
HardwareId, DebugReason, DebugData, 
CASE 
    WHEN lower(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
END 
AS ActualDebugData 
FROM (
    SELECT 
    HardwareId, DebugReason, DebugData, 
    INTEGER(SUBSTR(DebugData,0,3)) AS d1, INTEGER(SUBSTR(REGEXP_REPLACE(DebugData,'^[a-zA-Z0-9]',' '),4,LENGTH(DebugData)-1)) as d2 
    FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP('2016-05-15'),TIMESTAMP('2016-05-15')) 
    WHERE DebugReason = 50013 
    ) AS d 
    LEFT JOIN (
    SELECT 
    Network, Mcc, Mnc 
    FROM [bigdata:RawDebug.CarrierDetails] 
    ) AS c 
    ON c.Mcc = d.d1 and c.Mnc = d.d2 
    LIMIT 400 

答えて

2

ご質問にはお答えできませんのでご安心ください!これは助けるが、あなたの疑問の歴史を見ます
希望 - これが終わりではないかもしれません:出力S O)

SELECT 
    HardwareId, DebugReason, DebugData, 
    CASE 
    WHEN LOWER(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
    END AS ActualDebugData 
FROM (
    SELECT 
    HardwareId, DebugReason, DebugData, 
    INTEGER(SUBSTR (DebugData, 1, 3)) AS d1,  
    INTEGER(SUBSTR (DebugData, 4, 3)) AS d2 
    FROM //TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP('2016-05-15'),TIMESTAMP('2016-05-15')) 
     (SELECT 123 AS HardwareId, 'VER%' AS DebugData, 'Verizon' AS ActualDebugData, 50013 AS DebugReason), // sample data 
     (SELECT 456 AS HardwareId, '310410?' AS DebugData, 'Bell' AS ActualDebugData, 50013 AS DebugReason) // sample data 
    WHERE DebugReason = 50013 
) AS d 
LEFT JOIN (
    SELECT 
    Network, Mcc, Mnc 
    FROM //[bigdata:RawDebug.CarrierDetails] 
    (SELECT 310 AS Mcc, 410 AS Mnc, 'Bell' AS Network) // sample data 
) AS c 
ON c.Mcc = d.d1 AND c.Mnc = d.d2 
LIMIT 400 

HardwareId DebugReason DebugData ActualDebugData 
123   50013  VER%  Verizon 
456   50013  310410?  Bell  
+0

あなたはこの答えは有用であることが分かってきましたか?もしそうなら、それを受け入れる/投票することを検討することができます(まだない場合) –

関連する問題