#python #azure #azure-data-explorer
#python #azure #azure-обозреватель данных
Вопрос:
Я работаю над приложением на Python, которое запрашивает данные из Kusto, используя библиотеку azure-kusto-data (https://pypi.org/project/azure-kusto-data /)
Я пытаюсь написать функцию kusto для выполнения определенной функции. Эта функция принимает 2 входных сигнала: ввод данных и ввод временного интервала
Итак, в качестве примера:
Имя функции: GenerateSomeOutputviaKusto Параметры функции: (T:(Env:string,Something:string,StartDate:datetime),inputGranularity:timespan)
Как вы можете видеть, для ввода этой функции используется табличный ввод. Теперь, чтобы правильно вызвать эту функцию (скажем, в KustoExplorer), я использую оператор «let», чтобы создать табличный ввод для этой функции, следуя инструкциям с этой страницы: https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/letstatement
let QueryTable = datatable (Environment:string, Something:string, StartDate:datetime)
["Prod", "Sometext", datetime("2020-11-17")];
GenerateSomeOutputviaKusto(QueryTable, 24h);
Проблема возникает сейчас, когда я пытаюсь параметризовать эту функцию для выполнения этой функции из python. Когда я вызываю эту функцию, используя библиотеку kusto в python, мне нужно параметризовать эту функцию.
Мои параметры настроены как словарь python, как таковой:
params = {
"env": self._env,
"something": something,
"startdate": self._alert_start_date_str,
}
Затем я пытаюсь параметризовать функцию кусто из моего кода на python следующим образом:
declare query_parameters(env:string,
something:string,
starting_time:string);
let QueryTable = datatable (Environment:string, something:string, StartDate:datetime)
[env, something, datetime(startdate)];
GenerateSomeOutputViaKusto(QueryTable, 24h)
Когда я это делаю, я сталкиваюсь с этой ошибкой:
[Повторная попытка подтверждена] KustoServiceError([{‘ошибка’: {‘код’: ‘General_BadRequest’, ‘сообщение’: ‘Запрос недействителен и не может быть выполнен.’, ‘@type’: ‘Кусто.Данные.Исключения.KustoBadRequestException’, ‘@message’: «Синтаксическая ошибка: запрос не может быть проанализирован: SYN0002: произошла ошибка распознавания. [строка:позиция=5:17]. Запрос: ‘объявить query_parameters(env:string,n something:string,n startdate:string);n пусть QueryTable = datatable (Environment:string, something:string, StartDateTime:datetime)n [env, something, datetime(startdate)];n Таблица запросов'», ‘@context’: {‘timestamp’: ‘2020-11-20T17:50:29.4796552Z’, ‘serviceAlias’: ‘EGFOLLOWING’, ‘MachineName’: ‘KEngine000005’, ‘ProcessName’: ‘Кусто.WinSvc.Svc’, ‘ProcessId’: 2728, ‘ThreadId’: 9068, ‘appDomainName’: ‘Кусто.WinSvc.Svc.exe ‘, ‘clientRequestId’: ‘KPC.execute;1456198f-1e9a-47de-bf4d-053208c861f2’, ‘ActivityId’: ‘59726ecc-5a4f-4d63-91f4-a04d706b10d6’, ‘subActivityId’: ‘8e05442a-34c0-427a-b569-8879e7d1e2d1’, ‘activityType ‘: ‘DN.FE.ExecuteQuery’, ‘parentActivityId’: ‘de01e770-e291-4f10-bf9e-a34978193451’, ‘activityStack’: ‘(Стек действий: CRID=КПК.выполнить;1456198f-1e9a-47de-bf4d-053208c861f2 ARID=59726ecc-5a4f-4d63-91f4-a04d706b10d6 > KD.Запрос.Клиент.ExecuteQueryAsKustoDataStream/d19ed49b-78f6-4f2c-adfc-cf0f6f443bb9 > P.WCF.Service.ExecuteQueryInternalAsKustoDataStream..IClientServiceCommunicationContract/de01e770-e291-4f10-bf9e-a34978193451 > DN.FE.ExecuteQuery/8e05442a-34c0-427a-b569-8879e7d1e2d1)’}, ‘@permanent’: True, ‘@text’: ‘объявить query_parameters(env:строка,n что-то:строка,n startdate:строка);n пусть QueryTable = datatable (среда: строка, что-то:строка, дата начала:дата-время)n [env, что-то, дата-время (дата начала)];n QueryTable’, ‘@database’: ‘defaultdb’, ‘@ClientRequestLogger’: «, ‘innererror’: {‘code’: ‘SYN0002’, ‘message’: ‘Произошла ошибка распознавания.’, ‘@type’: ‘Kusto.Data.Exceptions.SyntaxException’, ‘@message’: «Синтаксическая ошибка: запрос не может быть проанализирован: SYN0002: произошла ошибка распознавания. [строка: позиция=5:17]. Запрос: ‘объявить query_parameters(env:string,n
Я заменил некоторые конфиденциальные поля по соображениям конфиденциальности. Мой вопрос, связанный с Кусто, заключается в том, правильно ли это вообще делать такие вещи? Документы kusto довольно скудны, когда дело доходит до параметризации функций, особенно в угловых случаях, подобных этим. Параметризация работает без использования оператора let, но совместное использование операторов «declare» и «let», по-видимому, приводит к проблемам.
Ответ №1:
Проблема в том, что вы пытаетесь передать оператору непостоянные скалярные значения datatable
— это не поддерживается, независимо от того, используете вы параметры запроса или нет.
вы могли бы заменить использование datatable
оператора print
, например, на:
declare query_parameters(env:string, failure_signature:string, starting_time:datetime);
let QueryTable = print Environment = env, FailureSignature = failure_signature, StartDateTime = starting_time;
QueryTable