BigQuery - конвертировать строку в метку времени со значением по умолчанию - PullRequest
0 голосов
/ 24 января 2020

В BigQuery у меня есть столбец String, который содержит данные отметки времени. В запросе я хочу преобразовать его в столбец Timestamp.
Я знаю, что BigQuery имеет функции PARSE_TIMESTAMP и TIMESTAMP. Проблема в том, что эти данные поступают из внешнего источника, поэтому мне нужно быть готовым к тому, что ввод String может быть неправильной отметкой времени.
При использовании этих функций внутри запроса произойдет сбой, если ввод данных в неправильном формате.
Есть ли способ пропустить этот запрос даже с неверными входными данными? Например, чтобы изменить неправильный формат на null или какую-либо произвольную временную метку, например 1900-01-01 00:00:00.
Простая проверка регулярных выражений будет недостаточной. Например, 2020-02-29 00:00:00 является точной отметкой времени, но 2019-02-29 00:00:00 неверно.

1 Ответ

2 голосов
/ 24 января 2020

Вам нужно добавить префикс SAFE, чтобы получить значения NULL для недействительных данных.

SELECT safe.timestamp('2019-02-29 00:00:00') as tt

возвращает

[
  {
    "tt": null
  }
]

Если вы начинаете функцию с SAFE. префикс, он возвратит NULL вместо ошибки. БЕЗОПАСНЫЙ. Префикс предотвращает только ошибки самой префиксной функции: он не предотвращает ошибки, возникающие при оценке выражений аргументов. БЕЗОПАСНЫЙ. префикс предотвращает только ошибки, возникающие из-за значения входов функции, такие как ошибки «значение вне диапазона»; другие ошибки, такие как внутренние или системные ошибки, все еще могут возникать. Если функция не возвращает ошибку, SAFE. не влияет на вывод. Если функция никогда не возвращает ошибку, как RAND, тогда SAFE. не имеет никакого эффекта.

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#safe_prefix

...