кдб д; добавить к строке. проблема установки пути сохранения с целочисленными переменными и строками - PullRequest
0 голосов
/ 07 января 2020

Я в основном пытаюсь сохранить в data/${EPOCH_TIME}

begin_unix_time: "J"$first system "date +%s"
\t:1 save `data/"string"$"begin_unix_time"

Я ожидаю, чтобы сохранить в data/1578377178

1 Ответ

1 голос
/ 07 января 2020

В этом случае вам не нужно приводить first system "date +%s" к long, поскольку вы хотите прикрепить одну строку к другой. Вместо этого вы можете использовать

begin_unix_time:first system "date +%s"

для хранения строки чисел:

q)begin_unix_time
"1578377547"
q)`$"data/",begin_unix_time
`data/1578377547

Здесь вы используете запятую , для соединения одной строки с другой, затем используя cast `$ для преобразования строки в символ.

Ключевое слово save сохраняет глобальные данные в файл. Учитывая ваш путь к файлу, похоже, что вы пытаетесь сохранить глобальную переменную с именем 1578377547, и kdb не может обрабатывать имена переменных, являющиеся просто числами.

Возможно, вы захотите попробовать вместо этого сохранить переменную с именем a1578377547 , например. Это изменит вышеприведенную строку на

q)`$"data/a",begin_unix_time
`data/a1578377547

, и ваше сохранение будет работать правильно, , учитывая, что глобальная переменная a1578377547 существует . Поскольку вы выбираете дату с точностью до секунды из linux непосредственно в строке, в которую вы сохраняете переменную, это, скорее всего, не сработает, поскольку время постоянно меняется!

Также обратите внимание, что системная команда timer будет повторять ее выполнение n раз (как в \t:n), что означает, что одна и та же переменная будет экономить несколько раз, если вторая не изменить. Время также вероятно изменится для больших n, и вам не будет ничего назначено для глобальной переменной, которую вы пытаетесь сохранить в случае второго изменения.

...