如何从CSV为PostgreSQL副本生成架构

给定一个包含几十列或更多列的CSV,如何创建可用于PostgreSQL中的CREATE TABLE SQL表达式中的“模式”,以便与复制工具一起使用

我看到了大量的复制工具和基本的创建表表达式的示例,但是对于手动创建模式的列数可能过高的情况,没有详细介绍

如果CSV不太大并且在本地计算机上可用,那么csvkit是最简单的解决方案。它还包含许多用于处理CSV的其他实用程序,因此它通常是一个有用的工具

以最简单的方式在shell中键入:

$csvsql myfile.csv

将打印出所需的CREATE TABLESQL命令,该命令可以使用输出重定向保存到文件中

如果您还提供了连接字符串,csvsql将创建表并一次性上载文件:

$csvsql--db“$MY_db_URI”--插入myfile.csv

还有一些选项可以指定您正在使用的SQL和CSV的风格。它们记录在内置帮助中:

$csvsql-h
用法:csvsql[-h][-d分隔符][-t][-q QUOTECHAR][-u{0,1,2,3}][-b]
[-p ESCAPECHAR][z MAXFIELDSIZE][e编码][S][H][v]
[--0][-y嗅探极限]
[-i{access、sybase、sqlite、informix、firebird、mysql、oracle、maxdb、postgresql、mssql}]
[--db连接\u字符串][--查询][--插入]
[--表格表格名称][--无约束][--无创建]
[--blanks][--no推断][--db schema db_schema]
[文件[文件…]]
为一个或多个CSV文件生成SQL语句,创建并执行这些语句
语句,并执行一个或多个SQL查询。
位置参数:
归档要操作的CSV文件。如果省略,将接受
输入标准输入。
可选参数:
-h、 --帮助显示此帮助消息并退出
-分隔符,--分隔符分隔符
输入CSV文件的分隔字符。
-t、 --制表符指定输入CSV文件用分隔符分隔
标签。覆盖“-d”。
-q QUOTECHAR,--QUOTECHAR QUOTECHAR
用于在输入CSV文件中引用字符串的字符。
-u{0,1,2,3},--引用{0,1,2,3}
输入CSV文件中使用的引用样式。0=报价
最小值,1=全部报价,2=非数字报价,3=
没有。
-b、 --双引号输入中双引号是否加倍
CSV文件。
-p ESCAPECHAR,--ESCAPECHAR ESCAPECHAR
用于在--quoting 3时转义分隔符的字符
(“Quote None”)被指定,并转义
如果未指定--doublequote,则为QUOTECHAR。
-z MAXFIELDSIZE,--MAXFIELDSIZE MAXFIELDSIZE
输入CSV中单个字段的最大长度
文件
-e编码,--编码编码
指定输入CSV文件的编码。
-S、 --滑雪初始空间
忽略紧跟在分隔符后面的空白。
-H、 --无标题行指定输入CSV文件没有标题行。
将创建默认标题。
-v、 --发生错误时详细打印详细回溯。
--零在解释或显示列号时,请使用
以零为基础的编号,而不是默认的以1为基础的编号
编号。
-y SNIFFLIMIT,--SNIFFLIMIT SNIFFLIMIT
将CSV方言嗅探限制为指定的
字节。指定“0”以完全禁用嗅探。
-i{access,sybase,sqlite,informix,firebird,mysql,oracle,maxdb,postgresql,mssql},--方言{access,sybase,sqlite,informix,firebird,mysql,oracle,maxdb,postgresql,mssql}
要生成的SQL方言。仅当--db为
未指定。
--数据库连接字符串
如果存在,则使用sqlalchemy连接字符串
直接在数据库上执行生成的SQL。
--查询执行一个或多个以“;”和分隔的SQL查询
将上次查询的结果输出为CSV。
--插入除创建表外,还插入
将数据输入到表中。仅当--db为
明确规定。
--tables TABLE_name为要创建的表指定一个或多个名称
创建。如果省略,文件名(减去扩展名)或
将使用“标准输入”。
--没有约束生成没有长度限制或空值的架构
检查。在对大表进行采样时非常有用。
--不创建跳过创建表。仅当--insert为时有效
明确规定。
--空格不会将空字符串强制为空值。
--无推断在分析输入时禁用类型推断。
--数据库模式
要创建表的数据库架构的可选名称
在里面

其他几个工具也可以进行模式推断,包括:

  • 阿帕奇火花
  • 熊猫(蟒蛇)
  • Blaze(Python)
  • read.csv+R中您最喜欢的db包

其中每一个都具有将CSV(和其他格式)读入表格数据结构(通常称为DataFrame或类似格式)的功能,从而推断过程中的列类型。然后,它们可以使用其他命令写出等效的SQL模式,或者将数据帧直接上载到指定的数据库中。工具的选择取决于数据量、存储方式、CSV的特性、目标数据库和您喜欢使用的语言

发表评论