2017-01-25 217 views
1

我很困惑爲什麼列標題輸出不同爲以下兩個查詢。記錄前綴丟失

select fullVisitorId , visitNumber, visitId, visitStartTime, date,totals.visits, totals.hits, totals.pageviews, totals.timeOnSite from 33959632.ga_sessions_20170124

前7列具有下列名稱返回。

visitorId | visitNumber | visitId | visitStartTime |日期| totals.visits | totals.hits

SELECT fullVisitorId , visitNumber, visitId, visitStartTime, date, 
totals.visits, totals.hits FROM `33959632.ga_sessions_20170101` 

結果低於現在有記錄前綴去掉。

fullVisitorId | visitNumber | visitId | visitStartTime |日期| 訪問|點擊次數

爲什麼Total已從訪問中刪除&點擊數?我們如何在結果中保留前綴名稱(除了手動命名列)。

回答

2

我覺得在GA - 每架構 - 該totals場不是一個數組,而是隻是記錄
那麼,試試下面爲什麼總被從訪問&點擊刪除

#standardSQL 
SELECT 
    fullVisitorId, 
    visitNumber, 
    visitId, 
    visitStartTime, 
    date, 
    STRUCT(totals.visits, totals.hits, totals.pageviews, totals.timeOnSite) AS totals 
FROM `33959632.ga_sessions_20170101` 

在選擇列表中,如果有不具有明確的別名的表達,大量查詢分配根據以下規則的隱含別名。

  • 標識符,別名是標識符。例如,SELECT abc意味着AS abc。
  • 對於路徑表達式,別名是路徑中的最後一個標識符。例如,SELECT abc.def.ghi意味着AS ghi。
  • 對於使用「點」成員字段訪問運算符的字段訪問,別名是字段名稱。例如,SELECT(struct_function()).fname意味着AS fname。

你可以閱讀更多關於Implicit aliases

而且你可以在一般的

1

如果您在標準SQL中選擇一個字段路徑,結果將具有路徑中葉字段的類型。如果你想製作一個結構,以反映原來的結構,你可以做例如爲:

#standardSQL 
SELECT 
    fullVisitorId, 
    visitNumber, 
    visitId, 
    visitStartTime, 
    date, 
    STRUCT(
    totals.visits, 
    totals.hits, 
    totals.pageviews, 
    totals.timeOnSite) AS totals 
FROM 33959632.ga_sessions_20170124; 

它返回結果的結構內的totals指定的領域。

+0

我的代碼閱讀更多關於​​以上是標準的SQL,我也取消扁平化的結果的選項。但它仍然會從所有內容中刪除記錄前綴。聽起來像是有必要使用你建議的代碼嗎?感謝您的答覆! – aubbies

+0

啊,我明白了。米哈伊爾最終給出了相同的答案,但基本的想法是,如果你想在結果中保留'totals'形狀,你應該使用'STRUCT'運算符。另一種方法是直接選擇「totals」,如果你想在結果中包含所有的字段。 –

+0

:o)在我回答的時候 - 這是我想的兩個不同的答案。但絕對是相同的概念。同意 –