Mission Completed

메타데이터 얻기 본문

selfstudy/MySQL

메타데이터 얻기

삼지안☆ 2013. 9. 6. 09:27

메타데이터란?

정보를 지적으로 통제하고 구조적으로 접근할 수 있도록 하기 위해서 정보 유형을 정리한 2차적인 정보를 말한다.
즉, 사물을 표현하는 특성의 정보 유형이 메타데이터이며,
데이터의 유형을 정한 데이터라는 의미에서 '데이터에 대한 데이터'라고 정의하기도 한다.

예를 들면, 인간이라는 입체적인 대상을 설명할 때 신장, 피부색 등의 신체적 특징을 사용할 수도 있고,
국적, 사용언어, 직업 등 사회/문화적 특징을 사용할 수도 있다.
혹은 어떤 사람의 건강을 유지하기 위하여 병력 등의 특징을 따로 염두에 두어야 할 경우도 있다.

이와 마찬가지로 기록을 설명, 즉 기술하는 데 있어서도 검색을 염두에 두고 데이터 요소를 정할 수도 있고(기술/자원 발견 메타데이터),
기록관리(기록 관리 메타데이터)나 보존(보존 메타데이터)을 지원하는 데 필요한 대표적인 특징을 메타데이터 요소 세트로 정할 수도 있다.
기술(descriptive) 메타데이터는 기록의 지적 내용에 관한 특징을 포함함으로써 기술 대상 기록을 검색할 수 있도록 해준다.
한편, 구조(structural) 메타데이터는 개별 기록 단위에서 전체를 구성하는 각각의 부분 간의 관계를 보여준다.

출처: Naver, http://terms.naver.com/entry.nhn?docId=440963&cid=441&categoryId=441


SHOW를 사용하여 메타데이터 획득하기

MySQL은 여러가지 형태의 DB의 metadata를 나타내기 위해 SHOW문을 제공한다.


_SHOW 문
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM TBL_NAME;
SHOW INDEX FROM TBL_NAME;
SHOW COLUMNS FROM TBL_NAME LIKE 's%';
SHOW COLUMNS FROM TBL_NAME WHERE 'Key' = 'PRI';

등등...


주의! SHOW TABLES는 TEMPORARY 테이블들을 나열하는 것이 아님!!


다음의 문장 중 하나를 사용하면 TEMPORARY 테이블이라 하더라도 테이블의 존재 결정이 가능해 진다.

SHOW COUNT(*) FROM TBL_NAME;
SHOW * FROM TBL_NAME WHERE FALSE;

where 절이 없는 count(*)는 매우 최적화 되어있기 때문에 첫 번째 문장은 MyISAM 테이블에 매우 적합하다.
InnoDB 테이블은 행을 카운트 하기 위해서 전체를 스캔해야 하기 때문에 적합하지 않다.
두번째 문장은 어떤 저장 엔진에 대해서는 매우 빠르게 동작할 수 있기 때문에 좀 더 일반적이다.
이 문장들은 쿼리의 성공 또는 실패를 알 수 있고, 이에 따른 대응 방법도 취할 수 있기 때문에 Perl나 PHP와 같은 어플리케이션 프로그래밍 언어에 적합하다.

INFORMATION_SCHEMA로 메타데이터 획득하기

DB에 대한 정보를 얻는 또 다른 방법은 INFORMATION_SCHEMA 데이터베이스에 접근하는 것이다.
INFORMATION_SCHEMA는 SELECT 문을 통해서 접근이 가능하고 정해진 방법으로 사용될 수 있다.
**SHOW 문은 항상 정해진 세트의 칼럼을 나타내며 테이블의 결과를 얻을 수는 없다.

SELECT 문은 특정 출력 칼럼을 나타낼 수 있으며,
WHERE 절은 원하는 정보를 선택할 때 필요한 표현식을 지정할 수 있다.
또한 조인이나 서브쿼리를 사용할 수 있고, 나중에 사용할 또 다른 테이블에서 검색한 결과를 저장하기 위해서 CREATE TABLE ... SELECT 또는 INSERT INTO ... SELECT 를 사용할 수 있다.

INFORMATION_SCHEMA는 다른 종류의 데이터베이스 메타데이터를 위한 뷰 역할을 하는 테이블들의 가상 데이터베이스로 생각될 수 있다.
INFORMATION_SCHEMA가 포함하는 테이블이 무엇인지를 보기 위해서 SHOW TABLES를 사용할 수 있다.
_사용 예_

SHOW TABLES IN INFORMATION_SCHEMA;

출처: Paul DuBois, 김형훈 역, 2009. 한국어판 MySQL 4th ed., chapter2 section7