INSERT em uma tabela Datalake que é particionada em uma expressão resulta em um erro inesperado
Ao inserir em uma tabela Datalake que é particionada em uma expressão, ocorrerá um erro se os dados inseridos fizerem com que a expressão usada para a chave de particionamento seja inválida.
Sintomas
Por exemplo, o cenário a seguir resultará em um erro:
CREATE datalake table t1 (c1 varchar(20), c2 decimal(10,5)) partitioned by (trunc(10,c1) as mypart) TBLPROPERTIES ('external.table.purge'='true') location 'db2remote://odfdefault//default/t1'
DB20000I The SQL command completed successfully.
insert into t1 (c1,c2) values ('abc',10)
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0420N Invalid character found in a character string argument of the
function "INTEGER". SQLSTATE=22018
Causas
Quando uma tabela Datalake é definida para ser particionada em uma expressão, a expressão é avaliada para cada linha de inserção e, se a expressão for inválida, um erro será retornado. No exemplo acima, é retornado um erro porque a função TRUNC está esperando um argumento numérico para c1, e 'abc' foi usado como entrada.
Resolvendo o problema
Altere os dados da inserção para que a expressão possa ser processada com sucesso. Exemplo de inimigo:
insert into t1 (c1,c2) values ('1234567890',10)
DB20000I The SQL command completed successfully