我目前正在使用DuckDB来执行数据转换,使用一个parquet文件作为源。在这个parquet文件中,我有一列编码为字符串,其中包含一个json记录数组:[{...}, {...}, {...}]
我想操作这个record数组,就好像它是一个jsons的列表列。
我尝试使用duckDB标量函数阅读此列,但不幸的是,此列无法正确解析,并且我无法在标量函数中设置json_format,因为我可以使用read_json_objects
函数。
我能做些什么来解决这个问题吗?*
下面是一个可重现的示例,其中包含输入表和输出表。
-- Build the table and populate it with a string
-- column with an array of json records
CREATE TABLE input(data VARCHAR);
INSERT INTO input VALUES ('[{"id": "1", "status":"ok"}, {"id":"2", "status":"ok"}]');
-- Build the output table and populate it with
-- a json column with an list
CREATE TABLE output(data JSON);
INSERT INTO output (data) VALUES (ARRAY['{"id": "1", "status": "ok"}', '{"id": "2", "status": "ok"}']);
1条答案
按热度按时间kupeojn61#
您需要为您的用例使用DuckDB的一些文本函数。https://duckdb.org/docs/sql/functions/char
通常,您可以使用DuckDB的
string_split
将VARCHAR
分隔为VARCHAR
s(或在您的情况下为JSON
s)的列表。在您的示例中,JSON
中的逗号与分隔JSON
s的逗号冲突。我的解决方案可能有点古怪,但我希望它对你有用。我去掉了最左边和最右边的括号,然后用}},
替换},
,以避免逗号分隔符的混淆,然后将VARCHAR
拆分为一个JSON
列表,并使用},
作为分隔符。