2017-01-25 3 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 | дата | totalals.visits | totals.hits

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

Результаты ниже в настоящее время имеют префикс Всего запись удалена.

fullVisitorId | visitNumber | visitId | visitStartTime | дата | посещений | хиты

Почему всего было удалено из посещений & Удар? Как мы можем сохранить имя префикса в результатах (помимо ручного присвоения имени столбцу).

ответ

2

Я думаю, что в ГА - на схеме - totals поле не является массивом, а просто записать
Итак, попробуйте ниже

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

Почему Всего было удалено из визитов & Hits?

В списке SELECT, если имеется выражение, которое не имеет явного псевдонима, BigQuery назначает неявный псевдоним в соответствии со следующими правилами.

  • Для идентификаторов псевдоним является идентификатором. Например, SELECT abc подразумевает AS abc.
  • Для выражений пути псевдоним является последним идентификатором пути. Например, SELECT abc.def.ghi подразумевает AS ghi.
  • Для доступа к полю с использованием оператора доступа к полю «точка» псевдоним - это имя поля. Например, SELECT (struct_function()). Fname подразумевает AS fname.

Вы можете прочитать больше о Implicit aliases

И вы можете прочитать больше о 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

А, я вижу. Михаил в итоге дал тот же ответ, но основная идея заключается в том, что если вы хотите сохранить форму «итогов» в результате, вы должны использовать оператор «STRUCT».Альтернативой является просто выбрать 'totals' напрямую, если вы хотите включить все его поля в результат. –

+0

: o) в то время, когда я ответил - это были два разных ответа, которые я думаю. но определенно такая же концепция. дать согласие –

Смежные вопросы