Усовершенствованный поворотный стол в Кусто - PullRequest
0 голосов
/ 21 февраля 2020

Я только недавно начал использовать Kusto и пока все хорошо. Однако я наткнулся на контрольно-пропускной пункт, с которым у меня возникают некоторые проблемы при решении.

У меня есть следующая таблица

datatable(name:string, gender:string, occupation: string)
[
    "John", "Male", "Janitor",
    "Sam", "Male", "Pilot",
    "Mary", "Female", "CEO"
]

И я хочу повернуть ее, чтобы в итоге я получил таблица, подобная этой

datatable(info:string, John:string, Sam: string, Mary: string)
[
    "Name", "John", "Sam", "Mary",
    "Gender", "Male", "Male", "Female",
    "Occupation", "Janitor", "Pilot", "CEO"
]
| where info != "Name"

Имена в этом случае всегда будут уникальными, так что это не проблема.

Вот одна из моих попыток patheti c:)

datatable(name:string, gender:string, occupation: string)
[
    "John", "Male", "Janitor",
    "Sam", "Male", "Pilot",
    "Mary", "Female", "CEO"
]
| summarize d = make_bag(
    pack(
        name, pack_array(gender, occupation))
) by name
| evaluate  bag_unpack(d)

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Это решение обрабатывает любое количество столбцов:

let my_data = datatable(name:string, gender:string, occupation: string)
[
    "John", "Male", "Janitor",
    "Sam", "Male", "Pilot",
    "Mary", "Female", "CEO"
];
my_data
| getschema 
| project variable = ColumnName, type = ColumnType, i = ColumnOrdinal, Dummy = 1
| where variable != 'name'
| join kind = inner (my_data | project array = pack_array(*), Dummy = 1) on Dummy
| project name = tostring(array[0]), variable = variable, type, value = array[i]
| evaluate pivot(name, any(value))

Все столбцы значений приводятся к типу данных «dynamici c». Тем не менее, чтобы сохранить метаданные типа данных, добавляется столбец типа, который содержит тип данных для любой строки в выходной таблице.

1 голос
/ 21 февраля 2020

вот один из вариантов:

datatable(name:string, gender:string, occupation: string)
[
    "John", "Male", "Janitor",
    "Sam", "Male", "Pilot",
    "Mary", "Female", "CEO"
]
| as T
| summarize b = make_bag(pack(name, gender)) by info = "Gender"
| union (
    T
    | summarize b = make_bag(pack(name, occupation)) by info = "Occupation"
)
| evaluate bag_unpack(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...