Загрузить данные CSV-файла в таблицы - PullRequest
0 голосов
/ 29 июня 2018

Созданы таблицы, как показано ниже:

source:([id:`symbol$()] ric:();source:();Date:`datetime$())
property:([id:`symbol$()] Value:())

Тогда у меня есть два .csv файла, которые включают две таблицы данных.

property.csv, показанный ниже:

id,Value
TEST1,1
TEST2,2

source.csv, показанный ниже:

id,ric,source,Date
1,TRST,QO,2017-07-07 11:42:30.603
2,TRST2,QOT,2018-07-07 11:42:30.603

Теперь, как загрузить csv данные файла в каждую таблицу один раз

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете использовать 0: для загрузки записей с разделителями. https://code.kx.com/wiki/Reference/ZeroColon

Самая простая форма функции: (types; delimiter) 0: filehandle

Типы должны быть представлены в виде их прописных букв, по одному на каждый столбец или пробел, чтобы игнорировать столбец. например, использование «SJ» для source.csv означало бы, что я хочу прочитать в столбце id как символ, а столбец значений - как длинный.

Разделитель указывает, как разделить каждый столбец, в вашем случае значения, разделенные запятыми (CSV). Вы можете передать разделитель в виде строки ",", которая будет обрабатывать каждую строку как часть данных и возвращать вложенный список столбцов, которые можно либо вставить в таблицу с соответствующей схемой, либо добавить в заголовки и перевернуть словарь вручную, а затем переверните, чтобы получить таблицу примерно так: flip `id`value!("IS";",") 0: `:test.txt.

Если у вас есть заголовки столбцов в качестве первой строки в CSV, вы можете передать зачисленный разделитель enlist ",", который затем будет использовать заголовки столбцов и вернет таблицу в kdb с этими заголовками, которые затем можно переименовать, если вы считаю нужным.

Поскольку файлы, которые вы хотите прочитать, имеют разные типы для столбцов и должны лежать в основе, вы можете создать функцию для их чтения, например

{x insert (y;enlist ",") 0:z}'[(`source;`property);("SSSP";"SJ");(`:source.csv;`:property.csv)]

Что позволит вам указать имя таблицы, которая должна быть создана, типы столбцов и дескриптор файла.

Я бы предложил использовать метку времени вместо (устаревшей) даты-времени, поскольку она хранится как long, а не как число с плавающей точкой, поэтому проблем со сравнением не будет.

0 голосов
/ 29 июня 2018

вы можете использовать key для просмотра содержимого каталога;

files: key `:.;     /get the contents of the dir
files:files where files like "*.csv";    /filter the csv files
m:`property.csv`source.csv!("SJ";"JSSZ");   /create the mappings for each csv file 
{[f] .[first ` vs f;();:; (m@f;enlist csv) 0: hsym f]}each files 

и, наконец, загрузите файл each csv; обратите внимание, что здесь каталог 'pwd', вам может потребоваться добавить путь к каталогу для каждого файла перед использованием 0:

...