gpt4 book ai didi

postgresql - 如何从 CSV 为 PostgreSQL 副本生成模式

转载 作者:行者123 更新时间:2023-11-29 11:09:36 24 4
gpt4 key购买 nike

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

我看到了很多关于 COPY 工具和基本 CREATE TABLE 表达式的示例,但是没有详细说明当您有可能禁止手动创建模式的列数时的情况。

最佳答案

如果 CSV 不是太大并且在您的本地计算机上可用,则 csvkit是最简单的解决方案。它还包含许多用于处理 CSV 的其他实用程序,因此它是一个 usefull tool大致了解。

在最简单的 shell 中输入:

$ csvsql myfile.csv

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

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

$ csvsql --db "$MY_DB_URI" --insert myfile.csv

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

$ csvsql -h
usage: csvsql [-h] [-d DELIMITER] [-t] [-q QUOTECHAR] [-u {0,1,2,3}] [-b]
[-p ESCAPECHAR] [-z MAXFIELDSIZE] [-e ENCODING] [-S] [-H] [-v]
[--zero] [-y SNIFFLIMIT]
[-i {access,sybase,sqlite,informix,firebird,mysql,oracle,maxdb,postgresql,mssql}]
[--db CONNECTION_STRING] [--query QUERY] [--insert]
[--tables TABLE_NAMES] [--no-constraints] [--no-create]
[--blanks] [--no-inference] [--db-schema DB_SCHEMA]
[FILE [FILE ...]]

Generate SQL statements for one or more CSV files, create execute those
statements directly on a database, and execute one or more SQL queries.
positional arguments:
FILE The CSV file(s) to operate on. If omitted, will accept
input on STDIN.

optional arguments:
-h, --help show this help message and exit
-d DELIMITER, --delimiter DELIMITER
Delimiting character of the input CSV file.
-t, --tabs Specifies that the input CSV file is delimited with
tabs. Overrides "-d".
-q QUOTECHAR, --quotechar QUOTECHAR
Character used to quote strings in the input CSV file.
-u {0,1,2,3}, --quoting {0,1,2,3}
Quoting style used in the input CSV file. 0 = Quote
Minimal, 1 = Quote All, 2 = Quote Non-numeric, 3 =
Quote None.
-b, --doublequote Whether or not double quotes are doubled in the input
CSV file.
-p ESCAPECHAR, --escapechar ESCAPECHAR
Character used to escape the delimiter if --quoting 3
("Quote None") is specified and to escape the
QUOTECHAR if --doublequote is not specified.
-z MAXFIELDSIZE, --maxfieldsize MAXFIELDSIZE
Maximum length of a single field in the input CSV
file.
-e ENCODING, --encoding ENCODING
Specify the encoding the input CSV file.
-S, --skipinitialspace
Ignore whitespace immediately following the delimiter.
-H, --no-header-row Specifies that the input CSV file has no header row.
Will create default headers.
-v, --verbose Print detailed tracebacks when errors occur.
--zero When interpreting or displaying column numbers, use
zero-based numbering instead of the default 1-based
numbering.
-y SNIFFLIMIT, --snifflimit SNIFFLIMIT
Limit CSV dialect sniffing to the specified number of
bytes. Specify "0" to disable sniffing entirely.
-i {access,sybase,sqlite,informix,firebird,mysql,oracle,maxdb,postgresql,mssql}, --dialect {access,sybase,sqlite,informix,firebird,mysql,oracle,maxdb,postgresql,mssql}
Dialect of SQL to generate. Only valid when --db is
not specified.
--db CONNECTION_STRING
If present, a sqlalchemy connection string to use to
directly execute generated SQL on a database.
--query QUERY Execute one or more SQL queries delimited by ";" and
output the result of the last query as CSV.
--insert In addition to creating the table, also insert the
data into the table. Only valid when --db is
specified.
--tables TABLE_NAMES Specify one or more names for the tables to be
created. If omitted, the filename (minus extension) or
"stdin" will be used.
--no-constraints Generate a schema without length limits or null
checks. Useful when sampling big tables.
--no-create Skip creating a table. Only valid when --insert is
specified.
--blanks Do not coerce empty strings to NULL values.
--no-inference Disable type inference when parsing the input.
--db-schema DB_SCHEMA
Optional name of database schema to create table(s)
in.

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

  • Apache 星火
  • Pandas ( python )
  • 大火( python )
  • read.csv + 你最喜欢的 R 数据库包

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

关于postgresql - 如何从 CSV 为 PostgreSQL 副本生成模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com