Изменение типа данных в большом запросе Google: ошибка в поле даты

#google-bigquery

# #google-bigquery

Вопрос:

Я создал запрос для изменения типа данных Date столбца с String на Date

используемый запрос следующий:

 SELECT *, CAST(Date AS DATE) From `table_name`
 

Однако при выполнении запроса я получаю следующую ошибку:

Недопустимая дата: ’18/11/2020′

Может ли кто-нибудь помочь мне с этим?

Ответ №1:

Вместо этого используйте PARSE_DATE:

 SELECT 
  * EXCEPT (Date),
  PARSE_DATE('%d/%m/%Y', Date) AS Date 
From table_name
 

или

 SELECT 
  Account,
  Campaign_name,
  PARSE_DATE('%d/%m/%Y', Date) AS Date,
  Ad_set_name,
  Ad_name,
  Impressions,
  Cost__GBP_,
  Link_clicks,
  Reach,
  Website_conversions
From table_name
 

Комментарии:

1. ПРИВЕТ, я использовал предложенный вами запрос, но я получил следующую ошибку: несоответствие между символом формата ‘/’ и строковым символом ‘2’

2. Привет, вероятно, не все строки имеют формат 18/11/2020 . Попробуйте использовать SAFE.PARSE_DATE вместо этого. Для не проанализированных строк будет выдано значение NULL. Таким образом, вы сможете находить и исправлять такие строки.

3. ПРИВЕТ, я использовал ваш запрос, но создаю дополнительный столбец с именем f0 вместо перезаписи существующего поля «Дата» из строки в тип данных даты. Есть ли у вас какие-либо предложения о том, как сохранить одинаковое количество столбцов и перезаписать существующую схему поля даты?

4. Схема здесь: СТРОКА учетной записи, ОБНУЛЯЕМАЯ СТРОКА имя_кампании, ОБНУЛЯЕМАЯ СТРОКА даты, ОБНУЛЯЕМАЯ СТРОКА ИМЯ_РЕКЛАМЫ, ОБНУЛЯЕМАЯ СТРОКА ИМЯ_РЕКЛАМЫ, ОБНУЛЯЕМАЯ СТРОКА показов, ОБНУЛЯЕМАЯ ЦЕЛАЯ стоимость__GBP_ ОБНУЛЯЕМАЯ с ПЛАВАЮЩЕЙ ЗАПЯТОЙ Link_clicks ОБНУЛЯЕМАЯ с ПЛАВАЮЩЕЙ ЗАПЯТОЙ Reach ОБНУЛЯЕМАЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ Website_conversions ОБНУЛЯЕМАЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ f0_ ОБНУЛЯЕМАЯ ДАТА

5. Попробуйте явно ИСКЛЮЧИТЬ или перечислить все необходимые поля. Обновлен ответ.

Ответ №2:

Приведение строки к дате в стандартном SQL в BigQuery должно выполняться для строки в формате ГГГГ-ММ-ДД в соответствии с документацией.

Ваша строка находится в другом формате и не может быть преобразована функцией приведения.

Попробуйте функцию PARSE_DATE в BigQuery. Пример будет проанализирован следующим образом:

 SELECT PARSE_DATE("%d/%m/%Y", "18/11/2020") as parsed;