Метка времени против авро схемы - PullRequest
0 голосов
/ 29 мая 2019

У меня есть планировщик Vertica, который использует авро-данные от Кафки. один из столбцов Vertica - TIMESTAMP, в настоящее время я попытался определить схему Avro, как показано в следующем примере:

 {
     "name":"startDate",
     "type": "long",
     "logicalType": "timestamp-millis"
  },

Проблема в том, что моему планировщику не удалось получить данные, и я также не могу найти никаких ошибок в таблицах планировщика Vertica. Любая идея, что мне нужно изменить в схеме авро?

Ответы [ 2 ]

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

Поскольку я пытался указать в своем последнем ответе, который по какой-то причине был удален, вы не можете выполнять преобразование типов или преобразование данных, поступивших в планировщик.

Чтобы получить правильную метку времени, у вас есть двапараметры:

  1. Выполните преобразование с помощью Kafka Connect, используя преобразования одного сообщения, на которые я ссылался в исходном удаленном ответе (https://docs.confluent.io/current/connect/transforms/timestampconverter.html), или
  2. Скопируйте данныеиз Kafka как есть и выполните преобразование после того, как вы скопировали данные в таблицу Vertica или гибкую таблицу.

Чтобы выполнить второй вариант, вы бы взяли эпоху метки времени из миллиметра из Kafka, чтобы разделить еена 1000, а затем используйте функцию * 1013. * Если эпоха метки времени Кафки была 1556204536000, то вы можете выполнить следующий SQL, чтобы получить фактическую метку времени:

SELECT TO_TIMESTAMP(1556204536000 / 1000);

, которая будет возвращать значение:

2019-04-25 15:02:16

Однако второй вариант потребует от вас новых преобразований каждый раз, когда вы получаете новые данные, поэтому он действительно полезен только в том случае, если вывы используете Kafka для массовых загрузок.

Лучше всего использовать преобразования одного сообщения или найти какой-либо другой способ преобразования столбцов меток времени в строковый формат перед отправкой данных в Kafka.Vertica примет строку в столбце TIMESTAMP, поэтому вам не нужно будет выполнять кастинг на стороне Vertica.

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

Я думаю, что ваша проблема может заключаться в том, что временная метка Vertica не является временем эпохи Unix в миллисекундах (что имеет ваша схема Avro)

https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/DataTypes/Date-Time/DateTimeDataTypes.htm

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

https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Formatting/TO_TIMESTAMP.htm

...