sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLコピーのCSVからスキーマを生成する方法

    CSVが大きすぎず、ローカルマシンで利用できる場合は、 csvkit 最も簡単な解決策です。また、CSVを操作するための他のユーティリティも多数含まれているため、便利なツール 一般的に知っておくべきこと。

    シェルへの最も簡単な入力:

    $ 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 Spark
    • パンダ(Python)
    • ブレイズ(Python)
    • read.csv+Rのお気に入りのdbパッケージ

    これらはそれぞれ、CSV(およびその他の形式)を通常はDataFrameなどと呼ばれる表形式のデータ構造に読み込み、プロセスの列タイプを推測する機能を備えています。次に、同等のSQLスキーマを書き出すか、DataFrameを指定されたデータベースに直接アップロードする他のコマンドがあります。ツールの選択は、データの量、データの保存方法、CSVの特異性、ターゲットデータベース、および使用する言語によって異なります。



    1. mysql_queryでは成功するが、mysqli_queryでは失敗するインジェクション攻撃

    2. OracleデータベースがUPDATEクエリで無限にハングしている

    3. SQLを使用して月ごとの保持を計算する方法

    4. php.iniでoci8(Oracle)の拡張機能を有効にする方法-PHP警告:PHPスタートアップ:行0の不明