DateTime вынужден UnixTime в BigQuery - PullRequest
0 голосов
/ 08 января 2020

У меня возникли некоторые проблемы с загрузкой в ​​BQ, и поэтому я подумал, что было бы неплохо написать здесь и попросить совета. У меня есть набор данных медицинской информации (да, у меня есть разрешение разместить его на BQ). Набор данных содержит такие вещи, как общий поиск теста и другую информацию типа строки, которую BQ без проблем принимает. Вот схема, которую мы в настоящее время ожидаем в BQ

a                       STRING       NULLABLE   
b                       STRING       NULLABLE   
c                       STRING       NULLABLE   
d                       STRING       NULLABLE   
reportDate              DATETIME     NULLABLE   
f                       STRING       NULLABLE   

Вот типы каждого столбца из экспортируемого мной Pandas кадра данных, где object - это просто строки

a                                object
b                                object
c                                object
d                                object
reportDate               datetime64[ns]
f                                object

Однако ДЕЙСТВИТЕЛЬНО не нравится время, которое у меня есть. Он только примет это, я устанавливаю ТИП в Схеме как «INTEGER» или если он позволяет BQ выводить тип, в этом случае он сам конвертирует его в целое число. Что-нибудь еще, и это не удастся. Вот три ошибки, которые я получаю, когда говорю, что в качестве поля типа datetime нужно указывать

 Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the errors[] collection for more details. 
 Error while reading data, error message: JSON processing encountered too many errors, giving up. Rows: 1; errors: 1; max bad: 0; error percent: 0 
 Error while reading data, error message: JSON parsing error in row starting at position 0: Could not convert non-string JSON value to DATETIME type. Field: reportDate; Value: 1501874143000 

Моя команда хочет, чтобы в качестве datetime она использовалась, потому что с ними гораздо проще работать в этом формате. Кто-нибудь советует, что делать?

Я включил первые 5 элементов из серии Pandas, которую я использую, и мы видим, что dtype - это datetime64. Я даже отфильтровал только эти 5 примеров для загрузки в BQ, но эта проблема все еще возникает.

 0   2017-08-04 19:15:43 
 1   2017-08-04 16:36:46 
 2   2017-08-04 19:15:47 
 3   2017-08-04 16:36:51 
 4   2017-08-04 17:42:21 
Name: reportDate, dtype: datetime64[ns] 

Спасибо за всех, кто может предложить некоторую помощь!

1 Ответ

1 голос
/ 08 января 2020

Похоже, ваш код сохраняет это поле как дату эпохи (unix время). Поскольку невозможно загрузить поле INTEGER как TIMESTAMP в BigQuery, я могу посоветовать вам две возможные вещи:

  1. Вы можете загрузить поле как INTEGER и использовать Функция USEC_TO_TIMESTAMP BigQuery для преобразования даты эпохи в TIMESTAMP. Вы можете найти другие функции времени здесь
  2. Вы можете попытаться найти, если есть какой-либо способ сохранить ваше поле с другим форматом даты в Pandas

Надеюсь, это поможет вам

...