Table

如何為表創建腳本自動檢測 csv 文件的列類型?

  • November 15, 2019

我是 pgAdmin 和 Azure 數據庫的新手。我有一個包含大約 220 列的巨大 csv 文件,我想在 pgAdmin4 中創建一個表以將其推送到 Azure。

但是我不知道如何自動檢測列的類型。

這是一個例子:

IDI GKID    S01Q01  S02Q01_Gender ...
100093  enq030059569748fc89091fdd91cc337cac44eca90  Yes, I agree    Female ...

我正在編寫腳本來創建表格。但是,考慮到列的數量,我想自動化它以獲取允許我將 csv 添加到 Microsoft Azure 的 pgAdmin4 中的數據庫的腳本。

然後,在轉置 csv 標頭後,我得到:

   IDI
   GKID
   S01Q01
   S02Q01_Gender
   ...

我正在編寫腳本來創建表格。但是,考慮到列的數量,在最好的情況下,我希望自動檢測列的類型以便能夠將其寫入正確的部分,在最壞的情況下,放置 TEXT 類型的泛型類型。

到目前為止,我已經嘗試過

output = ""
file_name = "columns.txt"
string_to_add = " TINYTEXT,"

with open(file_name, 'r') as f:
   file_lines = [''.join([x.strip(), string_to_add, '\n']) for x in f.readlines()]

with open(file_name, 'w') as f:
   f.writelines(file_lines) 

它給了我:

IDI TINYTEXT,
GKID TINYTEXT,
S01Q01 TINYTEXT,
S02Q01_Gender TINYTEXT,
...

然後,我可以這樣做:

CREATE TABLE my_table (
IDI TINYTEXT,
GKID TINYTEXT,
S01Q01 TINYTEXT,
S02Q01_Gender TINYTEXT,
...

但我不確定這是否足以使表格能夠接收我的 csv 文件。

有一些命令行工具可以進行欄位類型推斷。

一個是 xsv https://github.com/BurntSushi/xsv/

在此執行此命令(https://gist.githubusercontent.com/aborruso/3b1af402f0d2ed49465f218d19be81d9/raw/c0e95b320924e9e49902633d16e7ab253046ca16/input.csv

xsv stats input.csv --everything | xsv table

你有

field       type     sum                 min       max         min_length  max_length  mean                stddev              median              mode  cardinality
id          Integer  5050                1         100         1           3           50.5                28.86607004772212   50.5                N/A   100
first_name  Unicode                      Annabal   Willabella  3           11                                                                      N/A   98
last_name   Unicode                      Albinson  Zaniolini   3           13                                                                      N/A   100
f           Float    2063.2419999999984  0.2656    51.1245     4           7           20.632419999999996  12.603955889545158  17.930799999999998  N/A   100

使用 csvkit ( https://csvkit.readthedocs.io/en/latest/index.html ) 並執行

csvstat --csv input.csv

你將會有

column_id column_name type   nulls unique min   max    sum       mean   median stdev  len freq
1         id          Number False 100    1     100    5,050     50.5   50.5   29.011 -   1, 2, 3, 4, 5
2         first_name  Text   False 98     -     -      -         -      -      -      11  Caren, Weylin, Heall, Flori, Lydia
3         last_name   Text   False 100    -     -      -         -      -      -      13  Saxby, Joderli, Kleinzweig, Coyle, Kleinplac
4         f           Number False 100    0.266 51.124 2,063.242 20.632 17.931 12.667 -   5.356, 12.596, 32.1245, 5.32, 0.2656

在 csvkit 你也有

csvsql -i postgresql input.csv

這給了你

CREATE TABLE input (
       id DECIMAL NOT NULL,
       first_name VARCHAR NOT NULL,
       last_name VARCHAR NOT NULL,
       f DECIMAL NOT NULL
);

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