Вы можете использовать 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, а не как число с плавающей точкой, поэтому проблем со сравнением не будет.