DuckDB命令行:如何按行将json_content导出到对应file_name文件?
解决方案
因为DuckDB的分区写入无法直接将列值作为文件名,且会生成固定目录结构,所以可以通过以下两种方法实现需求:
方法一:生成动态SQL脚本批量执行
- 生成对应每行的
COPY命令并导出到SQL脚本文件:
duckdb 你的数据库文件名.db -s "SELECT 'COPY (SELECT json_content FROM export WHERE id = ' || id || ') TO ''' || file_name || ''';' FROM export;" > export_scripts.sql
- 执行生成的脚本完成导出:
duckdb 你的数据库文件名.db < export_scripts.sql
方法二:用Shell命令循环处理
如果json_content不含特定分隔符(比如|),可以直接导出为CSV并通过awk写入文件:
duckdb 你的数据库文件名.db -s "COPY (SELECT file_name, json_content FROM export) TO STDOUT (FORMAT CSV, DELIMITER '|');" | awk -F'|' '{print $2 > $1}'
这种方式无需生成中间SQL脚本,直接通过管道完成每行内容到对应文件的写入。
注意:如果
json_content中包含你指定的分隔符,需要更换一个不会出现在JSON里的分隔符,避免内容分割错误。
内容的提问来源于stack exchange,提问作者Sascha
相关产品推荐
相关产品推荐

