Amazon Athena SAP HANA 커넥터
이 커넥터는 Glue 데이터 카탈로그에 페더레이션 카탈로그로 등록할 수 없습니다. 이 커넥터는 카탈로그, 데이터베이스, 테이블, 열, 행 및 태그 수준에서 Lake Formation에 정의된 데이터 액세스 제어를 지원하지 않습니다. 이 커넥터는 Glue Connections를 사용하여 Glue의 구성 속성을 중앙 집중화합니다.
사전 조건
Athena 콘솔 또는 AWS Serverless Application Repository를 사용하여 AWS 계정에 커넥터를 배포합니다. 자세한 내용은 데이터 소스 연결 생성 또는 AWS Serverless Application Repository을 사용하여 데이터 소스 커넥터 배포을 참조하세요.
제한 사항
-
DDL 쓰기 작업은 지원되지 않습니다.
-
멀티플렉서 설정에서 유출 버킷과 접두사는 모든 데이터베이스 인스턴스에서 공유됩니다.
-
모든 관련 Lambda 제한. 자세한 내용은 AWS Lambda 개발자 안내서에서 Lambda 할당량을 참조하십시오.
-
SAP HANA에서 객체 이름은 SAP HANA 데이터베이스에 저장될 때 대문자로 변환됩니다. 그러나 따옴표 안의 이름은 대/소문자를 구분하기 때문에 두 테이블이 이름은 같지만 대/소문자가 다를 수 있습니다(예:
EMPLOYEE
및employee
).Athena 연합 쿼리에서 스키마 테이블 이름은 소문자로 Lambda 함수에 제공됩니다. 이 문제를 해결하려면
@schemaCase
쿼리 힌트를 제공하여 대/소문자를 구분하는 이름을 가진 테이블에서 데이터를 검색합니다. 다음은 쿼리 힌트가 포함된 두 가지 샘플 쿼리입니다.SELECT * FROM "lambda:saphanaconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
SELECT * FROM "lambda:saphanaconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=lower"
용어
다음 용어는 SAP HANA 커넥터와 관련이 있습니다.
-
데이터베이스 인스턴스 - 온프레미스, Amazon EC2 또는 Amazon RDS에 배포된 데이터베이스의 모든 인스턴스.
-
핸들러 - 데이터베이스 인스턴스에 액세스하는 Lambda 핸들러. 핸들러는 메타데이터 또는 데이터 레코드용일 수 있습니다.
-
메타데이터 핸들러 - 데이터베이스 인스턴스에서 메타데이터를 검색하는 Lambda 핸들러.
-
레코드 핸들러 - 데이터베이스 인스턴스에서 데이터 레코드를 검색하는 Lambda 핸들러.
-
복합 핸들러 - 데이터베이스 인스턴스에서 메타데이터와 데이터 레코드를 모두 검색하는 Lambda 핸들러.
-
속성 또는 파라미터 - 핸들러에서 데이터베이스 정보를 추출하는 데 사용되는 데이터베이스 속성. 이러한 속성을 Lambda 환경 변수로 구성합니다.
-
연결 문자열 - 데이터베이스 인스턴스에 대한 연결을 설정하는 데 사용되는 텍스트 문자열.
-
카탈로그 -
connection_string
속성의 필수 접두사로서 Athena에 등록된 비 AWS Glue Glue 카탈로그. -
멀티플렉싱 핸들러 - 여러 데이터베이스 연결을 수락하고 사용할 수 있는 Lambda 핸들러.
파라미터
이 섹션의 파라미터를 사용하여 SAP HANA 커넥터를 구성합니다.
참고
2024년 12월 3일 이후에 생성된 Athena 데이터 소스 커넥터는 AWS Glue 연결을 사용합니다.
아래에 나열된 파라미터 이름과 정의는 2024년 12월 3일 이전에 생성된 Athena 데이터 소스 커넥터에 대한 것입니다. 이는 해당 AWS Glue 연결 속성과 차이가 있을 수 있습니다. 2024년 12월 3일부터 Athena 데이터 소스 커넥터의 이전 버전을 수동으로 배포하는 경우에만 아래 파라미터를 사용합니다.
연결 문자열
다음 형식의 JDBC 연결 문자열을 사용하여 데이터베이스 인스턴스에 연결합니다.
saphana://${
jdbc_connection_string
}
멀티플렉싱 핸들러 사용
멀티플렉서를 사용하여 단일 Lambda 함수로 여러 데이터베이스 인스턴스에 연결할 수 있습니다. 요청은 카탈로그 이름을 기준으로 라우팅됩니다. Lambda에서 다음 클래스를 사용합니다.
핸들러 | Class |
---|---|
복합 핸들러 | SaphanaMuxCompositeHandler |
메타데이터 핸들러 | SaphanaMuxMetadataHandler |
레코드 핸들러 | SaphanaMuxRecordHandler |
멀티플렉싱 핸들러 파라미터
파라미터 | 설명 |
---|---|
$ |
필수 사항입니다. 데이터베이스 인스턴스 연결 문자열. Athena에서 사용되는 카탈로그의 이름을 환경 변수 앞에 붙입니다. 예를 들어, Athena에 등록된 카탈로그가 mysaphanacatalog 인 경우 환경 변수 이름은 mysaphanacatalog_connection_string 입니다. |
default |
필수 사항입니다. 기본 연결 문자열. 이 문자열은 카탈로그가 lambda:${ AWS_LAMBDA_FUNCTION_NAME } 일 때 사용됩니다. |
다음은 saphana1
(기본값)과 saphana2
라는 2개의 데이터베이스 인스턴스를 지원하는 Saphana MUX Lambda 함수에 대한 예제 속성입니다.
속성 | 값 |
---|---|
default |
saphana://jdbc:sap://saphana1.host:port/?${Test/RDS/
Saphana1} |
saphana_catalog1_connection_string |
saphana://jdbc:sap://saphana1.host:port/?${Test/RDS/
Saphana1} |
saphana_catalog2_connection_string |
saphana://jdbc:sap://saphana2.host:port/?user=sample2&password=sample2 |
자격 증명 제공
JDBC 연결 문자열에서 데이터베이스의 사용자 이름과 암호를 제공하려면 연결 문자열 속성 또는 AWS Secrets Manager를 사용합니다.
-
연결 문자열 - 사용자 이름과 암호를 JDBC 연결 문자열에 속성으로 지정할 수 있습니다.
중요
보안 모범 사례로, 환경 변수 또는 연결 문자열에서 하드 코딩된 보안 인증은 사용하지 않습니다. 하드 코딩된 보안 암호를 AWS Secrets Manager로 이동하는 방법에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서의 하드 코딩된 보안 암호를 AWS Secrets Manager로 이동을 참조하세요.
-
AWS Secrets Manager - AWS Secrets Manager에서 Athena 연합 쿼리 기능을 사용하려면 Secrets Manager 연결을 위한 VPC 엔드포인트 또는 인터넷 액세스
가 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/Saphana1}
입니다.
saphana://jdbc:sap://saphana1.host:port/?${Test/RDS/Saphana1}&...
커넥터는 다음 예제와 같이 보안 암호 이름을 사용하여 보안 암호를 검색하고 사용자 이름과 암호를 제공합니다.
saphana://jdbc:sap://saphana1.host:port/?user=sample2&password=sample2&...
현재 SAP HANA 커넥터는 user
및 password
JDBC 속성을 인식합니다.
단일 연결 핸들러 사용
다음과 같은 단일 연결 메타데이터 및 레코드 핸들러를 사용하여 단일 SAP HANA 인스턴스에 연결할 수 있습니다.
핸들러 유형 | Class |
---|---|
복합 핸들러 | SaphanaCompositeHandler |
메타데이터 핸들러 | SaphanaMetadataHandler |
레코드 핸들러 | SaphanaRecordHandler |
단일 연결 핸들러 파라미터
파라미터 | 설명 |
---|---|
default |
필수 사항입니다. 기본 연결 문자열. |
단일 연결 핸들러는 하나의 데이터베이스 인스턴스를 지원하며 default
연결 문자열 파라미터를 제공해야 합니다. 다른 연결 문자열은 모두 무시됩니다.
다음은 Lambda 함수에서 지원하는 단일 SAP HANA 인스턴스에 대한 예제 속성입니다.
속성 | 값 |
---|---|
default |
saphana://jdbc:sap://saphana1.host:port/?secret=Test/RDS/Saphana1 |
유출 파라미터
Lambda SDK는 데이터를 Amazon S3로 유출할 수 있습니다. 동일한 Lambda 함수에서 액세스하는 모든 데이터베이스 인스턴스는 동일한 위치로 유출됩니다.
파라미터 | 설명 |
---|---|
spill_bucket |
필수 사항입니다. 유출 버킷 이름. |
spill_prefix |
필수 사항입니다. 유출 버킷 키 접두사. |
spill_put_request_headers |
(선택 사항) 유출에 사용되는 Amazon S3 putObject 요청에 대한 요청 헤더 및 값의 JSON 인코딩 맵(예: {"x-amz-server-side-encryption" :
"AES256"} ). 다른 가능한 헤더를 알아보려면 Amazon Simple Storage Service API Reference(Amazon Simple Storage Service API 참조)의 PutObject를 참조하세요. |
데이터 형식 지원
다음 표에 JDBC와 Apache Arrow의 해당 데이터 형식이 나와 있습니다.
JDBC | 화살표 |
---|---|
불 | Bit |
Integer | Tiny |
Short | Smallint |
Integer | 정수 |
Long | Bigint |
float | Float4 |
Double | Float8 |
날짜 | DateDay |
Timestamp | DateMilli |
String | Varchar |
바이트 | Varbinary |
BigDecimal | 10진수 |
ARRAY | 나열 |
데이터 형식 변환
JDBC에서 Arrow로의 변환 외에도 커넥터는 SAP HANA 소스와 Athena 데이터 형식이 호환되도록 다른 특정 변환을 수행합니다. 이러한 변환은 쿼리가 성공적으로 실행되도록 하는 데 도움이 됩니다. 다음 표에 이러한 변환이 나와 있습니다.
소스 데이터 형식(SAP HANA) | 변환된 데이터 형식(Athena) |
---|---|
DECIMAL | BIGINT |
INTEGER | INT |
날짜 | DATEDAY |
TIMESTAMP | DATEMILLI |
지원되지 않는 다른 모든 데이터 형식은 VARCHAR
로 변환됩니다.
파티션 및 분할
파티션은 Integer
형식의 단일 파티션 열로 표시됩니다. 열에는 SAP HANA 테이블에 정의된 파티션의 이름이 들어 있습니다. 파티션 이름이 없는 테이블의 경우 단일 파티션에 해당하는 *가 반환됩니다. 파티션은 분할과 동일합니다.
명칭 | 유형 | 설명 |
---|---|---|
PART_ID | Integer | SAP HANA의 명명된 파티션. |
성능
SAP HANA는 기본 파티션을 지원합니다. Athena SAP HANA 커넥터는 이러한 파티션에서 병렬로 데이터를 검색할 수 있습니다. 파티션 배포가 균일한 초대규모 데이터 세트를 쿼리하려면 기본 파티셔닝을 사용하는 것이 좋습니다. 열의 하위 집합을 선택하면 쿼리 런타임 속도를 높이고 스캔되는 데이터를 줄일 수 있습니다. 이 커넥터는 동시성으로 인해 상당한 제한을 나타나며 경우에 따라 쿼리 오류가 발생할 수 있습니다.
Athena SAP HANA 커넥터는 조건부 푸시다운을 수행하여 쿼리에서 스캔하는 데이터를 줄입니다. LIMIT
절, 간단한 조건자 및 복잡한 표현식을 커넥터로 푸시다운하여 스캔하는 데이터와 쿼리 실행 시간을 줄입니다.
LIMIT 절
LIMIT N
문은 쿼리로 스캔하는 데이터를 줄입니다. LIMIT N
푸시다운을 통해 커넥터는 Athena에 N
개 행만 반환합니다.
Predicates
조건자는 부울 값으로 평가되고 여러 조건에 따라 행을 필터링하는 SQL 쿼리의 WHERE
절에 사용되는 표현식입니다. Athena SAP HANA 커넥터는 이러한 표현식을 결합하고 SAP HANA로 직접 푸시하여 기능을 개선하고 스캔하는 데이터를 줄일 수 있습니다.
다음 Athena SAP HANA 커넥터 연산자는 조건자 푸시다운을 지원합니다.
-
부울: AND, OR, NOT
-
관계: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_DISTINCT_FROM, NULL_IF, IS_NULL
-
산술: ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE
-
기타: LIKE_PATTERN, IN
결합된 푸시다운 예제
쿼리 기능을 개선하기 위해 다음 예제와 같이 푸시다운 유형을 결합합니다.
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;
패스스루 쿼리
SAP HANA 커넥터는 패스스루 쿼리를 지원합니다. 패스스루 쿼리는 테이블 함수를 사용하여 실행을 위해 전체 쿼리를 데이터 소스로 푸시다운합니다.
SAP HANA에서 패스스루 쿼리를 사용하려면 다음 구문을 사용합니다.
SELECT * FROM TABLE( system.query( query => '
query string
' ))
다음 예제 쿼리는 SAP HANA의 데이터 소스로 쿼리를 푸시다운합니다. 쿼리는 customer
테이블의 모든 열을 선택하여 결과를 10개로 제한합니다.
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
라이선스 정보
이 커넥터를 사용하면 이 커넥터에 대한 pom.xml
추가 리소스
최신 JDBC 드라이버 버전 정보를 알아보려면 GitHub.com의 SAP HANA 커넥터용 pom.xml
이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트