2017-06-01 69 views
1

我需要查詢了所有表相同的聚合統計配套一些命名方案:無法識別的列

SELECT 
    SUBSTR(CONCAT('20', _TABLE_SUFFIX), 0, 10) AS date, 
    CASE 
    WHEN ENDS_WITH(_TABLE_SUFFIX, 'mobile') THEN 'mobile' 
    ELSE 'desktop' 
    END AS client, 
    APPROX_QUANTILES(bytesJS,1000)[OFFSET(500)] AS p50 
FROM 
    `httparchive.runs.20*` 
WHERE 
    ENDS_WITH(_TABLE_SUFFIX, '_pages') 
    OR ENDS_WITH(_TABLE_SUFFIX, '_pages_mobile') 
GROUP BY 
    1, 
    2 
ORDER BY 
    1, 
    2 

但是,查詢與Error: Unrecognized name: bytesJS at [7:20]

應該有大約150個表失敗與查詢匹配。以下是其中一個表格的模式:https://bigquery.cloud.google.com/table/httparchive:runs.2017_05_15_pages

bytesJS是一個有效的列名稱,但它無法識別。用不同的已知列替換時出現同樣的錯誤。我不確定這是使用表通配符還是什麼的直接結果。

我會重寫這與遺留SQL,看看是否有效,但我的查詢需要選擇表元數據。

這是否與通配符不兼容?

+0

另請注意,刪除APPROX_QUANTILES行會產生有效結果,所以錯誤肯定與bytesJS有關。 –

回答

2

這是一個可行的版本:

#standardSQL 
SELECT 
    SUBSTR(CONCAT('20', _TABLE_SUFFIX), 0, 10) AS date, 
    CASE 
    WHEN ENDS_WITH(_TABLE_SUFFIX, 'mobile') THEN 'mobile' 
    ELSE 'desktop' 
    END AS client, 
    APPROX_QUANTILES(bytesJS,1000)[OFFSET(500)] AS p50 
FROM 
    `httparchive.runs.2017_05_15_pages*` 
#WHERE 
    #ENDS_WITH(_TABLE_SUFFIX, '_pages') 
    #OR ENDS_WITH(_TABLE_SUFFIX, '_pages_mobile') 
GROUP BY 
    1, 
    2 
ORDER BY 
    1, 
    2 

發生了什麼事:

  • httparchive.runs.20*包括不具備bytesJS列一些表格,因此該列不考慮其他地區查詢。
  • 在查詢查找(_TABLE_SUFFIX, '_pages') OR (_TABLE_SUFFIX, '_pages_mobile')時,更改查詢假定模式爲時已晚。

解決方案:

  • FROM prefix*表水珠不會在這裏工作,你必須運行表的經典UNION。
+0

啊我明白了。所以這將是將運行數據集分成頁面和請求數據集的一個很好的理由。它必須是造成問題的請求表。 –

+0

是的......另一種「方便」的解決方案是將類型作爲前綴 –

+0

Felipe,你知道是否有辦法使用COALESCE或IFNULL來解決「無法識別的名稱」問題? –