Snowflake Horizon Catalog를 통해 외부 엔진이 있는 Apache Iceberg™ 테이블 쿼리하기¶
이 미리 보기에서는 Snowflake Horizon Catalog를 통해 외부 쿼리 엔진을 사용하여 Snowflake 관리 Apache Iceberg™ 테이블을 쿼리하는 작업에 대한 지원을 소개합니다. 외부 엔진과의 이러한 상호 운용성을 보장하기 위해 `Apache Polaris™(인큐베이팅)<https://github.com/apache/polaris>`_가 Horizon Catalog에 통합되었습니다. 또한, Horizon Catalog는 외부 쿼리 엔진을 사용하여 테이블을 읽을 수 있는 Apache Iceberg™ REST APIs를 노출합니다.
외부 쿼리 엔진으로 Snowflake 관리 Iceberg 테이블을 쿼리하려면 :doc:`Snowflake 관리 Iceberg 테이블을 Snowflake Open Catalog와 동기화</user-guide/tables-iceberg-open-catalog-sync>`하는 대신 이 기능을 사용하면 됩니다. Open Catalog에 대한 자세한 내용은 :doc:`Snowflake Open Catalog 개요</user-guide/opencatalog/overview>`를 참조하세요.
Horizon Catalog를 통해 외부 쿼리 엔진을 Iceberg 테이블에 연결하면 다음 작업을 수행할 수 있습니다.
Apache Spark™와 같은 개방형 Iceberg REST 프로토콜을 지원하는 외부 쿼리 엔진을 사용하여 해당 테이블을 쿼리할 수 있습니다.
단일 Horizon Catalog 엔드포인트를 사용하여 신규 또는 기존 Snowflake 계정에서 기존 및 신규 Snowflake 관리 Iceberg 테이블을 쿼리합니다.
Snowflake의 기존 사용자, 역할, 정책 및 인증을 사용하여 테이블을 쿼리합니다.
발급된 자격 증명을 사용합니다.
Snowflake Horizon Catalog에 대한 자세한 내용은 Snowflake Horizon Catalog 섹션을 참조하세요.
다음 다이어그램은 Horizon Catalog를 통해 Snowflake 관리 Iceberg 테이블을 읽고 Snowflake가 이러한 테이블을 읽고 쓰는 외부 쿼리 엔진을 보여줍니다.
청구¶
Horizon Iceberg REST Catalog API는 모든 Snowflake 에디션에서 사용할 수 있습니다.
API 요청은 100만 호출당 0.5 크레딧으로 청구되며 클라우드 서비스로 청구됩니다.
리전 간 데이터 액세스의 경우 `Snowflake Service Consumption Table`_에 명시된 대로 표준 리전 간 데이터 송신 요금이 적용됩니다.
참고
이 기능이 일반 공급으로 제공될 때까지 고객에게 요금이 청구되지 않습니다.
시작하기 전에¶
쿼리하려는 Iceberg 테이블이 포함된 Snowflake 계정의 계정 식별자를 검색합니다. 자세한 지침은 계정 식별자 섹션을 참조하십시오. :ref:`외부 쿼리 엔진을 Iceberg 테이블에 연결<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_connect_external_query_engine>`할 때 이 식별자를 지정합니다.
팁
SQL을 사용하여 계정 식별자를 가져오려면 다음 명령을 실행하면 됩니다.
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
비공개 연결(선택 사항)¶
보안 연결을 위해 Horizon Catalog 엔드포인트에 액세스하는 동안 Snowflake 계정에 대한 인바운드 및 아웃바운드 비공개 연결을 구성하는 것이 좋습니다.
참고
비공개 연결은 Amazon S3 또는 Azure Storage(ADLS)에 저장된 Snowflake 관리 Iceberg 테이블에만 지원됩니다.
외부 쿼리 엔진을 사용하여 Iceberg 테이블을 쿼리하는 워크플로¶
외부 쿼리 엔진을 사용하여 Iceberg 테이블을 쿼리하려면 다음 단계를 완료합니다.
Iceberg 테이블을 만듭니다.
액세스 제어를 구성합니다.
인증을 위한 액세스 토큰을 얻습니다.
Horizon Catalog를 통해 외부 쿼리 엔진을 Iceberg 테이블에 연결합니다.
Iceberg 테이블을 쿼리합니다.
1단계: Iceberg 테이블 만들기¶
중요
쿼리할 Snowflake 관리 Iceberg 테이블이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
이 단계에서는 Snowflake를 카탈로그로 사용하는 Snowflake 관리 Iceberg 테이블을 생성하여 외부 쿼리 엔진으로 쿼리할 수 있습니다. 구체적인 지침은 다음 항목을 참조하십시오.
자습서: 첫 번째 Apache Iceberg™ 테이블 만들기: 데이터베이스를 만들고, Snowflake 관리 Iceberg 테이블을 만들고, 테이블에 데이터를 로드하는 방법을 보여주는 자습서입니다.
Snowflake 관리 Iceberg 테이블 만들기: Snowflake 관리 Iceberg 테이블을 만들기 위한 예제 코드입니다.
2단계: 액세스 제어 구성하기¶
중요
역할 이름에 하이픈 문자(-)가 포함된 Snowflake 역할은 Horizon Catalog 엔드포인트를 통해 Iceberg 테이블에 액세스할 때 지원되지 않습니다.
쿼리하려는 Iceberg 테이블에 대한 액세스 권한이 구성된 역할이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
이 단계에서는 외부 쿼리 엔진으로 쿼리하려는 Snowflake 관리 Iceberg 테이블에 대한 액세스 제어를 구성합니다. 예를 들어, Snowflake에서 다음 역할을 설정할 수 있습니다.
데이터베이스의 모든 스키마와 모든 Snowflake 관리 Iceberg 테이블에 대한 액세스 권한이 있는 DATA_ENGINEER 역할.
데이터베이스의 한 스키마에 액세스하고 해당 스키마 내에서 두 개의 Snowflake 관리 Iceberg 테이블에만 액세스할 수 있는 DATA_ANALYST 역할.
자세한 지침은 액세스 제어 구성하기 섹션을 참조하십시오. Snowflake에서의 액세스 제어에 대한 자세한 내용은 액세스 제어의 개요 를 참조하십시오.
3단계: 인증을 위한 액세스 토큰 얻기¶
이 단계에서는 Snowflake 계정의 Horizon Catalog 엔드포인트에 인증하는 데 필요한 액세스 토큰을 얻습니다. 각 사용자(서비스 또는 사람)에 대한 액세스 토큰과 Snowflake 관리 Iceberg 테이블에 대한 액세스 권한이 구성된 역할에 대한 액세스 토큰을 얻어야 합니다. 예를 들어, DATA_ENGINEER 역할의 사용자 및 DATA_ANALYST 역할의 다른 사용자에 대해 하나의 액세스 토큰을 얻어야 합니다.
You specify this access token later when you connect an external query engine to Iceberg tables through Horizon Catalog.
다음 인증 옵션 중 하나를 사용하여 액세스 토큰을 얻을 수 있습니다.
외부 OAuth¶
If you’re using External OAuth, generate an access token for your identity provider. For instructions, see External OAuth 개요.
참고
또는 외부 OAuth의 경우 액세스 토큰을 지정하는 대신 자동 토큰 새로 고침을 사용하여 엔진에 대한 연결을 구성할 수 있습니다.
키 페어 인증¶
If you use key-pair authentication, to obtain an access token, you sign a JSON web token (JWT) with your private key.
The following steps cover how to generate an access token for key-pair authentication:
1단계: 키 페어 인증 구성¶
이 단계에서는 다음 작업을 수행합니다.
개인 키 생성하기
공개 키 생성하기
개인 키와 공개 키를 안전하게 저장하기
사용자에게 공개 키를 할당할 수 있는 권한을 부여합니다
공개 키를 Snowflake 사용자에게 할당하기
사용자의 공개 키 지문 확인하기
자세한 지침은 키 페어 인증 구성하기 섹션을 참조하십시오.
2단계: 사용자에게 역할의 권한 부여¶
GRANT ROLE 명령을 실행하여 쿼리하려는 테이블에 대한 권한이 있는 Snowflake 역할을 키 페어 인증 사용자에게 부여합니다. 예를 들어 my_service_user 사용자에게 ENGINEER 역할을 부여하려면 다음 명령을 실행합니다.
GRANT ROLE ENGINEER to user my_service_user;
3단계: JSON 웹 토큰(JWT) 생성¶
이 단계에서는 SnowSQL을 사용하여 키 페어 인증을 위한 JSON 웹 토큰(JWT)을 생성합니다.
참고
사용자의 컴퓨터에 `SnowSQL<https://www.snowflake.com/developers/downloads/snowsql/>`_이 설치되어 있어야 합니다.
또는 Python, Snowflake CLI, Java 또는 Node.js를 사용하여 JWT를 생성할 수 있습니다. 예를 들어 다음 섹션을 참조하세요.
SnowSQL을 사용하여 JWT를 생성하려면 다음을 수행합니다.
snowsql --private-key-path "<private_key_file>" \
--generate-jwt \
-h "<account_identifier>.snowflakecomputing.com" \
-a "<account_locator>" \
-u "<user_name>"
여기서
<private_key_file>is the path to your private key file that corresponds to the public key assigned to your Snowflake user. For example:/Users/jsmith/.ssh/rsa_key.p8.<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see 시작하기 전에. An example of an account identifier ismyorg-myaccount.``<account_locator>``는 Snowflake 계정의 계정 로케이터입니다.
계정 로케이터를 찾으려면 Snowsight에서 Snowflake 계정 정보 찾기 섹션을 참조하고 Account Details 대화 상자에서 *계정 로케이터*를 확인합니다.
``<user_name>``은 사용자에게 할당된 공개 키가 있는 Snowflake 사용자의 사용자 이름입니다.
Step 4: Generate an access token¶
중요
액세스 토큰을 생성하려면 먼저 :ref:`JWT를 생성<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_key_pair_generate_jwt>`해야 합니다. JWT를 사용하여 액세스 토큰을 생성하므로 먼저 JWT를 생성해야 합니다.
curl 명령을 사용하여 액세스 토큰을 생성합니다.
curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=session:role:<role>' \
--data-urlencode 'client_secret=<JWT_token>'
여기서
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see 시작하기 전에. An example of an account identifier ismyorg-myaccount.<role>is the Snowflake role that is granted access to Iceberg tables, such as ENGINEER.``<JWT_token>``이전 단계에서 생성한 JWT입니다.
Programmatic access token (PAT)¶
If you use PATs, generate a PAT for authentication.
First, you generate a PAT, which you use to connect an external query engine to Iceberg tables. Then, you generate an access token, which you only use to verify the permissions for your PAT.
1단계: PAT 생성¶
PAT를 구성하고 생성하는 방법에 대한 지침은 인증을 위해 프로그래밍 방식의 액세스 토큰 사용 섹션을 참조하세요.
Step 2: Generate an access token for your PAT¶
이 단계에서는 PAT에 대한 액세스 토큰을 생성합니다.
주의
이 단계에서 생성하는 액세스 토큰은 PAT에 대한 :ref:`권한을 확인<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_verify_access_token_permissions>`한 경우에만 지정합니다. :ref:`외부 쿼리 엔진을 Iceberg 테이블에 연결<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_connect_external_query_engine>`한 경우 이전 단계에서 생성한 액세스 토큰이 아닌, 이전 단계에서 생성한 PAT를 지정해야 합니다.
curl 명령을 사용하여 PAT에 대한 액세스 토큰을 생성합니다.
curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=session:role:<role>' \
--data-urlencode 'client_secret=<PAT_token>'
여기서
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see 시작하기 전에. An example of an account identifier ismyorg-myaccount.<role>is the Snowflake role that is granted to your PAT and has access to the Iceberg tables you want to query, such as ENGINEER.``<PAT_token>``은 이전 단계에서 생성한 PAT 토큰에 대한 값입니다.
Step 4: Verify access token permissions¶
이 단계에서는 이전 단계에서 얻은 액세스 토큰에 대한 권한을 확인합니다.
Horizon IRC 엔드포인트에 대한 액세스 확인¶
curl 명령을 사용하여 Horizon IRC 엔드포인트에 액세스할 수 있는 권한이 있는지 확인합니다.
curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/config?warehouse=<database_name>" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json"
여기서
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see 시작하기 전에. An example of an account identifier ismyorg-myaccount.<access_token>is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.``<database_name>``는 쿼리하려는 데이터베이스의 이름입니다.
중요
데이터베이스 이름을 소문자로 생성한 경우에도 *모두 대문자*로 지정해야 합니다.
반환 값 예제:
{
"defaults": {
"default-base-location": ""
},
"overrides": {
"prefix": "MY-DATABASE"
}
}
테이블의 메타데이터 검색¶
테이블의 메타데이터를 검색하기 위해 GET 요청을 수행할 수도 있습니다. Snowflake는 `loadTable<https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml#L616>`_ 작업을 통해 REST 카탈로그에서 테이블 메타데이터를 로드합니다.
curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/<database_name>/namespaces/<namespace_name>/tables/<table_name>" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json"
여기서
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see 시작하기 전에. An example of an account identifier ismyorg-myaccount.``<database_name>``은 메타데이터를 검색할 테이블의 데이터베이스입니다.
``<namespace_name>``은 메타데이터를 검색할 테이블의 네임스페이스입니다.
``<table_name>``은 메타데이터를 검색할 테이블입니다.
<access_token>is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.
중요
오브젝트가 소문자로 생성되었더라도 데이터베이스, 네임스페이스, 테이블 이름을 *모두 대문자*로 지정해야 합니다.
Step 5: Connect an external query engine to Iceberg tables through Horizon Catalog¶
이 단계에서는 Horizon Catalog를 통해 외부 쿼리 엔진을 Iceberg 테이블에 연결합니다. 이 연결을 통해 외부 쿼리 엔진을 사용하여 테이블을 쿼리할 수 있습니다.
외부 엔진은 Snowflake에 의해 노출된 Apache Iceberg™ REST 엔드포인트를 사용합니다. Snowflake 계정의 경우 이 엔드포인트의 형식은 다음과 같습니다.
https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog
이 단계의 예제 코드는 Spark에서 연결을 설정하는 방법을 보여주며, 예제 코드는 PySpark에 있습니다. 자세한 내용은 다음 항목을 참조하십시오.
외부 OAuth 또는 키 페어 인증을 사용하여 연결하기¶
다음 예제 코드는 외부 OAuth 또는 키 페어 인증을 사용하여 외부 쿼리 엔진을 Iceberg 테이블에 연결합니다.
# Snowflake Horizon Catalog Configuration, change as per your environment
CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE
# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"
# Paste the External Oauth Access token that you generated in Snowflake here
ACCESS_TOKEN = "<your_access_token>"
# Iceberg Version
ICEBERG_VERSION = "1.9.1"
def create_spark_session():
"""Create and configure Spark session for Snowflake Iceberg access."""
spark = (
SparkSession.builder
.appName("SnowflakeIcebergReader")
.master("local[*]")
# JAR Dependencies for Iceberg and Azure
.config(
"spark.jars.packages",
f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
# for Azure storage, use the below package and comment above azure bundle
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
)
# Iceberg SQL Extensions
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.defaultCatalog", CATALOG_NAME)
# Horizon REST Catalog Configuration
.config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
.config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
.config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
.config(f"spark.sql.catalog.{CATALOG_NAME}.token", ACCESS_TOKEN)
.config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
.config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)
# Required for vended credentials
.config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
.config("spark.sql.iceberg.vectorization.enabled", "false")
.getOrCreate()
)
spark.sparkContext.setLogLevel("ERROR")
return spark
여기서
<account_identifier>is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see 시작하기 전에.<your_access_token>`은 획득한 액세스 토큰입니다. 이 토큰을 얻으려면 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_generate_access_token섹션을 참조하세요.참고
또는 외부 OAuth의 경우 액세스 토큰을 지정하는 대신 자동 토큰 새로 고침을 사용하여 엔진에 대한 연결을 구성할 수 있습니다.
:code:`<database_name>`은 쿼리하려는 Snowflake 관리 Iceberg 테이블이 포함된 Snowflake 계정의 데이터베이스 이름입니다.
참고
Spark의
.warehouse속성에는 Snowflake 웨어하우스 이름이 아닌 Snowflake 데이터베이스 이름이 필요합니다.:code:`<role>`은 쿼리하려는 Iceberg 테이블에 대한 액세스 권한으로 구성된 Snowflake의 역할입니다. 예를 들어 DATA_ENGINEER 과 같습니다.
중요
기본적으로 코드 예제는 Amazon S3에 저장된 Apache Iceberg™ 테이블에 대해 설정됩니다. Iceberg 테이블이 Azure Storage(ADLS)에 저장되는 경우 다음 단계를 수행합니다.
다음 줄을 주석으로 처리합니다.
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"다음 줄의 주석 처리를 제거합니다.
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
프로그래밍 방식 액세스 토큰(PAT)을 사용하여 연결하기¶
다음 예제 코드를 사용하여 프로그래밍 방식 액세스 토큰(PAT)을 통해 외부 쿼리 엔진을 Iceberg 테이블에 연결합니다.
# Snowflake Horizon Catalog Configuration, change as per your environment
CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE
# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"
# Paste the PAT you generated in Snowflake here
PAT_TOKEN = "<your_PAT_token>"
# Iceberg Version
ICEBERG_VERSION = "1.9.1"
def create_spark_session():
"""Create and configure Spark session for Snowflake Iceberg access."""
spark = (
SparkSession.builder
.appName("SnowflakeIcebergReader")
.master("local[*]")
# JAR Dependencies for Iceberg and Azure
.config(
"spark.jars.packages",
f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
# for Azure storage, use the below package and comment above azure bundle
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
)
# Iceberg SQL Extensions
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.defaultCatalog", CATALOG_NAME)
# Horizon REST Catalog Configuration
.config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
.config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
.config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
.config(f"spark.sql.catalog.{CATALOG_NAME}.credential", PAT_TOKEN)
.config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
.config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)
# Required for vended credentials
.config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
.config("spark.sql.iceberg.vectorization.enabled", "false")
.getOrCreate()
)
spark.sparkContext.setLogLevel("ERROR")
return spark
여기서
<account_identifier>is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see 시작하기 전에.<your_PAT_token>`은 사용자가 얻은 PAT입니다. 이 토큰을 얻으려면 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_generate_access_token섹션을 참조하세요.:code:`<role>`은 쿼리하려는 Iceberg 테이블에 대한 액세스 권한으로 구성된 Snowflake의 역할입니다. 예를 들어 DATA_ENGINEER 과 같습니다.
:code:`<database_name>`은 쿼리하려는 Snowflake 관리 Iceberg 테이블이 포함된 Snowflake 계정의 데이터베이스 이름입니다.
참고
Spark의
.warehouse속성에는 Snowflake 웨어하우스 이름이 아닌 Snowflake 데이터베이스 이름이 필요합니다.
중요
기본적으로 코드 예제는 Amazon S3에 저장된 Apache Iceberg™ 테이블에 대해 설정됩니다. Iceberg 테이블이 Azure Storage(ADLS)에 저장되는 경우 다음 단계를 수행합니다.
다음 줄을 주석으로 처리합니다.
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"다음 줄의 주석 처리를 제거합니다.
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
Step 6: Query Iceberg tables¶
이 단계에서는 Apache Spark™를 사용하여 Iceberg 테이블을 쿼리하는 다음 코드 예제를 제공합니다.
네임스페이스 표시하기
네임스페이스 사용하기
테이블 표시하기
테이블 쿼리하기
네임스페이스 표시하기¶
spark.sql("show namespaces").show()
네임스페이스 사용하기¶
spark.sql("use namespace <your_schema_name_in_snowflake>")
테이블 표시하기¶
spark.sql("show tables").show()
테이블 쿼리하기¶
spark.sql("use namespace spark_demo")
spark.sql("select * from <your_table_name_in_snowflake>").show()
외부 쿼리 엔진으로 Iceberg 테이블을 쿼리할 때의 고려 사항¶
외부 쿼리 엔진으로 Iceberg 테이블을 쿼리할 때 다음 사항을 고려합니다.
Snowflake 테이블의 경우:
Snowflake 관리 Iceberg 테이블만 지원됩니다.
Delta Direct 및 Parquet Direct 테이블과 Snowflake 네이티브 테이블을 포함한 원격 또는 외부에서 관리되는 Iceberg 테이블 쿼리는 지원되지 않습니다.
쿼리할 수는 있지만 Iceberg 테이블에 쓸 수는 없습니다.
외부 읽기는 Iceberg 버전 2 이하에서만 지원됩니다.
이 기능은 모든 공용 클라우드 리전의 Amazon S3, Google Cloud 또는 Azure에 저장된 Snowflake 관리 Iceberg 테이블에만 지원됩니다. S3 호환 불가 AWS 저장소는 아직 지원되지 않습니다.
다음과 같은 세분화된 액세스 제어(FGAC) 정책이 테이블에 정의되는 경우 Horizon Iceberg REST API를 통해 Iceberg 테이블을 쿼리할 수 없습니다.
행 액세스 정책
열 수준 보안
역할 이름에 하이픈 문자(-)가 포함된 Snowflake 역할은 Horizon Catalog 엔드포인트를 통해 Iceberg 테이블에 액세스할 때 지원되지 않습니다.
저장소 계정에 대한 Horizon Catalog 엔드포인트 액세스 권한을 명시적으로 부여하는 기능은 지원되지 않습니다. 외부 엔진에서 Horizon Catalog로, Horizon Catalog에서 저장소 계정으로의 보안 연결을 위해 비공개 연결을 사용하는 것이 좋습니다.