2015-08-14 4 views
1

Предположим, у меня есть следующий JSON, который является результатом анализа параметров URL-адресов из файла журнала.Схема загрузки JSON в Google BigQuery

{ 
    "title": "History of Alphabet", 
    "author": [ 
     { 
      "name": "Larry" 
     }, 
    ] 
} 

{ 
    "title": "History of ABC", 
} 

{ 
    "number_pages": "321", 
    "year": "1999", 
} 

{ 
    "title": "History of XYZ", 
    "author": [ 
     { 
      "name": "Steve", 
      "age": "63" 
     }, 
     { 
      "nickname": "Bill", 
      "dob": "1955-03-29" 
     } 
    ] 
} 

Все поля в верхнем уровне, "название", "автор", "number_pages", "год" не являются обязательными. А также поля на втором уровне, например, внутри «автора».

Как мне создать схему для этого JSON при загрузке в BQ?

Связанный вопрос: Например, предположим, что есть другая подобная таблица, но данные с другой даты, поэтому возможно иметь другую схему. Можно ли запросить эти две таблицы?

ответ

2

Как мне создать схему для этого JSON при загрузке в BQ?

Следующая схема должна работать. Вы можете изменить некоторые типы (например, возможно, вы хотите, чтобы поле dob было TIMESTAMP вместо STRING), но общая структура должна быть аналогичной. Поскольку типы по умолчанию равны NULLABLE, все эти поля должны обрабатываться не для данной строки.

[ 
    { 
     "name": "title", 
     "type": "STRING" 
    }, 
    { 
     "name": "author", 
     "type": "RECORD", 
     "fields": [ 
      { 
       "name": "name", 
       "type": "STRING" 
      }, 
      { 
       "name": "age", 
       "type": "STRING" 
      }, 
      { 
       "name": "nickname", 
       "type": "STRING" 
      }, 
      { 
       "name": "dob", 
       "type": "STRING" 
      } 
     ] 
    }, 
    { 
     "name": "number_pages", 
     "type": "INTEGER" 
    }, 
    { 
     "name": "year", 
     "type": "INTEGER" 
    } 
] 

Смежный вопрос: Например, предположим, что есть другая аналогичная таблица, но данные от другой даты, так что можно иметь другую схему. Можно ли запросить эти две таблицы?

Должно быть возможным объединение двух таблиц с различными схемами без особых трудностей.

Вот краткий пример того, как он работает над публичными данными (вид глупого примера, поскольку таблицы содержат нулевые поля в общем, но показывает концепцию):

SELECT * FROM 
    (SELECT * FROM publicdata:samples.natality), 
    (SELECT * FROM publicdata:samples.shakespeare) 
LIMIT 100; 

Обратите внимание, что вам понадобится SELECT * вокруг каждой таблицы, или запрос будет жаловаться на разные схемы.

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