Sql-Server
使用 MonetDB 進行類型辨識,從 CSV 創建表
我很困惑您是否可以將記錄複製到MonetDB 中的新表中。
官方文件似乎只談論複製到現有表中。我在幾十個表中有數十億條記錄,我更喜歡從 CSV 本身推斷類型以及從第一行推斷列名的解決方案。
StackOverflow 的答案似乎適用於帶有 的 SQL Server 2000
OpenRowset
,儘管它們並不關心數據類型推斷。DBA 上的另一個答案建議
BCP
在呼叫BULK INSERT
Server 2000 之前,MonetDB 文件中都沒有討論這兩個問題。其他答案還表明,如果沒有外部腳本,這在 MySQL 中是不可能的。
免責聲明:我是 SQL 和 MonetDB 的新手,但感謝您沒有讓我錯過顯而易見的事情。
確實,這
COPY INTO
需要CREATE TABLE
事先。截至目前,沒有通用的方法來推斷模式。這裡的主要問題是 CSV 編碼的巨大多樣性。話雖如此,MonetDB.R
monetdb.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)
如果有任何問題,請告訴我。