Как выбрать / exec столбец, который содержит «.»? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть таблица, которая содержит столбцы с "."в нем:

t:([] x:10?`a`b`c; y.z:10?100.0)

Появляется, что это не работает:

select/exec y.z from t

Также пробовал их с функциональным exec:

?[`t; (); (); `y.z"]
?[`t; (); (); `$ parse "y.z"]

Но это также не работает,Эта запись работает:

`y.z xasc t

Есть ли способ запустить exec для столбца yz?Также что-то вроде этого, где я мог бы переименовать столбец:

select yz:y.z from t

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Наличие точки в имени столбца не является хорошей практикой, и лучшим решением будет исправить имена столбцов, используя подход, предложенный в другом ответе.

Но если вы хотите получить такие столбцы, вы можете использовать приведенное ниже решение.

Выберите эквивалент -> Сначала выберите столбец из таблицы, а затем переименуйте его, используя xcol.

q) t:([]x:`a`b`c; y.z:1 2 3)
q) `yz xcol enlist[`y.z]#t
yz
--
1
2
3

Эквивалентный эквивалент ->используйте индексацию:

q) t[`y.z]
1 2 3
0 голосов
/ 20 февраля 2019

Одним из способов переименования проблемного столбца является использование x xcol y.Это принимает x как список символов, которые являются именами новых столбцов, и таблицу y.Это можно использовать следующим образом:

q)exec yz from `x`yz xcol t
39.27524 51.70911 51.59796 40.66642 17.80839 30.177..

Проблема с попыткой выбрать из столбца x.y в том, что q будет интерпретировать . как index / apply form.

РЕДАКТИРОВАТЬ:

Есть удобный .Q, который можно использовать здесь!.Q.id x - это удобная функция, которая «дезинфицирует» символы.x здесь может быть таблица (или символ) и будет быстро переименовывать любые «плохие» столбцы.Он в основном делает все, что мы обсуждали:

q).Q.id t
x yz
----------
a 39.27524
b 51.70911
c 51.59796
c 40.66642
b 17.80839
...