我有很多CSV,这些原始数据要放入一个主表中。我已将所有CSV导入为临时表。然后,我必须使用子字符串从临时表中提取特定的对应信息。当值为atomic时,此方法适用于状态列(varchar)。
当值不是原子的并且我不能使用字符串文字时,如何为attribute_list列(json)执行此操作?
INSERT INTO master_table (data_file_name, state, attribute_list)
SELECT
'example_name', substring(data, 1, 2),
'{"percent_green_cover_august" : substring(data, 61, 2),
"percent_green_cover_september" : substring(data, 63, 2)}'
FROM temp_table;
编辑:问题是我从CSV上传了大约200个临时表。它们都是不同的。它们包含一个字段data(varchar),它是一系列空格和数字,例如:
11 1134 4446 48685 989
15 4 4 4 78 90 09
01932938 838490 111
11 1
我有一个excel文件,其中包含代表每个CSV的行,并且列标题与值所代表的内容相对应。然后,我使用Python生成insert into语句。最初,每个列标题都将是数据库中自己的字段,但这将生成2000多个唯一列。
我建议您取消temp_table
。在Postgres中包含原始CSV文本没有太大价值。
如果您的CSV文件具有一组固定的字段,请创建一个表,该表的所有列均与CSV相同。然后使用copy
导入CSV。
copy
路径是在服务器上。如果数据库不是本地数据库,则必须从STDIN复制或使用COPY your_table(your, columns)
FROM '/your/csv/file.csv' DELIMITER ',' CSV HEADER;
。大多数Postgres数据库接口都提供/copy
from psql方法,使复制本地文件变得容易。
如果您的CSV文件没有固定的字段集,而您需要JSON,则在Postgres中这样做没有任何好处。使用您喜欢的编程语言进行处理会更简单。解析CSV文件,将字段转换为JSON对象,然后插入成品。
[构建JSON时,请勿手动构建。使用/copy
,例如copy
。
[再见,太空牛仔。