Snowflake 연결 - AWS 글루

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Snowflake 연결

AWS Glue for Spark를 사용하여 AWS Glue 4.0 이상 버전에서 Snowflake의 테이블에서 읽고 쓸 수 있습니다. SQL 쿼리를 사용하여 Snowflake에서 읽을 수 있습니다. 사용자와 암호를 사용하여 Snowflake에 연결할 수 있습니다. AWS Glue 데이터 카탈로그를 통해 AWS Secrets Manager에 저장된 Snowflake 보안 인증을 참조할 수 있습니다. AWS Glue for Spark용 데이터 카탈로그 Snowflake 보안 인증은 크롤러용 데이터 카탈로그 Snowflake 보안 인증과 별도로 저장됩니다. Snowflake에 연결하도록 구성된 JDBC 유형 연결이 아니라 SNOWFLAKE 유형 연결을 선택해야 합니다.

Snowball에 대한 자세한 내용은 Snowflake 웹 사이트를 참조하세요. AWS에서 Snowflake에 대한 자세한 내용은 Snowflake Data Warehouse on Amazon Web Services를 참조하세요.

Snowflake 연결 구성

인터넷을 통해 사용할 수 있는 Snowflake 데이터베이스에 연결하기 위한 AWS의 필수 조건은 없습니다.

선택적으로 다음 구성을 수행하여 AWS Glue로 연결 보안 인증을 관리할 수 있습니다.

AWS Glue로 연결 보안 인증을 관리하려면
  1. Snowflake에서 사용자, snowflakeUser 및 암호, snowflakePassword를 생성합니다.

  2. AWS Secrets Manager에서 Snowflake 보안 인증을 사용하여 보안 암호를 생성합니다. Secrets Manager에서 보안 암호를 생성하려면 AWS Secrets Manager 설명서의 Create an AWS Secrets Manager secret에서 제공하는 자습서를 따릅니다. 보안 암호를 생성한 후에는 다음 단계를 위해 보안 암호 이름, secretName을 유지합니다.

    • 키/값 페어를 선택하면 키가 sfUsersnowflakeUser에 대한 페어를 생성합니다.

    • 키/값 페어를 선택하면 키가 sfPasswordsnowflakePassword에 대한 페어를 생성합니다.

    • 키/값 페어를 선택하면 키가 sfWarehouse인 Snowflake 웨어하우스를 제공할 수 있습니다.

  3. AWS Glue 데이터 카탈로그에서 AWS Glue 연결 추가의 단계에 따라 연결을 생성합니다. 연결을 생성한 후에는 다음 단계를 위해 연결 이름, connectionName을 유지합니다.

    • 연결 유형을 선택할 때 Snowflake를 선택합니다.

    • Snowflake URL을 선택할 때 Snowflake 인스턴스의 URL을 제공합니다. URL은 account_identifier.snowflakecomputing.com 양식의 호스트 이름을 사용합니다.

    • AWS 보안 암호를 선택할 때 secretName을 입력합니다.

  4. AWS Glue 작업 구성에서 추가 네트워크 연결connectionName을 제공합니다.

다음과 같은 상황에서 다음이 필요할 수 있습니다.

  • Amazon VPC에서 AWS에 호스팅된 Snowflake의 경우

    • Snowflake에 적합한 Amazon VPC 구성이 필요합니다. Amazon VPC를 구성하는 방법에 대한 자세한 내용은 Snowflake 설명서의 AWS PrivateLink & Snowflake를 참조하세요.

    • AWS Glue에 적합한 Amazon VPC 구성이 필요합니다. (AWS PrivateLink) 에 대한 인터페이스 VPC 엔드포인트 구성 AWS Glue (AWS PrivateLink).

    • Snowflake 보안 인증을 정의하는 AWS Secrets Manager 보안 암호의 ID 외에도 Amazon VPC 연결 정보를 제공하는 AWS Glue Data Catalog 연결을 생성해야 합니다. 이전 항목에 링크된 Snowflake 설명서에 설명된 대로 AWS PrivateLink 사용 시 URL이 변경됩니다.

    • 데이터 카탈로그 연결을 추가 네트워크 연결로 포함하는 작업 구성이 필요합니다.

Snowflake 테이블에서 읽기

사전 조건: 읽으려는 Snowflake 테이블. Snowflake 테이블 이름, tableName이 필요합니다. Snowflake URL snowflakeUrl, 사용자 이름 snowflakeUser 및 암호 snowflakePassword가 필요합니다. Snowflake 사용자에게 기본 네임스페이스가 설정되어 있지 않은 경우 Snowflake 데이터베이스 이름, databaseName 및 스키마 이름, schemaName이 필요합니다. 또한 Snowflake 사용자에게 기본 웨어하우스가 설정되어 있지 않은 경우 웨어하우스 이름, warehouseName이 필요합니다.

예:

추가 사전 조건: AWS Glue로 연결을 관리하려면 단계를 수행하여 snowflakeUrl, snowflakeUsernamesnowflakePassword를 구성합니다. 이 단계를 검토하려면 이전 Snowflake 연결 구성 섹션을 참조하세요. 연결할 추가 네트워크 연결을 선택하기 위해 connectionName 파라미터를 사용합니다.

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

또한 autopushdownquery 파라미터를 사용하여 Snowflake 테이블의 일부를 읽을 수 있습니다. 이 방법은 결과를 Spark에 로드한 후 필터링하는 것보다 훨씬 더 효율적일 수 있습니다. 모든 판매가 동일한 테이블에 저장되지만 연휴에 특정 매장의 매출만 분석하려는 예제를 살펴봅니다. 해당 정보가 테이블에 저장된 경우 다음과 같이 조건자 푸시다운을 사용하여 결과를 가져올 수 있습니다.

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Snowflake 테이블에 쓰기

사전 조건: 쓰려는 Snowflake 데이터베이스. 현재 또는 원하는 테이블 이름, TableName이 필요합니다. Snowflake URL snowflakeUrl, 사용자 이름 snowflakeUser 및 암호 snowflakePassword가 필요합니다. Snowflake 사용자에게 기본 네임스페이스가 설정되어 있지 않은 경우 Snowflake 데이터베이스 이름, databaseName 및 스키마 이름, schemaName이 필요합니다. 또한 Snowflake 사용자에게 기본 웨어하우스가 설정되어 있지 않은 경우 웨어하우스 이름, warehouseName이 필요합니다.

예:

추가 사전 조건: AWS Glue로 연결을 관리하려면 단계를 수행하여 snowflakeUrl, snowflakeUsernamesnowflakePassword를 구성합니다. 이 단계를 검토하려면 이전 Snowflake 연결 구성 섹션을 참조하세요. 연결할 추가 네트워크 연결을 선택하기 위해 connectionName 파라미터를 사용합니다.

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Snowflake 연결 옵션 참조

Snowflake 연결 유형에서는 다음과 같은 연결 옵션을 사용합니다.

이 섹션의 일부 파라미터는 데이터 카탈로그 연결(sfUrl, sfUser, sfPassword)에서 검색할 수 있으며, 이 경우 사용자가 해당 파라미터를 제공하지 않아도 됩니다. connectionName 파라미터를 제공하여 이 작업을 수행할 수 있습니다.

이 섹션의 일부 파라미터는 AWS Secrets Manager 보안 암호(sfUser, sfPassword)에서 검색할 수 있으며, 이 경우 사용자가 해당 파라미터를 제공하지 않아도 됩니다. 보안 암호는 sfUsersfPassword 키 아래에서 해당 콘텐츠를 제공해야 합니다. secretId 파라미터를 제공하여 이 작업을 수행할 수 있습니다.

다음 파라미터는 보통 Snowflake에 연결할 때 사용됩니다.

  • sfDatabase - Snowflake에 사용자 기본값이 설정되어 있지 않은 경우 필요합니다. 읽기 및 쓰기에 사용됩니다. 연결 후 세션에 사용할 데이터베이스입니다.

  • sfSchema - Snowflake에 사용자 기본값이 설정되어 있지 않은 경우 필요합니다. 읽기 및 쓰기에 사용됩니다. 연결 후 세션에 사용할 스키마입니다.

  • sfWarehouse - Snowflake에 사용자 기본값이 설정되어 있지 않은 경우 필요합니다. 읽기 및 쓰기에 사용됩니다. 연결 후 세션에 사용할 기본 가상 웨어하우스입니다.

  • sfRole - Snowflake에 사용자 기본값이 설정되어 있지 않은 경우 필요합니다. 읽기 및 쓰기에 사용됩니다. 연결 후 세션에 사용할 기본 보안 암호 역할입니다.

  • sfUrl -- (필수) 읽기 및 쓰기에 사용됩니다. 다음 account_identifier.snowflakecomputing.com 형식으로 계정의 호스트 이름을 지정합니다. 계정 식별자에 대한 자세한 내용은 Snowflake 설명서의 Account Identifiers를 참조하세요.

  • sfUser -- (필수) 읽기 및 쓰기에 사용됩니다. Snowflake 사용자의 로그인 이름입니다.

  • sfPassword - (pem_private_key가 제공되지 않은 경우 필수) 읽기/쓰기에 사용됩니다. Snowflake 사용자의 암호입니다.

  • dbtable - 전체 테이블에 대한 작업을 수행할 때 필요합니다. 읽기 및 쓰기에 사용됩니다. 읽을 테이블 또는 데이터를 쓸 테이블의 이름입니다. 읽을 때 모든 열과 레코드가 검색됩니다.

  • pem_private_key - 읽기/쓰기에 사용됩니다. 암호화되지 않은 b64 인코딩된 프라이빗 키 문자열입니다. Snowflake 사용자의 프라이빗 키입니다. 일반적으로 이를 PEM 파일에서 복사합니다. 자세한 내용은 Snowflake 설명서의 키 페어 인증 & 키 페어 순환을 참조하세요.

  • query - 쿼리로 읽을 때 필요합니다. 읽기에 사용됩니다. 실행할 정확한 쿼리(SELECT 문)입니다.

다음 옵션은 Snowflake에 연결하는 과정에서 특정 동작을 구성하는 데 사용됩니다.

  • preactions - 읽기/쓰기에 사용됩니다. 유효한 값: 세미콜론으로 구분된 SQL 문 목록(문자열). SQL 문은 AWS Glue와 Snowflake 사이에서 데이터가 전송되기 전에 실행됩니다. 명령문에 %s가 포함된 경우 %s는 작업에서 참조하는 테이블 이름으로 바뀝니다.

  • postactions - 읽기/쓰기에 사용됩니다. SQL 문은 AWS Glue와 Snowflake 사이에서 데이터가 전송된 후에 실행됩니다. 명령문에 %s가 포함된 경우 %s는 작업에서 참조하는 테이블 이름으로 바뀝니다.

  • autopushdown - 기본값: "on". 유효한 값: "on", "off". 이 파라미터는 자동 쿼리 푸시다운의 활성화 여부를 제어합니다. 푸시다운이 활성화된 경우 Spark에서 쿼리를 실행할 때 쿼리의 일부를 Snowflake 서버로 '푸시다운'할 수 있으면 해당 쿼리가 푸시다운됩니다. 이렇게 하면 일부 쿼리의 성능이 향상됩니다. 쿼리의 푸시다운 여부에 대한 자세한 내용은 Snowflake 설명서의 Pushdown을 참조하세요.

또한 Snowflake Spark 커넥터에서 사용할 수 있는 일부 옵션이 AWS Glue에서 지원될 수도 있습니다. Snowflake Spark 커넥터에서 사용할 수 있는 옵션에 대한 자세한 내용은 Snowflake 설명서의 Setting Configuration Options for the Connector를 참조하세요.

Snowflake 커넥터 제한

AWS Glue for Spark를 사용하여 Snowflake에 연결하는 경우 다음과 같은 제한 사항이 적용됩니다.

  • 이 커넥터는 작업 북마크를 지원하지 않습니다. 작업 북마크에 대한 자세한 내용을 알아보려면 처리된 데이터를 작업 북마크로 추적을(를) 참조하세요.

  • 이 커넥터는 create_dynamic_frame.from_catalogwrite_dynamic_frame.from_catalog 메서드를 사용하여 AWS Glue 데이터 카탈로그의 테이블을 통한 Snowflake 읽기 및 쓰기를 지원하지 않습니다.

  • 이 커넥터는 사용자 및 암호 이외의 보안 인증으로 Snowflake에 연결하는 것을 지원하지 않습니다.

  • 이 커넥터는 스트리밍 작업 내에서 지원되지 않습니다.

  • 이 커넥터는 정보를 검색할 때(예: query 파라미터 사용) SELECT 문 기반 쿼리를 지원합니다. 다른 종류의 쿼리(예: SHOW, DESC 또는 DML 문)는 지원되지 않습니다.

  • Snowflake는 Snowflake 클라이언트를 통해 제출되는 쿼리 텍스트(즉, SQL 문)의 크기를 명령문당 1MB로 제한합니다. 자세한 내용은 Limits on Query Text Size를 참조하세요.