MonetDBのnewテーブルにレコードをコピーできるかどうか混乱しています。
公式ドキュメント らしい 既存のテーブルへのコピーについてのみ説明します。私は数十のテーブルに数十億のレコードの非常に大きなユニバースを持っているので、CSV自体からタイプを推測し、最初の行から列名を推測するソリューションを強く望んでいます。
StackOverflowの回答OpenRowset
を使用するSQLServer 2000で機能するようですが、データ型の推論については関係ありません。
別の回答 ここDBAでは、Server2000でBULK INSERT
を呼び出す前にBCP
を推奨していますが、どちらもMonetDBのドキュメントでは説明されていません。
その他の回答 これは、外部スクリプトがないとMySQLでは不可能であることも示唆しています。
免責事項:私はSQLとMonetDBの初心者ですが、明らかなことを見逃さないようにしてくれてありがとう。
実際、COPY INTO
には事前にCREATE TABLE
が必要です。現在のところ、スキーマを推測する一般的な方法はありません。ここでの主な問題は、CSVエンコーディングの膨大な多様性です。
そうは言っても、 MonetDB.R コネクタは、monetdb.read.csv
関数を介したスキーマの「推測」をサポートします。
また、CSV読み込みタスクを自動化するためのPythonスクリプトに取り組んでいます。スクリプト(importer.py
)が利用可能です 私のCWIページから 。次のように機能します。
./importer.py -h
usage: importer.py [-h] [--database DATABASE] [--port PORT] [--user USER]
[--password PASSWORD] [--header] [--yes]
files [files ...]
A "smarter" CSV loader for MonetDB, v.0.3, [email protected], 2014-05
positional arguments:
files One or many CSV files to be imported
optional arguments:
-h, --help show this help message and exit
--database DATABASE Database name to connect to
--port PORT MonetDB TCP port, defaults to 50000
--user USER MonetDB username, defaults to "monetdb"
--password PASSWORD MonetDB password, defaults to "monetdb"
--header set if given CSV file has a header in the first line
--yes if set, assume Yes on all questions
使用例:
./importer.py --database acs ~/Desktop/adult.csv
Now probing '/ufs/hannes/Desktop/adult.csv':
OK, I am going to run the following commands on your DB acs:
CREATE TABLE adult5 (C1 DOUBLE, C2 STRING, C3 STRING, C4 STRING, C5 STRING, C6 STRING, C7 STRING, C8 STRING, C9 STRING, C10 STRING, C11 DOUBLE, C12 STRING, C13 BIGINT);
COPY 35469 OFFSET 1 RECORDS INTO adult5 FROM '/ufs/hannes/Desktop/adult.csv' USING DELIMITERS ',','\n','"' NULL AS '' LOCKED;
Proceed? [Y/n] y
imported 30162 rows from /ufs/hannes/Desktop/adult.csv in 3 second(s)
何か問題がありましたらお知らせください。