Hive에서 외부 테이블 생성
자습서: Amazon DynamoDB 및 Apache Hive 작업에서 DynamoDB 테이블로 매핑된 외부 Hive 테이블을 생성했습니다. 외부 테이블에 대해 HiveQL 문을 실행했을 때 읽기 및 쓰기 작업이 DynamoDB 테이블로 전달되었습니다.
외부 테이블을 다른 위치에서 관리 및 저장되는 데이터 원본에 대한 포인터로 생각할 수 있습니다. 이 경우 기본 데이터 원본은 DynamoDB 테이블입니다. (테이블이 이미 있어야 합니다. Hive 내부에서 DynamoDB 테이블을 생성, 업데이트, 삭제할 수 없습니다.) CREATE EXTERNAL TABLE
문을 사용하여 외부 테이블을 생성합니다. 그러면 데이터가 Hive 내부에 로컬로 저장된 것처럼 HiveQL을 사용하여 DynamoDB 내 데이터로 작업할 수 있습니다.
참고
INSERT
문을 사용하여 외부 테이블에 데이터를 삽입하고, SELECT
문을 사용하여 외부 테이블에서 데이터를 선택할 수 있습니다. 하지만 UPDATE
또는 DELETE
문을 사용하여 테이블 내 데이터를 조작할 수는 없습니다.
더 이상 외부 테이블이 필요하지 않은 경우 DROP
TABLE
문을 사용하여 제거할 수 있습니다. 이 경우 DROP TABLE
문은 Hive 내 외부 테이블만 제거합니다. 기본 DynamoDB 테이블 또는 그 안의 데이터에는 영향을 주지 않습니다.
CREATE EXTERNAL TABLE 구문
다음은 DynamoDB 테이블로 매핑되는 외부 Hive 테이블을 생성하기 위한 HiveQL 구문입니다.
CREATE EXTERNAL TABLE
hive_table
(hive_column1_name
hive_column1_datatype
,hive_column2_name
hive_column2_datatype
...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" ="dynamodb_table"
, "dynamodb.column.mapping" = "hive_column1_name
:dynamodb_attribute1_name
,hive_column2_name
:dynamodb_attribute2_name
..." );
행 1은 CREATE EXTERNAL TABLE
문의 시작입니다. 여기서 생성하려는 Hive 테이블(hive_table)의 이름을 제공합니다.
행 2는 hive_table의 열 및 데이터 형식을 지정합니다. DynamoDB 테이블의 속성에 해당하는 열 및 데이터 형식을 정의해야 합니다.
행 3은 STORED BY
절입니다. 여기서 Hive와 DynamoDB 테이블 사이의 데이터 관리를 처리하는 클래스를 지정합니다. DynamoDB의 경우 STORED BY
를 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
로 설정해야 합니다.
행 4는 TBLPROPERTIES
절의 시작 부분입니다. 여기서 DynamoDBStorageHandler
에 대해 다음 파라미터를 정의합니다.
-
dynamodb.table.name
- DynamoDB 테이블의 이름 -
dynamodb.column.mapping
- Hive 테이블의 열 이름과 해당하는 DynamoDB 테이블 속성의 쌍. 각 쌍은 hive_column_name:dynamodb_attribute_name 형식이며 쉼표로 구분됩니다.
다음을 참조하세요.
-
Hive 테이블 이름이 DynamoDB 테이블 이름과 같을 필요는 없습니다.
-
Hive 테이블 열 이름이 DynamoDB 테이블의 열 이름과 같을 필요는 없습니다.
-
dynamodb.table.name
에서 지정된 테이블이 DynamoDB에 존재해야 합니다. -
dynamodb.column.mapping
의 경우:-
DynamoDB 테이블의 키 스키마 속성을 매핑해야 합니다. 여기에는 파티션 키와 정렬 키(있는 경우)가 포함됩니다.
-
DynamoDB 테이블의 키가 아닌 속성을 매핑할 필요는 없습니다. 하지만 Hive 테이블을 쿼리할 때 이들 속성의 데이터는 볼 수 없게 됩니다.
-
Hive 테이블 열과 DynamoDB 속성의 데이터 형식이 호환되지 않을 경우 Hive 테이블을 쿼리하면 이러한 열에
NULL
이 표시됩니다.
-
참고
CREATE EXTERNAL TABLE
문은 TBLPROPERTIES
절에 대한 검증을 수행하지 않습니다. dynamodb.table.name
및 dynamodb.column.mapping
에 지정한 값은 테이블에 액세스할 때만 DynamoDBStorageHandler
클래스에 의해 평가됩니다.
데이터 형식 매핑
다음 표에는 DynamoDB 데이터 형식 및 호환 Hvie 데이터 형식이 나와 있습니다.
DynamoDB 데이터 형식 | Hive 데이터 형식 |
---|---|
String |
|
숫자 |
|
바이너리 |
|
문자열 집합 |
|
숫자 집합 |
|
이진수 집합 |
|
참고
다음 DynamoDB 데이터 형식은 DynamoDBStorageHandler
클래스에서 지원하지 않으므로 dynamodb.column.mapping
과 함께 사용할 수 없습니다.
-
맵
-
나열
-
불
-
Null
하지만 이러한 데이터 유형을 사용해야 하는 경우 전체 DynamoDB 항목을 맵의 키와 값 모두에 대한 문자열 맵으로 나타내는 item
이라는 단일 엔터티를 만들 수 있습니다. 자세한 내용은 열 매핑 없이 데이터 복사 단원을 참조하세요.
숫자 형식의 DynamoDB 속성을 매핑하기 원할 경우 적절한 Hive 형식을 선택해야 합니다.
-
Hive
BIGINT
형식은 부호 있는 8바이트 정수입니다. Java의long
데이터 형식과 동일합니다. -
Hive
DOUBLE
형식은 8비트 배정밀도 부동 소수점 수입니다. Java의double
형식과 동일합니다.
선택한 Hive 데이터 형식보다 정밀도가 높은 수치 데이터가 DynamoDB에 저장된 경우 DynamoDB 데이터에 액세스하면 정밀도가 손실될 수 있습니다.
이진수 형식의 데이터를 DynamoDB에서 (Amazon S3) 또는 HDFS로 내보낼 경우 데이터는 Base64로 인코딩된 문자열로 저장됩니다. 데이터를 Amazon S3 또는 HDFS에서 DynamoDB 이진수 형식으로 가져올 경우 데이터가 Base64 문자열로 인코딩되었는지 확인해야 합니다.