Могу ли я вывести строку даты и времени в Redshift и сделать столбец отметкой времени? - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно создать таблицу в Redshift, используя источник данных в S3. Есть пара столбцов, которые имеют дату и время как строковое значение. Я хочу, чтобы Redshift рассматривал это как метку времени. Если я просто назначу временную метку этим столбцам во время создания таблицы, сработает ли она или потребуются дополнительные шаги?

Причина, по которой эти столбцы представлены в виде строки, состоит в том, что эти столбцы были созданы кодом Python и сначала столкнулись с проблемой сериализации json: Как преодолеть «datetime.datetime not JSON serializable»?

Мои входные данные:

{
"created_date": "2019-06-21 23:32:28",
"resolved_date": ""
"last_updated_date": "2019-06-23 04:08:35"
}

В Redshift я хочу сделать столбцы в формате timestamp

"created_date": timestamp,
"resolved_date": timestamp,
"last_updated_date": timestamp

Будет ли Redshift распознавать мои данные и анализировать их как метку времени?

Любые указатели приветствуются.

1 Ответ

0 голосов
/ 27 июня 2019

При использовании спектра Redshift вы можете сопоставить поля string json с TIMESTAMP столбцами напрямую, но ваш пример не сработает из-за пустой строки для временной метки - это не разбирается - вам нужно убедиться, что Ваш код Python генерирует правильные JSON null s.

Это будет ваш внешний стол:

CREATE EXTERNAL TABLE my_external_schema.my_external_table(
    "created_date": timestamp,
    "resolved_date": timestamp,
    "last_updated_date": timestamp
  )
  ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
  STORED AS TEXTFILE
  LOCATION 's3://my_external_location/'

если вам действительно нужны эти данные, загруженные в красное смещение, вы можете сделать:

CREATE TABLE my_schema.my_table AS SELECT * FROM my_external_schema.my_external_table;

Другой вариант - использовать команду Redshift COPY для загрузки данных. Он также должен уметь обрабатывать json string как TIMESTAMP, и я полагаю, что вы можете указать, что "" следует указывать как NULL s.

...