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