커스텀 데이터 소스를 통합하려면 커스텀 데이터 리소스 유형으로 Data Catalog 항목을 만들고 관리할 수 있는 Data Catalog API를 호출합니다. 이 문서에서 커스텀 데이터 리소스 유형에 대한 항목을 '커스텀 항목'이라고 합니다.
항목 그룹 및 커스텀 항목 만들기
커스텀 항목은 사용자가 만든 항목 그룹 내에 있어야 합니다. 항목 그룹을 만든 다음 항목 그룹에 커스텀 항목을 만듭니다. 자세한 내용은 항목 및 항목 그룹을 참조하세요.
항목을 만든 후 항목 그룹에 IAM 정책을 설정하여 항목 그룹과 그 안의 항목에 액세스할 수 있는 대상을 정의할 수 있습니다.
자바
이 샘플을 사용해 보기 전에 Data Catalog 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Data Catalog Java API 참고 문서를 참조하세요.
Data Catalog에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 Data Catalog 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Data Catalog Node.js API 참고 문서를 참조하세요.
Data Catalog에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 Data Catalog 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Data Catalog Python API 참고 문서를 참조하세요.
Data Catalog에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
REST 및 명령줄
REST
다음 예시를 참조하고 Data Catalog REST API entryGroups.create 및 entryGroups.entries.create 문서를 참조하세요.
1. 항목 그룹 만들기
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: Google Cloud 프로젝트 ID
- entryGroupId: ID는 문자 또는 밑줄로 시작해야 하며 영어, 숫자, 밑줄로만 구성될 수 있고 64자 이하여야 합니다.
- displayName: 항목 그룹의 텍스트 이름입니다.
HTTP 메서드 및 URL:
POST https://datacatalog.googleapis.com/v1/projects/project-id/locations/region/entryGroups?entryGroupId=entryGroupId
JSON 요청 본문:
{ "displayName": "Entry Group display name" }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/my_projectid/locations/us-central1/entryGroups/my_entry_group", "displayName": "Entry Group display name", "dataCatalogTimestamps": { "createTime": "2019-10-19T16:35:50.135Z", "updateTime": "2019-10-19T16:35:50.135Z" } }
2. 항목 그룹 내에 커스텀 항목 만들기
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project_id: Google Cloud 프로젝트 ID
- entryGroupId: 기존 항목 그룹의 ID입니다. 이 EntryGroup에 항목이 만들어집니다.
- entryId: 새 항목의 ID입니다. ID는 문자 또는 밑줄로 시작해야 하며 영어, 숫자, 밑줄로만 구성될 수 있고 64자 이하여야 합니다.
- description: 선택 항목 설명입니다.
- displayName: 항목의 텍스트 이름입니다(선택사항).
- userSpecifiedType: 커스텀 유형 이름입니다. 유형 이름은 문자 또는 밑줄로 시작해야 하며 문자, 숫자, 밑줄로만 구성될 수 있고 64자 이하여야 합니다.
- userSpecifiedSystem: 항목의 Google Cloud 외 소스 시스템으로 Data Catalog와 통합되지 않습니다. 소스 시스템 이름은 문자 또는 밑줄로 시작해야 하며 문자, 숫자, 밑줄로만 구성될 수 있고 64자 이하여야 합니다.
- linkedResource: 항목이 참조하는 리소스의 전체 이름입니다(선택사항).
- schema: 데이터 스키마입니다(선택사항).JSON 스키마 예시:
{ ... "schema": { "columns": [ { "column": "first_name", "description": "First name", "mode": "REQUIRED", "type": "STRING" }, { "column": "last_name", "description": "Last name", "mode": "REQUIRED", "type": "STRING" }, { "column": "address", "description": "Address", "mode": "REPEATED", "subcolumns": [ { "column": "city", "description": "City", "mode": "NULLABLE", "type": "STRING" }, { "column": "state", "description": "State", "mode": "NULLABLE", "type": "STRING" } ], "type": "RECORD" } ] } ... }
HTTP 메서드 및 URL:
POST https://datacatalog.googleapis.com/v1/projects/project_id/locations/region/entryGroups/entryGroupId/entries?entryId=entryId
JSON 요청 본문:
{ "description": "Description", "displayName": "Display name", "userSpecifiedType": "my_type", "userSpecifiedSystem": "my_system", "linkedResource": "example.com/def", "schema": { schema } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/my_project_id/locations/us-central1/entryGroups/my_entryGroup_id/entries/my_entry_id", "userSpecifiedType": "my-type", "userSpecifiedSystem": "my_system", "displayName": "On-prem entry", "description": "My entry description.", "schema": { "columns": [ { "type": "STRING", "description": "First name", "mode": "REQUIRED", "column": "first_name" }, { "type": "STRING", "description": "Last name", "mode": "REQUIRED", "column": "last_name" }, { "type": "RECORD", "description": "Address", "mode": "REPEATED", "column": "address", "subcolumns": [ { "type": "STRING", "description": "City", "mode": "NULLABLE", "column": "city" }, { "type": "STRING", "description": "State", "mode": "NULLABLE", "column": "state" } ] } ] }, "sourceSystemTimestamps": { "createTime": "2019-10-23T23:11:26.326Z", "updateTime": "2019-10-23T23:11:26.326Z" }, "linkedResource": "example.com/def" }