Импала не может прочитать метку времени без даты из файла Parquet - PullRequest
0 голосов
/ 30 августа 2018

Impala v2.11.0 + (CDH v5.11.1 +) не может читать временные метки только со значением времени из файла Parquet.

create table TT2(t timestamp) STORED AS PARQUET;
insert into TT2 (t) values ("10:00:00");
select * from TT2;
+------+
| t    |
+------+
| NULL |
+------+
WARNINGS: Parquet file 'hdfs://localhost:20500/test-warehouse/tt2/714d741212df3180-cd4e670800000000_226739479_data.0.parq' column 't' contains an out of range timestamp. The valid date range is 1400-01-01..9999-12-31.`

https://issues.apache.org/jira/browse/IMPALA-5942

Несмотря на то, что оператор выбора возвращает ноль, менеджер метастазов показывает, что столбец имеет значение

4714-12-30 10: 00: 00,0

То, что я ищу, - это альтернативный способ запроса этих данных, чтобы получить значение времени вместо того, чтобы вручную находить и преобразовывать все столбцы отметок времени без даты в строку.

Я пробовал

SELECT cast(t as string) FROM TT2

SELECT date_part('hour', t) FROM TT2

SELECT from_timestamp(tms, "HH:mm:ss") FROM TT2

SELECT extract(tms, "hour") FROM TT2

SELECT extract(cast(tms as string), "hour") FROM TT2

1 Ответ

0 голосов
/ 18 января 2019

Я полагаю, что поскольку вас интересует только часть времени, я бы предложил просто заменить часть даты на некоторую приемлемую дату, а затем Impala предоставляет функции для извлечения времени из метки времени (все ваши дальнейшие запросы к данным могут сделать использование этого), так что я думаю, что одно из возможных решений

1) Создайте временную таблицу, в которой столбец отметки времени является строкой

2) Теперь вы получите значение типа "4714-12-30 10: 00: 00.0"

3) теперь вы должны что-то делать, а) использовать split_apart для извлечения 10: 00: 00.0 б) сопоставить извлеченную часть с "2018-11-12" так что теперь вы можете получить значения в формате "2018-11-12 10: 00: 00.0"

4) Теперь результат предыдущего шага может быть приведен к отметке времени

5) Используйте select [имена столбцов col1,2,3, ..], (cast (concat ("2018-11-12", split_apart (col, delim, index))) в качестве метки времени) для вставки данных в исходную таблицу из временной таблицы

...