Google bigquery 左连接以填充google big query中2个表中的数据

Google bigquery 左连接以填充google big query中2个表中的数据,google-bigquery,Google Bigquery,下面是两个表RawDebug和CarrierDetails。在RawDebug中,如果DebugData是VER%,那么ActualDebugData是Verizon,如果DebugData是一个数字,首先我们必须用“”替换其他字符,如(?),然后我们必须查找CarrierDetails表以选择其网络,其中Mcc=substr(“310410”,0,3)和Mnc=substr(“310410”,4,2)。然后将该网络填充为ActualDebugData 表1: HardwareId Debug

下面是两个表RawDebug和CarrierDetails。在RawDebug中,如果DebugData是VER%,那么ActualDebugData是Verizon,如果DebugData是一个数字,首先我们必须用“”替换其他字符,如(?),然后我们必须查找CarrierDetails表以选择其网络,其中Mcc=substr(“310410”,0,3)和Mnc=substr(“310410”,4,2)。然后将该网络填充为ActualDebugData

表1:

 HardwareId DebugData ActualDebugData
 123        VER%      Verizon
 456        310410?   Bell
表2.详细信息:

 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

请记住-答案通常和问题一样好!
希望这会有所帮助,但看看你的问题的历史——这可能不是结束:o)

输出s:

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

请记住-答案通常和问题一样好!
希望这会有所帮助,但看看你的问题的历史——这可能不是结束:o)

输出s:

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

你发现这个答案有用吗?如果是这样的话,你可以考虑接受/投票它(如果还没有)你发现这个答案有用吗?如果是这样的话,你可以考虑接受/投票它(如果还没有)