Sql-Server

使用 MonetDB 進行類型辨識,從 CSV 創建

  • May 15, 2014

我很困惑您是否可以將記錄複製到MonetDB 中的新表中。

官方文件似乎只談論複製到現有表中。我在幾十個表中有數十億條記錄,我更喜歡從 CSV 本身推斷類型以及從第一行推斷列名的解決方案。

StackOverflow 的答案似乎適用於帶有 的 SQL Server 2000 OpenRowset,儘管它們並不關心數據類型推斷。

DBA 上的另一個答案建議BCP在呼叫BULK INSERTServer 2000 之前,MonetDB 文件中都沒有討論這兩個問題。

其他答案還表明,如果沒有外部腳本,這在 MySQL 中是不可能的。

免責聲明:我是 SQL 和 MonetDB 的新手,但感謝您沒有讓我錯過顯而易見的事情。

確實,這COPY INTO需要CREATE TABLE事先。截至目前,沒有通用的方法來推斷模式。這裡的主要問題是 CSV 編碼的巨大多樣性。

話雖如此,MonetDB.Rmonetdb.read.csv連接器確實支持通過該函式“猜測”模式。

此外,我一直在編寫 Python 腳本來自動執行 CSV 載入任務。腳本 ( 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, hannes@cwi.nl, 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)

如果有任何問題,請告訴我。

引用自:https://dba.stackexchange.com/questions/65126