이 페이지에서는 Dataproc Metastore 관리자 인터페이스를 사용하는 방법을 설명합니다.
관리자 인터페이스는 Dataproc 클러스터 또는 Hive 인스턴스에 연결하지 않고도 Dataproc Metastore 서비스에 저장된 메타데이터를 검사하고 관리할 수 있는 중앙 집중식 도구를 제공합니다. 대신 gcloud CLI 또는 Dataproc Metastore API를 사용하여 메타데이터를 관리할 수 있습니다.
예를 들어 관리자 인터페이스를 사용하여 백엔드 메타데이터에서 직접 SQL 쿼리를 실행하여 특정 테이블 이름을 가져올 수 있습니다. 이 프로세스에는 Dataproc 클러스터 만들기, SSH를 사용하여 클러스터에 연결, Hive 인스턴스 시작, 마지막으로 쿼리 실행(예: SELECT * FROM table_name
) 등과 같은 일반적인 워크플로우보다 더 적은 단계가 포함됩니다.
따라서 관리자 인터페이스를 사용하면 시간을 절약하고 데이터를 검색하는 데 필요한 Google Cloud 리소스의 양을 줄일 수 있습니다.
시작하기 전에
필요한 역할
Dataproc Metastore 관리자 인터페이스를 사용하는 데 필요한 권한을 얻으려면 관리자에게 최소 권한의 원칙에 따라 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- Dataproc Metastore 메타데이터를 쿼리하려는 경우: 사용자 계정 또는 서비스 계정의 메타데이터 쿼리 관리자(
roles/metastore.metadataQueryAdmin
) -
데이터베이스, 테이블, 파티션 등 메타데이터의 리소스 위치를 변경하거나 테이블을 다른 데이터베이스로 이동하려는 경우:
-
사용자 계정 또는 서비스 계정에 대한 메타데이터 변형 관리자(
roles/metastore.metadataMutateAdmin
) -
사용자 계정 또는 서비스 계정에 Dataproc Metastore 편집자 역할(
roles/metastore.editor
)
-
사용자 계정 또는 서비스 계정에 대한 메타데이터 변형 관리자(
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 Dataproc Metastore 관리자 인터페이스를 사용하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.
필수 권한
Dataproc Metastore 관리자 인터페이스를 사용하려면 다음 권한이 필요합니다.
-
Dataproc Metastore 메타데이터를 쿼리하려는 경우:
metastore.services.queryMetadata
-
Dataproc Metastore 테이블을 변경하거나 이동하려는 경우:
metastore.services.mutateMetadata
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
특정 Dataproc Metastore 역할 및 권한에 대한 자세한 내용은 Dataproc Metastore IAM 개요를 참조하세요.지원되는 관리자 작업
관리자 인터페이스 작업은 gcloud CLI 또는 Dataproc Metastore API를 사용해서만 실행할 수 있습니다. Google Cloud 콘솔에서는 관리자 인터페이스 작업이 지원되지 않습니다.
관리자 인터페이스는 다음 작업을 지원합니다.
읽기 전용 작업.
- 쿼리 메타데이터
읽기 및 쓰기 작업
- 데이터베이스, 테이블, 파티션을 포함하여 메타데이터의 리소스 위치를 변경합니다.
- 커스텀 키-값 쌍과 같은 테이블 속성을 변경합니다.
- 테이블을 다른 데이터베이스로 이동합니다.
쿼리 메타데이터
이 작업은 SQL 쿼리를 사용하여 데이터베이스에서 메타데이터 정보를 조회할 수 있게 해줍니다. 쿼리를 실행한 후 결과는 아티팩트 Google Cloud 버킷에 덤프됩니다.
이 작업을 실행하기 전 다음 고려사항을 참조하세요.
- 지원되는 작업에는
read-only
MySQL 또는 Spanner 쿼리만 포함됩니다. 쿼리에서 데이터를 수정하려고 시도하면 작업이 실패합니다. - 출력 파일에는 최대 1,000개의 행이 포함됩니다. 이 구성은 변경할 수 없습니다.
출력 파일은 자동으로 삭제되지 않습니다. 대신 Google Cloud 버킷에서 수동으로 삭제해야 합니다. 삭제하지 않으면 추가 스토리지 비용이 발생할 수 있습니다.
gcloud CLI
메타데이터를 쿼리하려면 다음
gcloud metastore services query-metadata
명령어를 실행합니다.gcloud metastore services query-metadata SERVICE \ --location=LOCATION \ --query=QUERY
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore 서비스가 있는 Google Cloud 리전QUERY
: 메타데이터를 타겟팅할 SQL 쿼리- MySQL 데이터베이스를 사용하는 경우 일반 MySQL 쿼리를 사용합니다.
- Spanner 데이터베이스를 사용하는 경우 GoogleSQL 쿼리를 사용합니다.
아티팩트 Google Cloud 버킷에서 출력 파일을 확인합니다.
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-X POST -d '{"query": "QUERY"}' \
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:queryMetadata
다음을 바꿉니다.
QUERY
: 메타데이터를 타겟팅하는 데 사용하는 SQL 쿼리- MySQL 데이터베이스를 사용하는 경우 일반 MySQL 쿼리를 사용합니다.
- Spanner 데이터베이스를 사용하는 경우 GoogleSQL 쿼리를 사용합니다.
PROJECT_ID
: Dataproc Metastore 서비스가 있는 Google Cloud 프로젝트 IDSERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore가 있는 리전
다음 예시에서는 DBS라는 데이터베이스에서 select *
쿼리를 실행하는 샘플 명령어를 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" -X POST -d '{"query": "select * from DBS;"}' \
https://metastore.googleapis.com/projects/dpms/locations/us-central1/services/dpms1:queryMetadata
쿼리 메타데이터 작업의 출력 해석
쿼리 메타데이터 명령어를 처음 실행하면 Dataproc Metastore가 자동으로 아티팩트 Google Cloud 버킷에 Google Cloud 폴더를 만듭니다.
이 폴더 이름은 query-results
입니다. 쿼리가 성공적으로 실행될 때마다(API 호출) query-results
폴더(임의로 생성된 UUID로 이름 지정) 내에 새 폴더가 생성됩니다.
각 새 폴더에는 쿼리 결과가 포함된 result manifest
파일이 있습니다. 이 폴더의 위치는 API 호출의 응답으로 반환됩니다.
예를 들어 응답애서 resultManifestUri
필드에는 파일 위치가 포함됩니다.
"response": {
"@type": "type.googleapis.com/google.cloud.metastore.QueryMetadataResponse",
"resultManifestUri": "gs://gcs-bucket-6a3638b8-e319-46363-ad33-e632a5e/query-results/800156f5-2d13-4b80-bec3-2345a9e880f6/result-manifest"
}
result manifest
파일의 출력은 다음과 비슷합니다.
{
"status": {
"code": 0,
"message": "Query results are successfully uploaded to cloud storage",
"details": []
},
"filenames": ["result-001"]
}
결과 매니페스트 파일 세부정보는 다음과 같습니다.
status
필드는 쿼리의 성공 또는 실패 여부를 보여줍니다.- 쿼리 실행이 성공하면
filenames
필드에 생성된 모든 파일이 나열됩니다. 이 파일은result manifest
파일과 동일한 폴더에 있습니다. - 쿼리 결과에 오류가 발생한 경우
details
필드에 오류 메시지가 표시됩니다.
메타데이터의 리소스 위치 변경
이 작업을 사용하면 데이터베이스, 테이블 또는 파티션의 리소스 위치를 변경할 수 있습니다.
이 명령어를 실행하면 상위 디렉터리 또는 해당 메타데이터 리소스만 업데이트됩니다. 이 명령어는 기존 데이터를 새 위치로 전송하지 않습니다.
gcloud CLI
메타데이터의 리소스 위치를 변경하려면 다음
gcloud metastore services alter-metadata-resource-location
명령어를 실행합니다.gcloud metastore services alter-metadata-resource-location SERVICE \ --location=LOCATION \ --resource_name=RESOURCE_NAME \ --location_uri=LOCATION_URI
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore 서비스가 있는 Google Cloud 리전RESOURCE_NAME
: 변경할 데이터베이스, 테이블 또는 파티션의 이름LOCATION_URI
:RESOURCE_NAME
콘텐츠의 새 Cloud Storage 경로. 이 값은 메타데이터 리소스 위치를 이동할 경로입니다. 이 경로는gs://
로 시작해야 합니다. 예를 들면gs://bucket/object
입니다.
리소스 위치 변경이 성공했는지 확인합니다.
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"resource_name": "RESOURCE_NAME", "location_uri":"LOCATION_URI"}' \
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:alterLocation
다음을 바꿉니다.
PROJECT_ID
: Dataproc Metastore 서비스가 있는 Google Cloud 프로젝트 IDSERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore가 있는 리전RESOURCE_NAME
: 변경할 데이터베이스, 테이블 또는 파티션의 이름LOCATION_URI
:RESOURCE_NAME
콘텐츠의 새 Cloud Storage 경로. 이 값은 메타데이터 리소스 위치를 이동할 경로입니다. 이 경로는gs://
로 시작해야 합니다. 예를 들면gs://bucket/object
입니다.
다음 예시에서는 test-table2
라는 테이블을 새 Cloud Storage 버킷으로 이동하는 샘플 명령어를 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST -d '{"resource_name": "databases/testdb1/tables/test-table2",
"location_uri":"gs://gcs-bucket-dpms1-9425bd83-b794-4f1c-9e79-2d833f758cc1/empty"}'
https://metastore.googleapis.com/projects/dpms/locations/us-central1/services/dpms1:alterLocation
테이블 속성 변경
이 작업을 사용하면 데이터를 저장하는 데 사용하는 커스텀 키-값 쌍과 같은 테이블 속성을 변경할 수 있습니다. 예를 들어 properties.customerID_1
의 키-값 쌍을 properties.customerID_2
로 변경할 수 있습니다.
gcloud CLI
테이블 속성을 변경하려면 다음
gcloud metastore services alter-table-properties
명령어를 실행합니다.gcloud metastore services alter-table-properties SERVICE \ --location=LOCATION \ --table-name=TABLE_NAME \ --update-mask=UPDATE_MASK \ --properties=PROPERTIES
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore 서비스가 있는 Google Cloud 리전TABLE_NAME
: 변경하려는 속성이 포함된 테이블의 이름(databases/{database_id}/tables/{table_id}
)UPDATE_MASK
: 업데이트할 기존 속성 값. 쉼표로 구분된 목록을 사용하여 키-값 쌍을 설명하세요(예:properties.1,properties.2,properties.3,...
).PROPERTIES
: 테이블의 새 속성. 쉼표로 구분된 목록을 사용하여 키-값 쌍을 설명하세요. 예를 들면a=1,b=2,c=3,...
입니다. 여기에 나열한 값은UPDATE_MASK
의 값을 덮어씁니다.
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"table_name": "TABLE_NAME", "update_mask":"UPDATE_MASK", "properties":PROPERTIES}'\
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:alterTableProperties
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore 서비스가 있는 Google Cloud 리전TABLE_NAME
: 변경하려는 속성이 포함된 테이블의 이름(databases/{database_id}/tables/{table_id}
)UPDATE_MASK
: 업데이트할 기존 속성 값. 쉼표로 구분된 목록을 사용하여 키-값 쌍을 설명하세요(예:properties.1,properties.2,properties.3,...
).PROPERTIES
: 테이블의 새 속성. 쉼표로 구분된 목록을 사용하여 키-값 쌍을 설명합니다(예:a=1,b=2,c=3,...
). 여기에 나열하는 값은UPDATE_MASK
의 값을 덮어씁니다.
다음 예시에서는 test-table
이라는 테이블의 테이블 속성을 변경하는 샘플 명령어를 보여줍니다. 이 예시에서는 기존 키-값 쌍 properties.customerID_1
을 새 값 properties.customerID_2
로 업데이트합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
-X POST -d '{"table_name": "databases/default/tables/test-table", "update_mask":{"paths":"properties.customerID_1"}, "properties":{"customerID_1":"customerID_2"}}' https://metastore.googleapis.com/projects/dpms-p
다른 데이터베이스로 테이블 이동
이 작업을 통해 내부 테이블(관리형 테이블)을 다른 데이터베이스로 이동할 수 있습니다. 이 경우 데이터베이스 상위 디렉터리와 해당 데이터가 모두 이동합니다.
외부 테이블에 저장된 데이터는 이동할 수 없습니다.
gcloud CLI
테이블을 다른 데이터베이스로 이동하려면 다음
gcloud metastore services move-table-to-database
명령어를 실행합니다.gcloud metastore services move-table-to-database SERVICE \ --location=LOCATION \ --db_name=DB_NAME \ --table_name=TABLE_NAME \ --destination_db_name=DESTINATION_DB_NAME
다음을 바꿉니다.
SERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore 서비스가 있는 Google Cloud 리전DB_NAME
: 이동할 테이블이 포함된 소스 데이터베이스의 이름TABLE_NAME
: 이동할 테이블의 이름DESTINATION_DB_NAME
: 테이블을 이동할 새 데이터베이스의 이름
테이블 변경이 성공했는지 확인하세요.
REST
curl -X POST -s -i \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
POST -d '{"table_name": "TABLE_NAME", "db_name": "DB_NAME", "destination_db_name": "DESTINATION_DB_NAME"}'\
-H "Content-Type:application/json" \
https://metastore.googleapis.com/projects/PROJECT_ID/locations/LOCATION/services/SERVICE:moveTableToDatabase
다음을 바꿉니다.
PROJECT_ID
: Dataproc Metastore 서비스가 있는 Google Cloud 프로젝트 IDSERVICE
: Dataproc Metastore 서비스 이름LOCATION
: Dataproc Metastore가 있는 리전DB_NAME
: 이동할 테이블이 포함된 소스 데이터베이스의 이름TABLE_NAME
: 이동할 테이블의 이름DESTINATION_DB_NAME
: 테이블을 이동할 새 데이터베이스의 이름
다음 예시는 testdb1
이라는 데이터베이스를 testdb2
라는 다른 데이터베이스로 이동하는 샘플 명령어를 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
-X POST -d '{"table_name": "testtb1", "db_name": "testdb1",
"destination_db_name": "testdb2"}' https://metastore.googleapis.com/projects/dpms/locations/asia-northeast2/services/dpms1:moveTableToDatabase