左加入 google 大查询
Left join in google big query
我有这个错误“ON 子句必须是 AND of = 每个 table 中的一个字段名称的比较,所有字段名称都以 table 名称为前缀。
此左连接仅用于c.Network,其他情况则不需要。我理解错误,但两个 tables(bigdata:RawDebug.T 和 bigdata:RawDebug.CarrierDetails)之间没有公共字段。所以我不能在 "ON" 语句中引用两个 table。
如有任何帮助,我们将不胜感激!!
DEFINE QUERY Test2
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 (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))) as d
LEFT JOIN [bigdata:RawDebug.CarrierDetails] as c ON c.Mcc = 289 AND c.Mnc = 88
WHERE d.reason = 50013
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 *
FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))
) AS d
CROSS JOIN (
SELECT Network
FROM [bigdata:RawDebug.CarrierDetails]
WHERE Mcc = 289 AND Mnc = 88
LIMIT 1
) AS c
WHERE d.reason = 50013
或提高性能(根据 Felipe 的建议):
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
FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))
WHERE reason = 50013
) AS d
CROSS JOIN (
SELECT Network
FROM [bigdata:RawDebug.CarrierDetails]
WHERE Mcc = 289 AND Mnc = 88
LIMIT 1
) AS c
我有这个错误“ON 子句必须是 AND of = 每个 table 中的一个字段名称的比较,所有字段名称都以 table 名称为前缀。
此左连接仅用于c.Network,其他情况则不需要。我理解错误,但两个 tables(bigdata:RawDebug.T 和 bigdata:RawDebug.CarrierDetails)之间没有公共字段。所以我不能在 "ON" 语句中引用两个 table。
如有任何帮助,我们将不胜感激!!
DEFINE QUERY Test2
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 (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))) as d
LEFT JOIN [bigdata:RawDebug.CarrierDetails] as c ON c.Mcc = 289 AND c.Mnc = 88
WHERE d.reason = 50013
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 *
FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))
) AS d
CROSS JOIN (
SELECT Network
FROM [bigdata:RawDebug.CarrierDetails]
WHERE Mcc = 289 AND Mnc = 88
LIMIT 1
) AS c
WHERE d.reason = 50013
或提高性能(根据 Felipe 的建议):
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
FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))
WHERE reason = 50013
) AS d
CROSS JOIN (
SELECT Network
FROM [bigdata:RawDebug.CarrierDetails]
WHERE Mcc = 289 AND Mnc = 88
LIMIT 1
) AS c