Как использовать таблицу с целочисленными именами столбцов? - PullRequest
0 голосов
/ 07 мая 2020

Я экспериментировал с базой данных временных рядов kdb моей работы. Обычно я просто подключаюсь к нему из наших библиотек R. Я заметил, что синтаксический сахар q- sql https://code.kx.com/q4m3/9_Queries_q-sql/, похоже, не работает со столбцами, которые являются целыми числами. Есть ли какие-то обходные пути, например, добавление буквы «c» ко всем именам столбцов, кроме моего столбца «Дата»?

Например:

Рассмотрим таблицу t:([]c1:`a`b`c`a;c2:20 15 10 20;c3:99.5 99.45 99.42 99.4) .

Переименуйте первый столбец в 1: t: `1 xcol t.

Теперь оба select 1 from t и select `1 from t терпят неудачу!

Есть ли у кого-нибудь обходные пути / хаки / исправления этой проблемы?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Как правило, переименовывать столбцы в числа - это плохая практика, так как это может быть сложно интерпретировать kdb. Однако обходной путь - это функциональная форма выбора:

q)?[t;();0b;(enlist `1)!enlist `1]
1
-
a
b
c
a

Подробнее о функционале q sql здесь: https://code.kx.com/q/basics/funsql/

1 голос
/ 07 мая 2020

Если вам действительно нужно назвать столбцы 1, 2 et c. вы можете использовать функциональные формы из select, exec, update и delete или вы можете использовать .Q.id aka sanitize, чтобы выполнить эту работу за вас:

    q)t:([]c1:`a`b`c`a;c2:20 15 10 20;c3:99.5 99.45 99.42 99.4)
    q)t: `1 xcol t
    q).Q.id t
    a1 c2 c3
    -----------
    a  20 99.5
    b  15 99.45
    c  10 99.42
    a  20 99.4
    q)select a1 from .Q.id t
    a1
    --
    a
    b
    c
    a
...