

# Amazon Athena Hortonworks 커넥터
<a name="connectors-hortonworks"></a>

Hortonworks용 Amazon Athena 커넥터를 사용하면 Amazon Athena가 Cloudera [Hortonworks](https://www.cloudera.com/products/hdp.html) 데이터 플랫폼에 대해 SQL 쿼리를 실행할 수 있습니다. 커넥터는 Athena SQL 쿼리를 동일한 HiveQL 구문으로 변환합니다.

이 커넥터는 Glue Connections를 사용하여 Glue의 구성 속성을 중앙 집중화하지 않습니다. 연결 구성은 Lambda를 통해 수행됩니다.

## 사전 조건
<a name="connectors-hive-prerequisites"></a>
+ Athena 콘솔 또는 AWS Serverless Application Repository를 사용하여 AWS 계정에 커넥터를 배포합니다. 자세한 내용은 [데이터 소스 연결 생성](connect-to-a-data-source.md) 또는 [AWS Serverless Application Repository을 사용하여 데이터 소스 커넥터 배포](connect-data-source-serverless-app-repo.md) 섹션을 참조하세요.

## 제한 사항
<a name="connectors-hortonworks-limitations"></a>
+ DDL 쓰기 작업은 지원되지 않습니다.
+ 멀티플렉서 설정에서 유출 버킷과 접두사는 모든 데이터베이스 인스턴스에서 공유됩니다.
+ 모든 관련 Lambda 제한. 자세한 내용은 *AWS Lambda 개발자 안내서*에서 [Lambda 할당량](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)을 참조하세요.

## 용어
<a name="connectors-hortonworks-terms"></a>

다음 용어는 Hortonworks Hive 커넥터와 관련이 있습니다.
+ **데이터베이스 인스턴스** - 온프레미스, Amazon EC2 또는 Amazon RDS에 배포된 데이터베이스의 모든 인스턴스.
+ **핸들러** - 데이터베이스 인스턴스에 액세스하는 Lambda 핸들러. 핸들러는 메타데이터 또는 데이터 레코드용일 수 있습니다.
+ **메타데이터 핸들러** - 데이터베이스 인스턴스에서 메타데이터를 검색하는 Lambda 핸들러.
+ **레코드 핸들러** - 데이터베이스 인스턴스에서 데이터 레코드를 검색하는 Lambda 핸들러.
+ **복합 핸들러** - 데이터베이스 인스턴스에서 메타데이터와 데이터 레코드를 모두 검색하는 Lambda 핸들러.
+ **속성 또는 파라미터** - 핸들러에서 데이터베이스 정보를 추출하는 데 사용되는 데이터베이스 속성. 이러한 속성을 Lambda 환경 변수로 구성합니다.
+ **연결 문자열** - 데이터베이스 인스턴스에 대한 연결을 설정하는 데 사용되는 텍스트 문자열.
+ **카탈로그** - `connection_string` 속성의 필수 접두사로서 Athena에 등록된 비 AWS Glue Glue 카탈로그.
+ **멀티플렉싱 핸들러** - 여러 데이터베이스 연결을 수락하고 사용할 수 있는 Lambda 핸들러.

## 파라미터
<a name="connectors-hortonworks-parameters"></a>

이 섹션의 파라미터를 사용하여 Hortonworks Hive 커넥터를 구성합니다.

### 연결 문자열
<a name="connectors-hortonworks-connection-string"></a>

다음 형식의 JDBC 연결 문자열을 사용하여 데이터베이스 인스턴스에 연결합니다.

```
hive://${jdbc_connection_string}
```

### 멀티플렉싱 핸들러 사용
<a name="connectors-hortonworks-using-a-multiplexing-handler"></a>

멀티플렉서를 사용하여 단일 Lambda 함수로 여러 데이터베이스 인스턴스에 연결할 수 있습니다. 요청은 카탈로그 이름을 기준으로 라우팅됩니다. Lambda에서 다음 클래스를 사용합니다.


****  

| 핸들러 | Class | 
| --- | --- | 
| 복합 핸들러 | HiveMuxCompositeHandler | 
| 메타데이터 핸들러 | HiveMuxMetadataHandler | 
| 레코드 핸들러 | HiveMuxRecordHandler | 

#### 멀티플렉싱 핸들러 파라미터
<a name="connectors-hortonworks-multiplexing-handler-parameters"></a>


****  

| 파라미터 | 설명 | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 필수 사항입니다. 데이터베이스 인스턴스 연결 문자열. Athena에서 사용되는 카탈로그의 이름을 환경 변수 앞에 붙입니다. 예를 들어, Athena에 등록된 카탈로그가 myhivecatalog인 경우 환경 변수 이름은 myhivecatalog\$1connection\$1string입니다. | 
| default | 필수 사항입니다. 기본 연결 문자열. 이 문자열은 카탈로그가 lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1일 때 사용됩니다. | 

다음은 `hive1`(기본값)과 `hive2`라는 2개의 데이터베이스 인스턴스를 지원하는 Hive MUX Lambda 함수에 대한 예제 속성입니다.


****  

| 속성 | 값 | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog1\$1connection\$1string | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog2\$1connection\$1string | hive://jdbc:hive2://hive2:10000/default?UID=sample&PWD=sample | 

#### 자격 증명 제공
<a name="connectors-hortonworks-providing-credentials"></a>

JDBC 연결 문자열에서 데이터베이스의 사용자 이름과 암호를 제공하려면 연결 문자열 속성 또는 AWS Secrets Manager를 사용합니다.
+ **연결 문자열** - 사용자 이름과 암호를 JDBC 연결 문자열에 속성으로 지정할 수 있습니다.
**중요**  
보안 모범 사례로, 환경 변수 또는 연결 문자열에서 하드 코딩된 자격 증명은 사용하지 않습니다. 하드 코딩된 보안 암호를 AWS Secrets Manager로 이동하는 방법에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [하드 코딩된 보안 암호를 AWS Secrets Manager로 이동](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html)을 참조하세요.
+ **AWS Secrets Manager** - AWS Secrets Manager에서 Athena 연합 쿼리 기능을 사용하려면 Secrets Manager 연결을 위한 [VPC 엔드포인트](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 또는 [인터넷 액세스](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/)가 Lambda 함수에 연결된 VPC에 있어야 합니다.

  JDBC 연결 문자열에 AWS Secrets Manager의 보안 암호 이름을 입력할 수 있습니다. 커넥터는 암호 이름을 Secrets Manager의 `username` 및 `password` 값으로 바꿉니다.

  Amazon RDS 데이터베이스 인스턴스의 경우 이 지원은 긴밀하게 통합됩니다. Amazon RDS를 사용하는 경우 AWS Secrets Manager 및 자격 증명 교체를 사용하는 것이 좋습니다. 데이터베이스에서 Amazon RDS를 사용하지 않는 경우 자격 증명을 다음 형식의 JSON으로 저장합니다.

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**보안 암호 이름이 있는 연결 문자열의 예제**  
다음 문자열의 보안 암호 이름은 `${Test/RDS/hive1host}`입니다.

```
hive://jdbc:hive2://hive1host:10000/default?...&${Test/RDS/hive1host}&...
```

커넥터는 다음 예제와 같이 보안 암호 이름을 사용하여 보안 암호를 검색하고 사용자 이름과 암호를 제공합니다.

```
hive://jdbc:hive2://hive1host:10000/default?...&UID=sample2&PWD=sample2&...
```

현재 Hortonworks Hive 커넥터는 `UID` 및 `PWD` JDBC 속성을 인식합니다.

### 단일 연결 핸들러 사용
<a name="connectors-hortonworks-using-a-single-connection-handler"></a>

다음과 같은 단일 연결 메타데이터 및 레코드 핸들러를 사용하여 단일 Hortonworks Hive 인스턴스에 연결할 수 있습니다.


****  

| 핸들러 유형 | Class | 
| --- | --- | 
| 복합 핸들러 | HiveCompositeHandler | 
| 메타데이터 핸들러 | HiveMetadataHandler | 
| 레코드 핸들러 | HiveRecordHandler | 

#### 단일 연결 핸들러 파라미터
<a name="connectors-hortonworks-single-connection-handler-parameters"></a>


****  

| 파라미터 | 설명 | 
| --- | --- | 
| default | 필수 사항입니다. 기본 연결 문자열. | 

단일 연결 핸들러는 하나의 데이터베이스 인스턴스를 지원하며 `default` 연결 문자열 파라미터를 제공해야 합니다. 다른 연결 문자열은 모두 무시됩니다.

다음은 Lambda 함수에서 지원하는 단일 Hortonworks Hive 인스턴스에 대한 예제 속성입니다.


****  

| 속성 | 값 | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1host:10000/default?secret=\$1\$1Test/RDS/hive1host\$1 | 

### 유출 파라미터
<a name="connectors-hortonworks-spill-parameters"></a>

Lambda SDK는 데이터를 Amazon S3로 유출할 수 있습니다. 동일한 Lambda 함수에서 액세스하는 모든 데이터베이스 인스턴스는 동일한 위치로 유출됩니다.


****  

| 파라미터 | 설명 | 
| --- | --- | 
| spill\$1bucket | 필수 사항입니다. 유출 버킷 이름. | 
| spill\$1prefix | 필수 사항입니다. 유출 버킷 키 접두사. | 
| spill\$1put\$1request\$1headers | (선택 사항) 유출에 사용되는 Amazon S3 putObject 요청에 대한 요청 헤더 및 값의 JSON 인코딩 맵(예: \$1"x-amz-server-side-encryption" : "AES256"\$1). 다른 가능한 헤더를 알아보려면 Amazon Simple Storage Service API Reference(Amazon Simple Storage Service API 참조)의 [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)를 참조하세요. | 

## 데이터 형식 지원
<a name="connectors-hortonworks-data-type-support"></a>

다음 표에 JDBC, Hortonworks Hive 및 Arrow의 해당 데이터 형식이 나와 있습니다.


****  

| JDBC | Hortonworks Hive | 화살표 | 
| --- | --- | --- | 
| 부울 | 부울 | Bit | 
| Integer | TINYINT | Tiny | 
| Short | SMALLINT | Smallint | 
| Integer | INT | 정수 | 
| Long | BIGINT | Bigint | 
| 실수 | float4 | Float4 | 
| 배정밀도 실수 | float8 | Float8 | 
| 날짜 | 날짜 | DateDay | 
| 타임스탬프 | timestamp | DateMilli | 
| 문자열 | VARCHAR | Varchar | 
| 바이트 | bytes | Varbinary | 
| BigDecimal | 10진수 | 10진수 | 
| ARRAY | 해당 사항 없음(참고 사항 참조) | List | 

**참고**  
현재 Hortonworks Hive는 집계 유형 `ARRAY`, `MAP`, `STRUCT` 또는 `UNIONTYPE`을 지원하지 않습니다. 집계 유형의 열은 SQL에서 `VARCHAR` 열로 처리됩니다.

## 파티션 및 분할
<a name="connectors-hortonworks-partitions-and-splits"></a>

파티션은 커넥터에 대한 분할을 생성하는 방법을 결정하는 데 사용됩니다. Athena는 커넥터가 분할을 생성하는 데 도움이 되도록 테이블에 대한 파티셔닝 체계를 나타내는 `varchar` 유형의 합성 열을 생성합니다. 커넥터는 실제 테이블 정의를 수정하지 않습니다.

## 성능
<a name="connectors-hortonworks-performance"></a>

Hortonworks Hive는 정적 파티션을 지원합니다. Athena Hortonworks Hive 커넥터는 이러한 파티션에서 병렬로 데이터를 검색할 수 있습니다. 파티션 배포가 균일한 초대규모 데이터 세트를 쿼리하려면 정적 파티셔닝을 사용하는 것이 좋습니다. 열의 하위 집합을 선택하면 쿼리 런타임 속도를 높이고 스캔되는 데이터를 줄일 수 있습니다. Hortonworks Hive 커넥터는 동시성으로 인한 제한에 대한 복원력이 뛰어납니다.

Athena Hortonworks Hive 커넥터는 조건부 푸시다운을 수행하여 쿼리에서 스캔하는 데이터를 줄입니다. `LIMIT` 절, 간단한 조건자 및 복잡한 표현식을 커넥터로 푸시다운하여 스캔하는 데이터와 쿼리 실행 시간을 줄입니다.

### LIMIT 절
<a name="connectors-hive-performance-limit-clauses"></a>

`LIMIT N` 문은 쿼리로 스캔하는 데이터를 줄입니다. `LIMIT N` 푸시다운을 통해 커넥터는 Athena에 `N`개 행만 반환합니다.

### Predicates
<a name="connectors-hive-performance-predicates"></a>

조건자는 부울 값으로 평가되고 여러 조건에 따라 행을 필터링하는 SQL 쿼리의 `WHERE` 절에 사용되는 표현식입니다. Athena Hortonworks Hive 커넥터는 이러한 표현식을 결합하고 Hortonworks Hive로 직접 푸시하여 기능을 개선하고 스캔하는 데이터를 줄일 수 있습니다.

다음 Athena Hortonworks Hive 커넥터 연산자는 조건자 푸시다운을 지원합니다.
+ **부울: **AND, OR, NOT
+ **관계: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL
+ **산술: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE
+ **기타: **LIKE\$1PATTERN, IN

### 결합된 푸시다운 예제
<a name="connectors-hive-performance-pushdown-example"></a>

쿼리 기능을 개선하기 위해 다음 예제와 같이 푸시다운 유형을 결합합니다.

```
SELECT * 
FROM my_table 
WHERE col_a > 10 
    AND ((col_a + col_b) > (col_c % col_d))
    AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') 
LIMIT 10;
```

## 패스스루 쿼리
<a name="connectors-hive-passthrough-queries"></a>

Hortonworks Hive 커넥터는 [패스스루 쿼리](federated-query-passthrough.md)를 지원합니다. 패스스루 쿼리는 테이블 함수를 사용하여 실행을 위해 전체 쿼리를 데이터 소스로 푸시다운합니다.

Hortonworks Hive에서 패스스루 쿼리를 사용하려면 다음 구문을 사용할 수 있습니다.

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

다음 예제 쿼리는 Hortonworks Hive의 데이터 소스로 쿼리를 푸시다운합니다. 쿼리는 `customer` 테이블의 모든 열을 선택하여 결과를 10개로 제한합니다.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## 라이선스 정보
<a name="connectors-hive-license-information"></a>

이 커넥터를 사용하면 이 커넥터에 대한 [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) 파일에서 목록을 찾을 수 있는 타사 구성 요소가 포함되어 있음을 인정하고 GitHub.com의 [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/LICENSE.txt) 파일에 제공된 해당 타사 라이선스의 조건에 동의하는 것으로 간주됩니다.

## 추가 리소스
<a name="connectors-hive-additional-resources"></a>

최신 JDBC 드라이버 버전 정보를 알아보려면 GitHub.com의 Hortonworks Hive 커넥터용 [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) 파일을 참조하세요.

이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 [해당 사이트](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-hortonworks-hive)를 참조하세요.