Hive의 데이터 커넥터
Hive의 데이터 커넥터 (Data Connectors in Hive)
원격 데이터 소스(예: PostgreSQL)를 Hive에 연결하는 데이터 커넥터 기능을 다루는 문서예요. 기존 JDBC Storage Handler의 한계를 넘어, 데이터베이스 전체를 Hive에 매핑해 실시간으로 조회할 수 있는 방법을 설명합니다.
출처: 문서
본문
데이터 커넥터란? (What is a Data connector?)
데이터 커넥터(Hive 쿼리 언어에서는 "connector"라고 부름)는 Hive의 최상위 객체로, 사용자가 hive에서 데이터 소스에 연결하기 위해 필요한 속성 집합을 정의할 수 있게 해줍니다. 커넥터는 타입(폐쇄된 열거 집합)을 가지므로 Hive가 (JDBC용) 드라이버 클래스와 기타 URL 파라미터를 결정할 수 있고, URL과 원격 데이터 소스의 기본 자격 증명을 포함할 수 있는 속성 집합을 가집니다. 정의되면 사용자는 같은 커넥터 객체로 원격 데이터 소스의 여러 데이터베이스를 로컬 hive 메타스토어에 매핑할 수 있습니다.
JDBC Storage Handler를 사용하면 사용자는 데이터가 원격 JDBC 데이터 저장소에 있는 hive 메타스토어에 테이블을 정의합니다. 이 hive 테이블의 메타데이터는 로컬로 hive 메타스토어의 백엔드에 저장됩니다. Hiveserver2가 이 테이블에 대해 쿼리를 실행하면 데이터는 원격 JDBC 테이블에서 검색됩니다. 이것 자체만으로도 강력하지만 한계가 있습니다.
- 원격 데이터 소스의 각 원격 테이블을 개별적으로 로컬 hive 테이블에 매핑해야 합니다. 많은 테이블로 구성된 전체 데이터베이스를 매핑해야 한다면 지루한 작업이 됩니다.
- 원격 데이터 소스의 새 테이블은 자동으로 보이지 않으며 hive에서 수동으로 매핑해야 합니다.
- 매핑된 테이블의 메타데이터는 정적입니다. 원격 테이블의 변경을 추적하지 않습니다. 원격 테이블이 변경(컬럼 추가 또는 삭제)되면 매핑된 hive 테이블을 삭제하고 다시 만들어야 합니다. 테이블이 계속 변하면 관리가 복잡해집니다.
데이터 커넥터를 사용하면 원격 데이터 소스의 데이터베이스/스키마를 Hive 데이터베이스에 매핑할 수 있습니다. 이런 데이터베이스는 hive에서 REMOTE 데이터베이스라고 부릅니다.
CREATE REMOTE DATABASE postgres_db1 USING <connectorName> WITH DBPROPERTIES ('connector.remoteDbName'='db1');
- 매핑된 데이터베이스(db1) 내의 모든 테이블은 Hive에서 자동으로 보입니다. 이 테이블들의 메타데이터는 Hive 메타스토어의 백엔드에 저장되지 않습니다. 라이브 커넥터를 통해 런타임에 검색됩니다.
- 이후의 모든 테이블도 자동으로 Hive에서 보이게 됩니다.
- 컬럼과 그 데이터 타입도 런타임에 호환되는 hive 데이터 타입으로 매핑됩니다. 따라서 원격 데이터 소스의 테이블에 대한 어떤 메타데이터 변경도 즉시 hive에 반영됩니다.
- 같은 커넥터로 다른 데이터베이스를 hive 데이터베이스에 매핑할 수 있습니다. 모든 연결 정보는 이 REMOTE 데이터베이스들 간에 공유됩니다.
어떻게 사용하나요? (How do I use it?)
- 먼저 커넥터를 만듭니다.
CREATE CONNECTOR pg_local TYPE 'postgres' URL 'jdbc:<postgresql://localhost:5432>' WITH DCPROPERTIES ("hive.sql.dbcp.username"="postgres", "hive.sql.dbcp.password"="postgres");
- 1단계의 커넥터를 사용해 hive에 REMOTE 타입의 데이터베이스를 만듭니다. 이것은 이름이 "hive_hms_testing"인 원격 데이터베이스를 hive의 "pg_hive_testing"이라는 hive 데이터베이스에 매핑합니다.
CREATE REMOTE DATABASE pg_hive_testing USING pg_local WITH DBPROPERTIES ("connector.remoteDbName"="hive_hms_testing");
// DCPROPERTIES에서 평문 비밀번호 대신 키스토어 사용
CREATE CONNECTOR pg_local_ks TYPE 'postgres' URL 'jdbc:<postgresql://localhost:5432/hive_hms_testing>' WITH DCPROPERTIES("hive.sql.dbcp.username"="postgres","hive.sql.dbcp.password.keystore"="jceks://app/local/hive/secrets.jceks" "hive.sql.dbcp.password.key"="postgres.credential");
CREATE REMOTE DATABASE pg_ks_local USING pg_local_ks("connector.remoteDbName"="hive_hms_testing");
3. JDBC-storagehandler 기반 테이블처럼 REMOTE 데이터베이스의 테이블을 사용합니다. 큰 차이점 하나는 이 테이블의 메타데이터는 hive에 저장되지 않는다는 점입니다. 현재 REMOTE 데이터베이스에서는 create/alter/drop table DDL이 지원되지 않습니다.
USE pg_hive_testing;
SHOW TABLES;
DESCRIBE [formatted] <tablename>;
SELECT <col1> from <tablename> where <filter1> and <filter2>;
더 알아보기 (Learn more)
데이터 커넥터는 원격 DB 전체를 Hive의 REMOTE 데이터베이스로 매핑해, 테이블 메타데이터를 저장하지 않고 런타임에 실시간으로 조회하는 기능이에요. 커넥터를 먼저 CREATE CONNECTOR로 만들고, CREATE REMOTE DATABASE로 매핑한 뒤 일반 테이블처럼 SELECT하면 됩니다.