Мы пытаемся использовать REST API Purview для выполнения запроса пользователя, который сможет инициировать запуск рабочего процесса Purview. Рабочий процесс должен запускаться всякий раз, когда пользователь пытается обновить актив, например его описание.
Согласно документации REST API, мы используем следующий код:
import requests
url = f"https://XXXXX.purview.azure.com/workflow/userrequests?api-version=2023-10-01-preview"
headers = {
"Authorization": f"Bearer {token}", # each time generated
"Content-Type": "application/json"
}
body = {
"operations": [
{
"type": "UpdateAsset",
"payload": {
"entities": {
"typeName": "azure_sql_table",
"attributes": {
"guid": "f00553c6-7a45-479f-b2fe-f9f6f6f60000",
"userDescription": "New description from ADB via workflow API",
"qualifiedName": "mssql://XXXXX.database.windows.net/XXXXX/dbo/YYYYY",
"name": "YYYYY",
"description": "Description field from ADB via workflow API"
}
}
}
}
],
"comment": "Thanks!"
}
response = requests.post(url, headers=headers, json=body)
response.json()
Ответ, который мы получаем:
{'error': {'requestId': '3ea14555-aa4c-48e7-b1b6-1d683f39515b',
'code': 'Workflow.DataCatalogError.InvalidJsonRequestPayload',
'message': "Invalid Json request payload: '.entities(missing)'"}}
Мы не понимаем, чего не хватает внутри «сущностей». Есть похожая проблема здесь.
Что мы делаем не так?
@EJZ Я тоже пробовал это, но безуспешно.
Не могли бы вы попробовать с этим телом?
body = {
"operations":[
{
"type":"UpdateAsset",
"payload":{
"entities":{
"UPDATE":[
{
"typeName":"azure_sql_table",
"attributes":{
"guid":"f00553c6-7a45-479f-b2fe-f9f6f6f60000",
"userDescription":"New description from ADB via workflow API",
"qualifiedName":"mssql://XXXXX.database.windows.net/XXXXX/dbo/YYYYY",
"name":"YYYYY",
"description":"Description field from ADB via workflow API"
}
}
]
}
}
}
],
"comment":"Thanks!"
}
Привет, спасибо за ваш ответ. К сожалению, я уже пробовал этот вариант, но получил тот же результат.
На github вы можете ответить на тот же вопрос (думаю, вы тоже там создали): github.com/Azure/azure-sdk-for-python/issues/36234
Да, это был я, я также пытался использовать Azure SDK для Python, но получил ту же ошибку.
Документация немного сложна, но я в первую очередь имею в виду массовое создание или обновление документации, которая определяет тип данных для «сущностей» как массив. Не могли бы вы меня развеселить и попробовать:
body = {
"operations": [
{
"type": "UpdateAsset",
"payload": {
"entities": [
{
"typeName": "azure_sql_table",
"attributes": {
"guid": "f00553c6-7a45-479f-b2fe-f9f6f6f60000",
"userDescription": "New description from ADB via workflow API",
"qualifiedName": "mssql://XXXXX.database.windows.net/XXXXX/dbo/YYYYY",
"name": "YYYYY",
"description": "Description field from ADB via workflow API"
}
}
]
}
}
],
"comment": "Thanks!"
}
Я пытался найти ссылку на ожидаемый тип данных сущностей в документации API UserRequests , но их сведения распространяются только на массив операций. Я полагаю, что для конкретных типов операций документация по этим конкретным операциям будет более полезной. Поэтому я думаю, что первая ссылка выше на документацию по массовому обновлению, где объекты определяются как массив, должна быть полезной.
Привет, Джей, я тоже пытался использовать эту ссылку на API, пролистал многие из них. Однако, похоже, не стоит ожидать квадратных скобок, так как я получаю ошибку {'error': {'code': 'Workflow.DecodingFailure', 'message': "Invalid value for: body (UpdateAsset).payload.entities(expected '{' got '[' at 'operations[0]')"}}
После короткого разговора со службой поддержки Microsoft Purview нам удалось найти решение: необходимо иметь вторую запись entities
внутри первой записи entities
, и эта вторая запись должна быть списком диктовок.
import requests
url = f"https://XXXXX.purview.azure.com/workflow/userrequests?api-version=2023-10-01-preview"
headers = {
"Authorization": f"Bearer {token}", # each time generated
"Content-Type": "application/json"
}
body = {
"operations": [
{
"type": "UpdateAsset",
"payload": {
"entities": {
"entities": [
{
"guid": "f00553c6-7a45-479f-b2fe-f9f6f6f60000",
"typeName": "azure_sql_table",
"attributes": {
"userDescription": "New description from ADB via workflow API",
"qualifiedName": "mssql://XXXXX.database.windows.net/XXXXX/dbo/YYYYY",
"name": "YYYYY",
"description": "Description field from ADB via workflow API"
}
}
]
}
}
}
],
"comment": "Thanks!"
}
response = requests.post(url, headers=headers, json=body)
response.json()
Что произойдет, если вы переключите его с сущностей на просто «сущность»?