Snowflake에 Snowflake Open Catalog 가 있는 Apache Iceberg™ 테이블을 사용한 문제 해결¶
다음 시나리오는 Snowflake에서 Snowflake Open Catalog 와 함께 Apache Iceberg™ 테이블을 사용할 때 발생할 수 있는 문제를 해결하는 데 도움이 될 수 있습니다.
Open Catalog에 대한 카탈로그 통합을 생성할 수 없습니다.¶
이 섹션에서는 Open Catalog에 대한 카탈로그 통합을 생성할 때 발생하는 문제를 해결하는 방법을 설명합니다.
문제를 해결하려면 카탈로그 통합이 생성되지 않았을 때 SQL 출력에서 받은 오류 메시지를 확인합니다.
오류 |
SQL Execution Error: Cannot create catalog integration <catalog_integration_name> due to error: Unable to process: Unable to find
warehouse <catalog_name>. Check the REST configuration and ensure the warehouse name '<catalog_name>' matches the Polaris catalog
name.
|
---|---|
원인 |
카탈로그 통합에서 |
해결책 |
카탈로그 열기에서 외부 카탈로그의 이름과 정확히 일치하도록 중요
|
오류 |
SQL Execution Error: User provided authentication credentials are invalid for catalog integration <catalog_integration_name> due
to error: Malformed request: unauthorized_client: The client is not authorized.
|
---|---|
원인 |
카탈로그 통합에서 지정한 OAuth 토큰이 유효하지 않습니다. |
해결책 |
카탈로그 통합에서 |
Snowflake 관리 테이블을 생성할 수 없습니다.¶
이 섹션에서는 Snowflake 관리 테이블을 생성할 때 발생하는 문제를 해결하는 방법을 설명합니다.
문제를 해결하려면 테이블 생성에 실패했을 때 SQL 출력에서 받은 오류 메시지를 확인합니다.
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The Snowflake service
connection associated with the Polaris catalog integration does not have the required privileges to send notifications. The
minimum required privileges are TABLE_CREATE, TABLE_WRITE_PROPERTIES, TABLE_DROP, NAMESPACE_CREATE, and NAMESPACE_DROP.
|
---|---|
원인 |
연결할 외부 카탈로그의 카탈로그 역할에는 Open Catalog에 알림을 보내는 데 필요한 권한이 없습니다. |
해결책 |
외부 카탈로그에 대한 카탈로그 역할에 다음 모든 권한을 부여하여 카탈로그 역할을 업데이트합니다.
카탈로그 역할을 업데이트하는 위치는 부여된 권한이 카탈로그, 네임스페이스 또는 테이블 수준에서 적용되는지에 따라 달라집니다. 카탈로그 역할에 적용되는 프로시저를 참조하십시오. |
오류 |
SQL Execution Error: Failed to access the REST endpoint of catalog integration <catalog_integration_name> with error: Unable to
process: Failed to get subscoped credentials: Error assuming AWS_ROLE:
User: <IAM_user_arn> is not authorized to perform: sts:AssumeRole on resource: <S3_role_arn>. Check the accessibility of the REST
catalog URI or warehouse.
|
---|---|
원인 |
외부 카탈로그의 AWS IAM 사용자는 S3에 액세스할 수 있는 권한이 있는 역할을 맡을 수 없습니다. |
해결책 |
AWS의 정책 문서를 수정하여 Open Catalog 계정의 IAM 사용자가 S3 버킷에 액세스할 수 있는 권한이 있는 역할을 맡을 수 있도록 합니다. 정책 문서를 수정하려면 AWS에서 IAM 역할을 업데이트해야 합니다. 자세한 내용은 Snowflake Open Catalog 계정에 대한 AWS IAM 사용자 검색 섹션을 참조한 후 IAM 사용자에게 버킷 오브젝트에 액세스할 수 있는 권한을 부여 섹션을 참조하십시오. 정책 문서에는 오픈 카탈로그의 외부 볼륨과 외부 카탈로그 모두에 대해 IAM 사용자 ARN 및 외부 ID가 포함되어야 합니다. 다음 정책 문서 예시에서 다음 값을 확인합니다.
|
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The associated Polaris
catalog cannot be of type INTERNAL.
|
---|---|
원인 |
Snowflake에서 관리하는 테이블을 Open Catalog의 내부 카탈로그와 동기화하려고 합니다. Open Catalog의 외부 카탈로그에만 Snowflake 관리 테이블을 동기화할 수 있습니다. |
해결책 |
기존 내부 카탈로그를 외부 카탈로그로 업데이트할 수 없으므로 새 외부 카탈로그를 생성해야 합니다.
|
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: SQL Execution Error:
Resource on the REST endpoint of catalog integration CATINT is forbidden due to error: Forbidden: Invalid locations '[<path to metadata file>]'
for identifier '<identifier>': <path to metadata file> is not in the list of allowed locations: [<list of allowed locations>].
|
---|---|
원인 |
생성할 테이블의 메타데이터 파일 경로가 외부 클라우드 공급자의 허용 위치 목록에 포함되어 있지 않습니다. 결과적으로 Open Catalog는 테이블의 메타데이터 파일에 액세스할 수 없습니다. |
해결책 |
메타데이터 파일의 위치가 Open Catalog에서 서비스 관리자가 생성한 카탈로그의 기본 위치 파일 경로에 있는지, 또는 해당되는 경우 추가로 허용되는 위치에 있는지 확인합니다. 허용되는 위치의 목록을 확인하려면 Open Catalog에서 카탈로그를 선택하고 위치 필드를 참조하십시오. |
CATALOG_SYNC 매개 변수를 지정할 때는 Iceberg 테이블을 변경할 수 없습니다.¶
이 섹션에서는 CATALOG_SYNC 매개 변수 변경 문제를 해결하는 방법을 설명합니다.
문제를 해결하려면 테이블을 변경하지 못했을 때 SQL 출력에서 받은 오류 메시지를 확인합니다.
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The Snowflake service
connection associated with the Polaris catalog integration does not have the required privileges to send notifications. The minimum
required privileges are TABLE_CREATE, TABLE_WRITE_PROPERTIES, TABLE_DROP, NAMESPACE_CREATE, and NAMESPACE_DROP.
|
---|---|
원인 |
연결할 외부 카탈로그의 카탈로그 역할에는 Open Catalog에 알림을 보내는 데 필요한 권한이 없습니다. |
해결책 |
외부 카탈로그에 대한 카탈로그 역할에 다음 모든 권한을 부여합니다.
카탈로그 역할을 업데이트하는 위치는 해당 권한이 카탈로그, 네임스페이스 또는 테이블 수준에서 적용되는지에 따라 달라집니다. 카탈로그 역할에 적용되는 프로시저를 참조하십시오. |
오류 |
SQL Execution Error: Failed to access the REST endpoint of catalog integration <catalog_integration_name> with error: Unable to
process: Failed to get subscoped credentials: Error assuming AWS_ROLE:
User: <IAM_user_arn> is not authorized to perform: sts:AssumeRole on resource: <S3_role_arn>. Check the accessibility of the REST
catalog URI or warehouse.
|
---|---|
원인 |
외부 카탈로그의 AWS IAM 사용자에게는 S3 버킷 오브젝트에 액세스할 수 있는 권한이 없습니다. |
해결책 |
AWS에서 정책 문서를 수정하여 Open Catalog 계정의 IAM 사용자가 S3 버킷의 오브젝트에 액세스할 수 있도록 허용합니다. 정책 문서를 수정하려면 AWS에서 IAM 역할을 업데이트해야 합니다. 자세한 내용은 Polaris Open Catalog 계정에 대한 AWS IAM 사용자 검색 섹션을 참조한 후 IAM 사용자에게 버킷 오브젝트에 액세스할 수 있는 권한을 부여 섹션을 참조하십시오. 정책 문서에는 오픈 카탈로그의 외부 볼륨과 외부 카탈로그 모두에 대해 IAM 사용자 ARN 및 외부 ID가 포함되어야 합니다. 다음 정책 문서 예시에서 다음 값을 확인합니다.
|
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The associated Polaris
catalog cannot be of type INTERNAL.
|
---|---|
원인 |
Open Catalog의 내부 카탈로그에 대한 카탈로그 통합과 Snowflake에서 관리하는 Iceberg 테이블을 동기화하려고 합니다. Snowflake에서 관리하는 Iceberg 테이블은 Open Catalog의 외부 카탈로그에만 동기화할 수 있습니다. |
해결책 |
기존 내부 카탈로그를 외부 카탈로그로 업데이트할 수 없으므로 새 외부 카탈로그를 생성해야 합니다.
|
오류 |
SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: SQL Execution Error:
Resource on the REST endpoint of catalog integration CATINT is forbidden due to error: Forbidden: Invalid locations '[<path to metadata file>]'
for identifier '<identifier>': <path to metadata file> is not in the list of allowed locations: [<list of allowed locations>].
|
---|---|
원인 |
생성할 테이블의 메타데이터 파일 경로가 외부 클라우드 공급자의 허용 위치 목록에 포함되어 있지 않습니다. 결과적으로 Open Catalog는 테이블의 메타데이터 파일에 액세스할 수 없습니다. |
해결책 |
메타데이터 파일의 위치가 Open Catalog에서 서비스 관리자가 생성한 카탈로그의 기본 위치 파일 경로에 있는지, 또는 해당되는 경우 추가로 허용되는 위치에 있는지 확인합니다. 허용되는 위치의 목록을 확인하려면 Open Catalog에서 카탈로그를 선택하고 Locations 필드를 참조하십시오. |