如何使用from_csv结合schema_of_csv解析表列中的嵌套CSV数据?
解析未知结构的表内CSV列
schema_of_csv()的参数要求是字符串字面量,没法直接传入列名,得先从表中提取CSV样本生成Schema,再用这个Schema解析全量数据,具体步骤如下:
1. 生成CSV对应的Schema
先从表中取一条(或多条)有代表性的CSV记录,生成匹配的Schema:
-- 取单条样本生成Schema SELECT schema_of_csv((SELECT csv_col FROM csv_data_table LIMIT 1)) AS csv_schema;
如果担心单条样本字段不全,可合并多条样本生成更准确的Schema:
-- 合并前10条样本,用换行分隔后生成Schema SELECT schema_of_csv(string_agg(csv_col, '\n')) AS csv_schema FROM csv_data_table LIMIT 10;
执行后会得到类似'id INT, username STRING, signup_date DATE'的Schema字符串。
2. 用生成的Schema解析全表数据
把上面得到的Schema字符串代入from_csv(),解析所有CSV列:
-- 替换为你实际生成的Schema字符串 SELECT from_csv(csv_col, 'id INT, username STRING, signup_date DATE') AS csv_data FROM csv_data_table;
动态生成Schema并解析(无需手动复制Schema)
如果不想手动复制Schema字符串,可通过CTE动态获取并解析:
WITH csv_sample AS ( -- 取多条样本合并成一个CSV块 SELECT string_agg(csv_col, '\n') AS sample_csv FROM csv_data_table LIMIT 10 ), generated_schema AS ( -- 基于样本生成Schema SELECT schema_of_csv(sample_csv) AS schema_str FROM csv_sample ) -- 用动态生成的Schema解析全表 SELECT from_csv(c.csv_col, s.schema_str) AS csv_data FROM csv_data_table c CROSS JOIN generated_schema s;
内容的提问来源于stack exchange,提问作者Oleksandr Baranov
相关产品推荐
相关产品推荐

