Я создаю таблицу и вставляю данные, как показано ниже
CREATE TABLE `mydb.mytable`(
`seq_num` decimal(18,0),
`ins_upd_flag` char(1)
)
stored as parquet;
INSERT OVERWRITE TABLE mydb.mytable
SELECT 10457 SEQ_NUM,'I' INS_UPD_FLAG UNION ALL
SELECT 10462,'I' UNION ALL
SELECT 10461,'I' UNION ALL
SELECT 10460,'I' UNION ALL
SELECT 10459,'I' UNION ALL
SELECT 10456,'I' UNION ALL
SELECT 10458,'I';
Как вы можете видеть выше, значением второго столбца является просто «I», и в нем нет никаких дополнительных символов.
Когда я запускаю следующий запрос, он ничего не дает
SELECT T.*, length(INS_UPD_FLAG), length(trim(INS_UPD_FLAG))
FROM mydb.mytable T
WHERE SEQ_NUM <> 0 OR INS_UPD_FLAG <> 'I' ;
Однако, если я запускаю следующий запрос, он возвращает все вставленные строки, как и ожидалось
SELECT T.*, length(INS_UPD_FLAG), length(trim(INS_UPD_FLAG)) -- both length =1
FROM mydb.mytable T
WHERE SEQ_NUM <> 0 OR TRIM(INS_UPD_FLAG) <> 'I' ;
Любое объяснение, почему это происходит и как решить то же самое?Мне нужны результаты без использования обрезки
Обратите внимание, что эта проблема возникает только при условии ИЛИ.Если я запускаю приведенный ниже запрос, я получаю результаты
SELECT T.*, length(INS_UPD_FLAG), length(trim(INS_UPD_FLAG))
FROM mydb.mytable T
WHERE SEQ_NUM <> 0 and INS_UPD_FLAG = 'I' ;
Кроме того, если я создаю таблицу с ORC или текстовым форматом, я получаю результаты без обрезки.