#azure #csv #datetime #timespan #azure-data-explorer
#azure #csv #дата и время #timespan #azure-data-explorer
Вопрос:
Надеюсь, кто-нибудь может помочь.. Я новичок в Kusto, и мне нужно заставить работать внешнюю таблицу, считывающую данные из учетной записи хранилища больших двоичных объектов Azure, но одна таблица, которая у меня есть, уникальна тем, что данные для столбца timestamp разделены на 2 отдельных столбца, т.Е. LogDate и LogTime (см. Сценарий ниже).).
Мои данные хранятся в следующей структуре в контейнере учетной записи хранилища Azure (например, контейнер называется «employeedata»): {employeename}/ {year}/ {month} / {day}/ {hour} / {minute}.csv в простом формате CSV.
Я знаю, что CSV хорош, потому что, если я импортирую его в обычную таблицу Kusto, он работает отлично.
Мой сценарий KQL для создания внешней таблицы выглядит следующим образом:
.create-or-alter external table EmpLogs (Employee: string, LogDate: datetime, LogTime:timestamp)
kind=blob
partition by (EmployeeName:string = Employee, yyyy:datetime = startofday(LogDate), MM:datetime = startofday(LogDate), dd:datetime = startofday(LogDate), HH:datetime = todatetime(LogTime), mm:datetime = todatetime(LogTime))
pathformat = (EmployeeName "/" datetime_pattern("yyyy", yyyy) "/" datetime_pattern("MM", MM) "/" datetime_pattern("dd", dd) "/" substring(HH, 0, 2) "/" substring(mm, 3, 2) ".csv")
dataformat=csv
(
h@'************************'
)
with (folder="EmployeeInfo", includeHeaders="All")
Я постоянно получаю сообщение об ошибке ниже, что не очень полезно (отредактировано из полной ошибки, в основном сводится к тому, что где-то есть синтаксическая ошибка):
Синтаксическая ошибка: не удалось проанализировать запрос: { «ошибка»: { «код»: «BadRequest_SyntaxError», «сообщение»: «Запрос недействителен и не может быть выполнен.», «@type»: «Kusto.Data.Exceptions.SyntaxException», «@message»: «Синтаксическая ошибка: запрос не может быть проанализирован : . Запрос: ‘.создать или изменить внешнюю таблицу……..
Я знаю todatetime()
, что функция работает с timespan, я протестировал ее с другой таблицей, и она создала дату, похожую на следующую: 0001-01-01 20:18:00.0000000.
Я попытался использовать функцию bin () для столбцов timestamp / LogTime, но та же ошибка, что и выше, и даже попытался импортировать значение времени в виде строки и выполнить некоторые строковые манипуляции с ним, но безуспешно. Получение той же синтаксической ошибки.
Любая помощь / рекомендации будут с благодарностью.
Спасибо!!
Ответ №1:
В настоящее время нет способа определить раздел внешней таблицы на основе более чем одного столбца. Если временная метка вашего набора данных разделена между двумя столбцами: LogDate:datetime
и LogTime:timestamp
, тогда лучшее, что вы можете сделать, это использовать виртуальный столбец для разделения по времени:
.create-or-alter external table EmpLogs(Employee: string, LogDate:datetime, LogTime:timespan)
kind=blob
partition by (EmployeeName:string = Employee, PartitionDate:datetime)
pathformat = (EmployeeName "/" datetime_pattern("yyyy/MM/dd/HH/mm", PartitionDate))
dataformat=csv
(
//h@'************************'
)
with (folder="EmployeeInfo", includeHeaders="All")
Теперь вы можете фильтровать по виртуальному столбцу и выполнять точную настройку с помощью LogTime
:
external_table("EmpLogs")
| where Employee in ("John Doe", ...)
| where PartitionDate between(datetime(2020-01-01 10:00:00) .. datetime(2020-01-01 11:00:00))
| where LogTime ...
Комментарии:
1. Спасибо, это был совет, в котором я нуждался. Похоже, для моего сценария все работает нормально!!