我正在尝试从snowflake读取数据并将其加载到其他存储位置。我用雪花jdbc驱动3.12.9来读取数据,用jackson库(2.10)来反序列化。
在其中一个用例中,我使用具有数组数据类型的列。下面是create table语句:create table test_table (array1 ARRAY)
。我通过以下命令将数据加载到表中。insert into test_table (array1) select array_construct(1,2,3,null)
。当我们对上述数据运行select查询时,数组中的空值被转换为未定义。例如,select array1 from test_table
,我们得到的输出为"[1, 2, 3, undefined]"
当用jackson反序列化数据时,我得到错误:Unrecognized token 'undefined': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
,因为未定义不是一个有效的json令牌。
null到undefined的转换只发生在数组元素为空的情况下,而不发生在整个数组为空的情况下。
一种解决方案是在雪花端编写自定义函数,并在查询数据时使用它,但随后我们必须在所有客户端添加此函数,我们不希望添加此函数成为阻塞。
有更好的方法来解决这个问题吗?任何建议、帮助都会很有帮助。我找不到一个简单的答案。因此,在构造数组时,我必须使用COALESCE
替换null,如:
select to_json(array_construct(coalesce(col1, '"null"'), coalesce(col2, '"null"')))