데이터 자산(Azure Data Catalog REST API)
주석 달기
자산에 주석을 추가합니다.
etag
속성은 선택 사항이며 동시성 제어에 사용됩니다.
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | 문자열 |
view_item_id | 보기 항목의 ID입니다. | 문자열 |
nested_view_name | 중첩된 보기 항목의 이름입니다. | String |
api-version | API 버전입니다. | 문자열 |
예: 전문가 추가
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/experts?api-version=2016-03-30
헤더
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
본문
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"expert":
{
"upn": "expert1@contoso.com",
"objectId": "1111fa019b3945dc97143ebc3ad74cbf"
},
}
}
예: 용어집 용어 태그 추가
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/termTags?api-version=2016-03-30
헤더
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
본문
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"termId": "https://test.catalog.com/catalogs/DefaultCatalog/glossaries/DefaultGlossary/terms/ed975c9d-2fb2-49a3-b6f2-222389cefd7e",
}
}
예: 용어집 열 용어 태그 추가
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/columnTermTags?api-version=2016-03-30
헤더
Content-Type: application/json
x-ms-client-request-id: 13d9f885…a92d-8a9f8cf9f707
Authorization: Bearer eyJ0eX ... FWSXfwtQ
본문
{
"etag": "59085E253E2244A59F664A2F447E675E",
"properties":
{
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf--1111fa019b3945dc97143ebc3ad74cbf",
"columnName": "Col1",
"termId": "https://test.catalog.com/catalogs/DefaultCatalog/glossaries/DefaultGlossary/terms/ed975c9d-2fb2-49a3-b6f2-222389cefd7e",
}
}
응답
상태 코드
코드 | Description |
---|---|
201 | 만들어졌습니다. 요청이 처리되고 새 주석이 만들어졌습니다. |
200 | OK. 기존 주석이 업데이트되었습니다. |
412 | 사전 조건이 실패했습니다. 하나 이상의 항목에서 ETag 불일치로 인해 요청이 취소되었습니다. |
콘텐츠 형식
application/json
헤더
HTTP/1.1 201 Created
x-ms-request-id: 72cf83c0…058f2b2a0c68
Location: https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf
등록 또는 업데이트
동일한 ID를 가진 자산이 이미 있는 경우 새 데이터 자산을 등록하거나 기존 자산을 업데이트합니다. 항목은 선택적으로 ETag 값을 포함하여 낙관적 동시성 제어를 사용하도록 설정할 수 있습니다.
요청
POST https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | String |
api-version | API 버전입니다. | 문자열 |
POST 예제
POST https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables?api-version=2016-03-30
헤더
Content-Type: application/json
x-ms-client-request-id: 13c45c14…46ab469473f0
Authorization: Bearer eyJ0eX ... FWSXfwtQ
본문 예제
{
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"properties": {
"fromSourceSystem": true,
"name": "Orders",
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "MyServer.contoso.com",
"database": "NORTHWND",
"schema": "dbo",
"object": "Orders"
}
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "containers/3b2c00be-...-1f15367f54e4"
},
"annotations": {
"schema": {
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "OrderID",
"isNullable": false,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "CustomerID",
"isNullable": true,
"type": "nchar",
"maxLength": 10,
"precision": 0
},
{
"name": "EmployeeID",
"isNullable": true,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "OrderDate",
"isNullable": true,
"type": "datetime",
"maxLength": 8,
"precision": 23
}
]
}
}
}
}
응답
상태 코드
코드 | Description |
---|---|
200 | OK. 기존 자산이 업데이트되었습니다. |
201 | 만들어졌습니다. 요청이 처리되고 새 자산이 생성되었습니다. |
412 | 사전 조건이 실패했습니다. 하나 이상의 항목에서 ETag 불일치로 인해 요청이 취소되었습니다. |
콘텐츠 형식
application/json
헤더
HTTP/1.1 201 Created
x-ms-request-id: 72cf83c0…058f2b2a0c68
Location: https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0…1be45ecd462a
지원되는 데이터 원본
현재 지원되는 데이터 원본 개체 목록은 Azure Data Catalog 지원되는 데이터 원본을 참조하세요.
예제
이 예제에서는 Azure AD 액세스 토큰을 가져와서 등록 작업을 수행하는 방법을 보여줍니다.
참고 이 예제에서는 DefaultCatalog 키워드(keyword) 사용하여 사용자의 기본 카탈로그를 업데이트합니다. 또는 실제 카탈로그 이름을 지정할 수 있습니다. 카탈로그 이름을 찾으려면 Azure Data Catalog 로그인하고 사용자를 선택합니다. 카탈로그 이름이 표시됩니다.
using System;
using System.Net;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.IO;
...
//To learn how to register a client app and get a Client ID,
// see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
static string clientIDFromAzureAppRegistration = "{clientID}";
static void Main(string[] args)
{
//Note: This example uses the "DefaultCatalog" keyword to update the user's default catalog. You may alternately
//specify the actual catalog name.
string catalogName = "DefaultCatalog";
string registerJson = Register(catalogName, OrdersJsonWithEveryoneContributor());
Console.ReadLine();
}
static AuthenticationResult AccessToken()
{
//Get access token:
// To call a Data Catalog REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
//Resource Uri for Data Catalog API
string resourceUri = "https://api.azuredatacatalog.com";
//To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
string clientId = clientIDFromAzureAppRegistration;
//A redirect uri gives AAD more details about the specific application that it will authenticate.
//Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
// Create an instance of AuthenticationContext to acquire an Azure access token
// OAuth2 authority Uri
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
// AcquireToken takes a Client Id that Azure AD creates when you register your client app.
return authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession);
}
static string Register(string catalogName, string json)
{
string location = string.Empty;
string fullUri = string.Format("https://api.azuredatacatalog.com/catalogs/{0}/views/{1}?api-version=2016-03-30", catalogName, viewType);
//Create a POST WebRequest as a Json content type
HttpWebRequest request = System.Net.WebRequest.Create(fullUri) as System.Net.HttpWebRequest;
request.KeepAlive = true;
request.Method = "POST";
try
{
var response = SetRequestAndGetResponse(request, json);
//Get the Response header which contains the data asset ID
//The format is: tables/{data asset ID}
location = httpWebResponse.Headers["Location"];
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Status);
if (ex.Response != null)
{
// can use ex.Response.Status, .StatusDescription
if (ex.Response.ContentLength != 0)
{
using (var stream = ex.Response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
location = null;
}
return location;
}
static HttpWebResponse SetRequestAndGetResponse(HttpWebRequest request, string payload = null)
{
while (true)
{
//To authorize the operation call, you need an access token which is part of the Authorization header
request.Headers.Add("Authorization", AccessToken().CreateAuthorizationHeader());
//Set to false to be able to intercept redirects
request.AllowAutoRedirect = false;
if (!string.IsNullOrEmpty(payload))
{
byte[] byteArray = Encoding.UTF8.GetBytes(payload);
request.ContentLength = byteArray.Length;
request.ContentType = "application/json";
//Write JSON byte[] into a Stream
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
}
else
{
request.ContentLength = 0;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
// Requests to **Azure Data Catalog (ADC)** may return an HTTP 302 response to indicate
// redirection to a different endpoint. In response to a 302, the caller must re-issue
// the request to the URL specified by the Location response header.
if (response.StatusCode == HttpStatusCode.Redirect)
{
string redirectedUrl = response.Headers["Location"];
HttpWebRequest nextRequest = WebRequest.Create(redirectedUrl) as HttpWebRequest;
nextRequest.Method = request.Method;
request = nextRequest;
}
else
{
return response;
break;
}
}
}
static string OrdersJsonWithEveryoneContributor()
{
return @"
{
'roles': [
{
'role': 'Contributor',
'members': [
{
'objectId': '00000000-0000-0000-0000-000000000201'
}
]
}
],
'properties': {
'fromSourceSystem': 'true',
'name': 'Orders',
'dataSource': {
'sourceType': 'SQL Server',
'objectType': 'Table'
},
'dsl': {
'protocol': 'tds',
'authentication': 'windows',
'address': {
'server': 'MyServer.contoso.com',
'database': 'NORTHWND',
'schema': 'dbo',
'object': 'Orders'
}
},
'lastRegisteredBy': {
'upn': 'user1@contoso.com',
'firstName': 'User1FirstName',
'lastName': 'User1LastName'
},
'containerId': 'containers/a9f8a2e1-d826-7c0c-b186-c7f4334a6b4f'
},
'annotations': {
'schema': {
'roles': [
{
'role': 'Contributor',
'members': [
{
'objectId': '00000000-0000-0000-0000-000000000201'
}
]
}
],
'properties': {
'fromSourceSystem': 'true',
'columns': [
{
'name': 'OrderID',
'isNullable': false,
'type': 'int',
'maxLength': 4,
'precision': 10
},
{
'name': 'CustomerID',
'isNullable': true,
'type': 'nchar',
'maxLength': 10,
'precision': 0
},
{
'name': 'EmployeeID',
'isNullable': true,
'type': 'int',
'maxLength': 4,
'precision': 10
},
{
'name': 'OrderDate',
'isNullable': true,
'type': 'datetime',
'maxLength': 8,
'precision': 23
}
]
}
}
}
}";
}
주석으로 가져오기
주석이 있는 데이터 자산을 가져옵니다.
모든 항목에 대한 응답에 ETag를 포함하도록 요청하는 선택적 Accept 헤더 매개 변수 adc.metadata
를 지원합니다. 최소 또는 전체 값을 사용하여 응답에서 ETag를 가져옵니다. 유효한 값은 none
, minimal
, full
입니다.
요청
GET https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | 문자열 |
view_item_id | 보기 항목의 ID입니다. | String |
api-version | API 버전입니다. | 문자열 |
GET 예제
GET https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b...1be45ecd462a?api-version=2016-03-30
헤더
x-ms-client-request-id: 8091955f…8f5b4c0acede
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
Accept: application/json;adc.metadata=full
응답
상태 코드
코드 | Description |
---|---|
200 | OK. 응답에는 요청된 자산 보기가 포함됩니다. |
콘텐츠 형식
application/json
헤더
x-ms-request-id: 1095e88c…caffabd6dabd
Content-Type: application/json; charset=utf-8
본문
{
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a",
"etag": "1234567891",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ChangeOwnership",
"ChangeVisibility",
"ViewPermissions",
"ViewRoles",
"Update",
"TakeOwnership"
],
"properties": {
"fromSourceSystem": true,
"name": "Orders",
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "MyServer.contoso.com",
"database": "NORTHWND",
"schema": "dbo",
"object": "Orders"
}
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "containers/3b2c00be-...-1f15367f54e4"
},
"annotations": {
"schema": {
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a/schema",
"etag": "1234567892",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
],
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "OrderID",
"isNullable": false,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "CustomerID",
"isNullable": true,
"type": "nchar",
"maxLength": 10,
"precision": 0
},
{
"name": "EmployeeID",
"isNullable": true,
"type": "int",
"maxLength": 4,
"precision": 10
},
{
"name": "OrderDate",
"isNullable": true,
"type": "datetime",
"maxLength": 8,
"precision": 23
}
]
}
},
"experts": [
{
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/042297b0-...-1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf",
"etag": "1234567893",
"timestamp": "2015-05-15T03:48:39.2425547",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "22c3fa01-9b39-45dc-9714-3ebc3ad74cbf"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
],
"properties": {
"fromSourceSystem": false,
"key": "22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf",
"expert": {
"upn": "expert1@contoso.com",
"objectId": "1111fa019b3945dc97143ebc3ad74cbf"
}
}
}
]
}
}
검색
제공된 검색어를 기반으로 데이터 자산을 검색합니다.
요청
GET https://api.azuredatacatalog.com/catalogs/{catalog_name}/search/search?api-version={api-version}&searchTerms={search_terms}&facets={facet_terms}&startPage={start_page}&count={count}&view={data_source}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | String |
api-version | API 버전입니다. | 문자열 |
쿼리 매개 변수
Name | Description | 데이터 형식 |
---|---|---|
searchTerms | 필수 요소. 검색할 용어입니다. | 문자열 |
패싯 | 선택 사항 결과를 패싯할 쉼표로 구분된 필드 이름입니다. | 문자열 |
Startpage | count 매개 변수와 함께 페이징에 사용되는 결과의 선택적 시작 페이지입니다. 허용되는 값이 0보다 크거나 0보다 작은 값이 전달되면 오류 코드 400이 있는 HTTP 오류가 반환됩니다. | 문자열 |
개수 | 선택 사항 한 페이지에서 원하는 결과 수(페이징)입니다. 기본값은 10입니다. 허용되는 값은 1에서 100 사이의 간격입니다. 이 범위를 벗어난 값이 전달되면 오류 코드 400이 있는 HTTP 오류가 반환됩니다. 검색 결과의 다음 부분을 얻으려면 요청을 반복하지만 startPage를 1씩 늘입니다. | 정수 |
뷰 | 선택 사항 클라이언트에서 보려는 보기를 가져오며, 지금은 DataSource에서 유일하게 지원되는 옵션입니다. | 문자열 |
GET 예제
https://api.azuredatacatalog.com/catalogs/DefaultCatalog/search/search?searchTerms=My_Server&count=10&startPage=1&api-version=2016-03-30
헤더
x-ms-client-request-id: 546f053a…a1612f3a3d69
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
응답
상태 코드
코드 | Description |
---|---|
200 | OK. 검색 결과가 있는 성공적인 작업입니다. |
콘텐츠 형식
application/json
헤더
x-ms-request-id: 0ab2e798…088223257ad2
Content-Length: 3926
본문
{
"query": {
"id": "bd067219...4ba9a56e204b",
"searchTerms": "My_server",
"startIndex": 1,
"startPage": 1,
"count": 1,
"id": "bd067219...4ba9a56e204b",
"totalResults": 508,
"startIndex": 1,
"itemsPerPage": 1,
"results": [{
"updated": "0001-01-01T00:00:00",
"content": {
"properties": {
"fromSourceSystem": true,
"name": "MyTable",
"dsl": {
"protocol": "tds",
"authentication": "windows",
"address": {
"server": "My_SERVER",
"database": "my_DB",
"schema": "my_SCHEMA",
"object": "my_TABLE"
}
},
"dataSource": {
"sourceType": "SQL Server",
"objectType": "Table"
},
"lastRegisteredBy": {
"upn": "user1@contoso.com",
"firstName": "User1FirstName",
"lastName": "User1LastName"
},
"containerId": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/containers/a9f8a2e1-d826-7c0c-b186-c7f4334a6b4f"
},
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/08d91f0d-26a0-1e8e-ab3b-d463ac3e62cb",
"type": "Microsoft.DataSource.Table.1",
"timestamp": "2016-03-15T23:20:12.5423855",
"annotations": {
"schema": {
"properties": {
"fromSourceSystem": true,
"columns": [
{
"name": "ID",
"type": "int",
"maxLength": 4,
"precision": 10,
"isNullable": false
},
{
"name": "Column2",
"type": "nchar",
"maxLength": 10,
"precision": 0,
"isNullable": true
}
]
},
"id": "https://e2255231-6dd3-1a0d-a6d8-7fc96dd780c2-mycatalog.api.azuredatacatalog.com/catalogs/MyCatalog/views/tables/08d91f0d-26a0-1e8e-ab3b-d463ac3e62cb/schema",
"type": "Microsoft.DataSource.Schema.1",
"timestamp": "2016-03-15T23:20:12.5423855",
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ViewRoles",
"Update"
]
}
},
"roles": [
{
"role": "Contributor",
"members": [
{
"objectId": "00000000-0000-0000-0000-000000000201"
}
]
}
],
"effectiveRights": [
"Read",
"Delete",
"ChangeOwnership",
"ChangeVisibility",
"ViewPermissions",
"ViewRoles",
"Update",
"TakeOwnership"
]
},
"hitProperties": [{
"fieldPath": "properties.dsl.address.server",
"highlightDetail": [{
"highlightedWords": [{
"word": "My_sERVER"
}],
"highlightedFragment": "My_sERVER"
}]
},
{
"fieldPath": "properties.dataSource.sourceType",
"highlightDetail": [{
"highlightedWords": [{
"word": "Server"
}],
"highlightedFragment": "SQL Server"
}]
},
{
"fieldPath": "properties.dsl.address.object",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_TABLE"
}]
},
{
"fieldPath": "properties.dsl.address.database",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_DB"
}]
},
{
"fieldPath": "properties.dsl.address.schema",
"highlightDetail": [{
"highlightedWords": [{
"word": "my"
}],
"highlightedFragment": "my_SCHEMA"
}]
}]
}]
}
예제
이 예제에서는 Azure AD 액세스 토큰을 가져와서 검색 작업을 수행하는 방법을 보여줍니다.
참고카탈로그 이름을 찾으려면 Azure Data Catalog 로그인하고 사용자를 선택합니다. 카탈로그 이름이 표시됩니다.
using System;
using System.Net;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.IO;
...
//To learn how to register a client app and get a Client ID,
// see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
static string clientIDFromAzureAppRegistration = "{clientID}";
static void Main(string[] args)
{
//Note: This example uses the "DefaultCatalog" keyword to update the user's default catalog. You may alternately
//specify the actual catalog name.
string catalogName = "DefaultCatalog";
//Search everything
string searchTerm = string.Empty;
string searchJson = Search(catalogName, searchTerm);
//Other examples "tags:=Sales", "upn:{username}"
Console.WriteLine(searchJson);
}
static AuthenticationResult AccessToken()
{
//Get access token:
// To call a Data Catalog REST operation, create an instance of AuthenticationContext and call AcquireToken
// AuthenticationContext is part of the Active Directory Authentication Library NuGet package
// To install the Active Directory Authentication Library NuGet package in Visual Studio,
// run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.
//Resource Uri for Data Catalog API
string resourceUri = "https://api.azuredatacatalog.com";
//To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/azure/mt403303.aspx#clientID
string clientId = clientIDFromAzureAppRegistration;
//A redirect uri gives AAD more details about the specific application that it will authenticate.
//Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
string redirectUri = "https://login.live.com/oauth20_desktop.srf";
// Create an instance of AuthenticationContext to acquire an Azure access token
// OAuth2 authority Uri
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
// AcquireToken takes a Client Id that Azure AD creates when you register your client app.
return authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession);
}
static string Search(string catalogName, string searchTerm)
{
string responseContent = string.Empty;
//NOTE: To find the Catalog Name, sign into Azure Data Catalog, and choose User. You will see a list of Catalog names.
string fullUri =
string.Format("https://api.azuredatacatalog.com/catalogs/{0}/search/search?searchTerms={1}&count=10&api-version=2016-03-30", catalogName, searchTerm);
//Create a GET WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUri);
request.Method = "GET";
try
{
//Get HttpWebResponse from GET request
using (HttpWebResponse httpResponse = SetRequestAndGetResponse(request))
{
//Get StreamReader that holds the response stream
using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
responseContent = reader.ReadToEnd();
}
}
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Status);
if (ex.Response != null)
{
// can use ex.Response.Status, .StatusDescription
if (ex.Response.ContentLength != 0)
{
using (var stream = ex.Response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
return null;
}
return responseContent;
}
static HttpWebResponse SetRequestAndGetResponse(HttpWebRequest request, string payload = null)
{
while (true)
{
//To authorize the operation call, you need an access token which is part of the Authorization header
request.Headers.Add("Authorization", AccessToken().CreateAuthorizationHeader());
//Set to false to be able to intercept redirects
request.AllowAutoRedirect = false;
if (!string.IsNullOrEmpty(payload))
{
byte[] byteArray = Encoding.UTF8.GetBytes(payload);
request.ContentLength = byteArray.Length;
request.ContentType = "application/json";
//Write JSON byte[] into a Stream
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
}
else
{
request.ContentLength = 0;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
// Requests to **Azure Data Catalog (ADC)** may return an HTTP 302 response to indicate
// redirection to a different endpoint. In response to a 302, the caller must re-issue
// the request to the URL specified by the Location response header.
if (response.StatusCode == HttpStatusCode.Redirect)
{
string redirectedUrl = response.Headers["Location"];
HttpWebRequest nextRequest = WebRequest.Create(redirectedUrl) as HttpWebRequest;
nextRequest.Method = request.Method;
request = nextRequest;
}
else
{
return response;
break;
}
}
}
삭제
데이터 자산과 연결된 모든 주석(있는 경우)을 삭제합니다.
낙관적 동시성 제어를 위한 선택적 If-Match 헤더를 지원합니다. W/"123456789"과 같은 약한 형식만 지원됩니다.
요청
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | 문자열 |
view_item_id | 보기 항목의 ID입니다. | String |
api-version | API 버전입니다. | 문자열 |
DELETE 예제
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a?api-version=2016-03-30
헤더
x-ms-client-request-id: 59b68a46…46dc3ec8dcb8
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
응답
상태 코드
코드 | Description |
---|---|
204 | NoContent 참고: 삭제 작업 의미 체계는 "있는 경우 삭제"이므로 자산 또는 주석이 없으면 코드 204(NoContent)가 반환될 상태 성공합니다. |
412 | 사전 조건이 실패했습니다. ETag 불일치로 인해 요청이 취소되었습니다. |
콘텐츠 형식
application/json
헤더
x-ms-request-id: 664f86cf…5e512fa78e92
주석 업데이트
주석을 업데이트.
항목은 선택적으로 ETag 값을 포함하여 낙관적 동시성 제어를 사용하도록 설정할 수 있습니다.
요청
PUT https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}/{nested_non_singleton_view_item_id}?api-version={api-version}
PUT https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | 문자열 |
view_item_id | 보기 항목의 ID입니다. | 문자열 |
nested_view_name | 중첩된 뷰의 이름입니다. | 문자열 |
nested_non_singleton_view_item_id | 중첩된 비 싱글톤 보기 항목의 ID입니다. 싱글톤이 아닌 뷰에 대해 제공해야 합니다. | String |
api-version | API 버전입니다. | 문자열 |
싱글톤 설명서 보기에 대한 PUT 예제
PUT https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0...1be45ecd462a/documentation?api-version=2016-03-30
헤더
Content-Type: application/json; charset=utf-8
x-ms-client-request-id: 059692ee-...-57490fcec42c
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
본문 스키마
Body:
{
"fromSourceSystem": false,
"etag": "123456789",
"content": "<new documentation content>",
"mimetype": "text",
}
응답
상태 코드
코드 | Description |
---|---|
200 | OK. 기존 주석이 업데이트되었습니다. |
412 | 사전 조건이 실패했습니다. 하나 이상의 항목에서 ETag 불일치로 인해 요청이 취소되었습니다. |
콘텐츠 형식
application/json
헤더
x-ms-request-id: 3b8668da…1558d0f407c0
주석 삭제
주석과 중첩된 모든 주석(있는 경우)을 삭제합니다.
낙관적 동시성 제어를 위한 선택적 If-Match 헤더를 지원합니다. W/"123456789"과 같은 약한 형식만 지원됩니다.
요청
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}/{nested_non_singleton_view_item_id}?api-version={api-version}
DELETE https://api.azuredatacatalog.com/catalogs/{catalog_name}/views/{view_name}/{view_item_id}/{nested_view_name}?api-version={api-version}
참고
일부 HTTP 클라이언트 구현은 서버의 302에 대한 응답으로 요청을 자동으로 다시 실행할 수 있지만 일반적으로 요청에서 권한 부여 헤더를 제거할 수 있습니다. ADC에 대한 요청을 수행하려면 권한 부여 헤더가 필요하므로 ADC에서 지정한 리디렉션 위치에 요청을 다시 발급할 때 권한 부여 헤더가 계속 제공되는지 확인해야 합니다. 다음은 .NET HttpWebRequest 개체를 사용하여 이를 보여주는 샘플 코드입니다.
URI 매개 변수
속성 | Description | 데이터 형식 |
---|---|---|
catalog_name | 카탈로그의 이름 또는 기본 카탈로그를 사용할 "DefaultCatalog"입니다. | 문자열 |
view_name | 데이터 자산 뷰의 이름입니다. | 문자열 |
view_item_id | 보기 항목의 ID입니다. | 문자열 |
nested_view_name | 중첩된 뷰의 이름입니다. | 문자열 |
nested_non_singleton_view_item_id | 중첩된 비 싱글톤 보기 항목의 ID입니다. 싱글톤이 아닌 뷰에 대해 제공해야 합니다. | String |
api-version | API 버전입니다. | 문자열 |
DELETE 예제
DELETE https://api.azuredatacatalog.com/catalogs/DefaultCatalog/views/tables/042297b0-c187-49cc-8f30-1be45ecd462a/experts/22c3fa019b3945dc97143ebc3ad74cbf-1111fa019b3945dc97143ebc3ad74cbf?api-version=2016-03-30
헤더
x-ms-client-request-id: c8da5f08…67b203d77b2d
Authorization: Bearer eXJ0eyAiOiJKV1QiLCJhbGciOi...
If-Match: W/"123456789"
응답
상태 코드
코드 | Description |
---|---|
204 | NoContent |
412 | 사전 조건이 실패했습니다. ETag 불일치로 인해 요청이 취소되었습니다. |
콘텐츠 형식
application/json
헤더
x-ms-request-id: 276b9dc4…e5f7017805c