Snowflake Open Catalog¶
In case that you already have a Snowflake Open Catalog containing Iceberg Tables managed by Snowflake you want to access from the Denodo Embedded MPP, you can use the Snowflake Open Catalog as an external Metastore.
Note
These Iceberg Tables by Snowflake are read-only.
For this you have to define a new catalog. The recommended way is using the presto.catalog
property in values.yaml
. This new catalog will be accessed from the From MPP Catalogs tab
.
![]()
Create Snowflake Open Catalog Views From MPP Catalog¶
See below for an example of an Iceberg catalog connected to Snowflake Open Catalog named snowflakeopencatalog
catalog:
#snowflakeopencatalog: |-
# connector.name=iceberg
# iceberg.catalog.type=rest
# iceberg.rest.uri=https://xxxxxxx.snowflakecomputing.com/polaris/api/catalog
# iceberg.rest.auth.type=OAUTH2
# iceberg.rest.auth.oauth2.credential=xxxxxxxxxx
# iceberg.rest.auth.oauth2.scope=PRINCIPAL_ROLE:ALL
# iceberg.catalog.warehouse=external_catalog
# iceberg.rest.case-insensitive-name-matching=true
# hive.pushdown-filter-enabled=true
# hive.parquet-batch-read-optimization-enabled=true
You can also define new catalogs creating a properties file in presto/conf/catalog/
, e.g., presto/conf/catalog/snowflakeopencatalog.properties
. Although it is preferred to define new catalogs in values.yaml
to facilitate version upgrades and management of environment-specific configurations.
Below there is an example of an Iceberg catalog to connect to Snowflake Open Catalog:
connector.name=iceberg
iceberg.catalog.type=rest
iceberg.rest.uri=https://xxxxxxx.snowflakecomputing.com/polaris/api/catalog
iceberg.rest.auth.type=OAUTH2
iceberg.rest.auth.oauth2.credential=xxxxxxxxxx
iceberg.rest.auth.oauth2.scope=PRINCIPAL_ROLE:ALL
iceberg.catalog.warehouse=external_catalog
iceberg.rest.case-insensitive-name-matching=true
hive.pushdown-filter-enabled=true
hive.parquet-batch-read-optimization-enabled=true
Properties¶
Property Name |
Description |
---|---|
iceberg.rest.uri |
REST API endpoint URI (required). Example: https://xxxxxxx.snowflakecomputing.com/polaris/api/catalog |
iceberg.rest.auth.type |
The authentication type to use. Available values are NONE or OAUTH2 (default: NONE). OAUTH2 requires either a credential or token. |
iceberg.rest.auth.oauth2.credential |
The OAauth2 credentials returned by Open Snowflake Catalog when the principal was created for access from the Embedded MPP. It has the form key:secret. |
iceberg.rest.auth.oauth2.scope |
The scope to use for OAUTH2 authentication. This property is only applicable when using |
iceberg.catalog.warehouse |
The name of the Snowflake Open Catalog you want to connect. |
iceberg.rest.case-insensitive-name-matching |
Match namespaces, table and view names case-insensitively. Defaults to false. But you need to set it to true as Snowflake schemas and tables are in uppercase by default. |
Note
Depending on the Object Storage location of the Iceberg tables Snowflake Open Catalog accesses, you may need to provide credentials for that storage to the Embedded MPP cluster. To do this, you need to provide them using a Kubernetes secret created before deploying the MPP cluster. e.g. If you are using ASW credentials you need to provide the AWS S3 access and secret key ID.
kubectl create secret generic mpp-credentials
--from-literal=METASTORE_DB_PASSWORD=hive
--from-literal=AWS_ACCESS_KEY_ID=awsaccesskeyid
--from-literal=AWS_SECRET_ACCESS_KEY=awssecretaccesskey
In this case is also necessary to set true the objectStorage.aws.securityCredentials.enabled
property in values.yaml
Supported Operations¶
Operation |
Snowflake Open Catalog Catalog |
---|---|
Read |
Yes |
Create/Insert |
No |
Update |
No |
Merge |
No |
Delete |
No |