#postgresql #jdbc #apache-flink
#postgresql #jdbc #apache-flink
Вопрос:
Я считываю данные из базы данных PostgreSQL в Flink и использую Table API и SQL. По-видимому, мой столбец временной метки (называемый inserttime) имеет тип TIMESTAMP(6) WITH LOCAL TIME ZONE NOT NULL
. Но когда я выполняю SQL-запрос типа SELECT inserttime FROM books
, Flink жалуется, что это неподдерживаемый тип, с ошибкой Unsupported type:TIMESTAMP(6) WITH LOCAL TIME ZONE NOT NULL
.
- Это из-за
NOT NULL
в конце? Если да, то как я должен использовать его так, чтобы он мог быть прочитан Флинком? - Я пытался использовать UDF, чтобы преобразовать его во что-то читаемое с помощью Flink, как показано ниже:
public static class TimestampFunction extends ScalarFunction {
public java.sql.Timestamp eval (java.sql.Timestamp t) {
// do some conversion
}
}
Очевидно, что сигнатура функции eval неверна, но мне интересно, может ли это быть способом заставить Flink прочитать мой тип метки времени? Если да, то какой должна быть сигнатура функции eval?
- Я также пытался это сделать
CAST(inserttime as TIMESTAMP)
, но возникает та же ошибка неподдерживаемого типа.
Есть идеи?
Комментарии:
1. Представление базы данных, определяющее тип данных, скорее всего, поможет…
2. Какая версия Postgres и откуда вы ее взяли? АФАИК нет
TIMESTAMP() WITH LOCAL TIME ZONE
. Использование клиентаpsql
для чегоd books
отображается типinserttime
данных? Также версия и исходный код драйвера JDBC?3. Я использую postgresql-42.2.10.jar .
inserttime
имеет JDBCType ofTIMESTAMP
.