2015-11-16 12 views
1

У меня есть большой CSV-файл и содержит неправильный формат timestamp (8/1/2014 0:03:00) и вы хотите импортировать его в BigQuery. Как преобразовать его в другой формат (2014-08-19 07: 41: 35.220)?Преобразование метки времени в другой формат

ERROR во время процесса

File: 0/Line:1/Field:1, Could not parse '8/1/2014 0:03:00' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]] 

ответ

1

Используйте UDF, чтобы преобразовать в метку времени, или использовать regexp, чтобы преобразовать его в формат строки ожидаемого BigQuery перед кастинг на метку времени.

1

Вот пример использования вашей отметки времени. Я столкнулся с подобными проблемами и придумал что-то вроде этого.

SELECT 
    CONCAT(year,"-",month,"-",day," ",clock) as bq_formatted_date, 
FROM 
    (
    SELECT 
     IF(LENGTH(REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')) = 1, CONCAT("0",REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')), REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')) as month, 
     IF(LENGTH(REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')) = 1, CONCAT("0",REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')),REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')) as day, 
     REGEXP_EXTRACT(date_orig, r'.*\/([0-9]+)') as year, 
     REGEXP_EXTRACT(date_orig, r'([0-9]+:[0-9]+:[0-9]+)') as clock 
    FROM (SELECT "8/1/2014 0:03:00" as date_orig) 
    ) 

Который дает вам это как результат 2014-08-01 0:03:00. Это регулярное выражение будет вводить одиночные цифры месяца или дни с начальным нулем.

+0

но я должен указать схему перед импортом, как я могу запустить запрос перед импортом таблицы? – Balazs

+1

Импортировать в виде строки, а затем использовать этот запрос для его последующего преобразования. –

0

В качестве альтернативы, поскольку это CSV-файл, вы можете использовать наши источники федеративных данных (https://cloud.google.com/bigquery/federated-data-sources) для непосредственного запроса файла CSV и выполнения преобразования при импорте данных. Запрос по-прежнему будет таким же, как предлагает Стив.

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