{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-@l10n/ja/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Integrate with Snowflake","description":"Learn how to integrate Treasure AI-managed Iceberg tables with Snowflake using a Glue Iceberg REST catalog integration and Lake Formation vended credentials.","siteUrl":"https://docs.treasure.ai","lang":"en-US","jsonLd":{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.treasure.ai/","name":"Treasure AI","url":"https://www.treasure.ai/","logo":"https://www.treasure.ai/hubfs/assets/images/logos/primary-logo.svg"},{"@type":"WebSite","@id":"https://docs.treasure.ai/#website","name":"Treasure AI Documentation","url":"https://docs.treasure.ai/","inLanguage":["en","ja"],"publisher":{"@id":"https://www.treasure.ai/"}}]},"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"integrate-with-snowflake","__idx":0},"children":["Integrate with Snowflake"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This feature is not enabled on accounts by default. Contact Technical Support or your Customer Success representative to enable it."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide explains how to integrate the Treasure AI-managed Glue HMS catalog and Iceberg tables with Snowflake using a catalog-linked database backed by the AWS Glue Iceberg REST catalog."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After provisioning Iceberg catalog resources for your Treasure AI account, you can link the Glue HMS catalog into Snowflake as a catalog-linked database. This allows you to query Treasure AI-managed Iceberg tables directly from Snowflake without copying data."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The integration uses:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["catalog integration"]}," that connects Snowflake to the Treasure AI catalog through the AWS Glue Iceberg REST endpoint, authenticated with the Treasure AI reader IAM role via AWS Signature Version 4 (SigV4)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["catalog-linked database"]}," that exposes the Treasure AI Glue database and its Iceberg tables in Snowflake"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For access to the underlying table data, this guide uses ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["catalog-vended credentials"]},": Snowflake requests scoped, short-lived credentials from the catalog through AWS Lake Formation for each table it reads. This is the recommended method — you do not configure a Snowflake external volume or manage storage access on the Snowflake side."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Iceberg catalog resources provisioned and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active"]}," for your account (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/resource-provisioning"},"children":["Provision Resources"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Snowflake account with privileges to create catalog integrations and databases (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACCOUNTADMIN"]},", or a role granted ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATE INTEGRATION"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATE DATABASE"]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"authentication","__idx":3},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For authentication details and API endpoints by site, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/use-iceberg-catalog-api"},"children":["Use Iceberg Catalog Management API"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"required-information","__idx":4},"children":["Required Information"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Retrieve these values from the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/resource-provisioning#get-resource-status"},"children":["Get Resource Status"]}," endpoint:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl \"https://api-iceberg-mng.us01.treasuredata.com/v1/iceberg/catalog/resources\" \\\n  -H \"Authorization: TD1 <admin_api_key>\" \\\n  -H \"Accept: application/json\"\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Response Field"},"children":["Response Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Used As"},"children":["Used As"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Example"},"children":["Example"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aws_region"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Glue region in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CATALOG_URI"]}," and the SigV4 signing region"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["us-east-1"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aws_account_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Glue catalog name (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CATALOG_NAME"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["123456789012"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iam_role_arn"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SigV4 IAM role (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGV4_IAM_ROLE"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["arn:aws:iam::123456789012:role/zcpo-hms-tenant-us01_td10000"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["db_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Allowed namespace in the catalog-linked database (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["td10000_us01_export"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Glue catalog name is the AWS account ID (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aws_account_id"]},"), because the default Glue catalog for an account is named after the account."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"setup","__idx":5},"children":["Setup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Steps 1–4 correspond to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/user-guide/tables-iceberg-configure-catalog-integration-rest-glue"},"children":["Configure a catalog integration for AWS Glue Iceberg REST"]},", and step 5 corresponds to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/user-guide/tables-iceberg-catalog-linked-database"},"children":["Create a catalog-linked database"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-snowflake-create-a-catalog-integration","__idx":6},"children":["Step 1 (Snowflake): Create a Catalog Integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a catalog integration that points at the Treasure AI Glue Iceberg REST endpoint and uses catalog-vended credentials. Follow ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/sql-reference/sql/create-catalog-integration-rest"},"children":["CREATE CATALOG INTEGRATION (Apache Iceberg REST)"]},", and set ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/user-guide/tables-iceberg-configure-catalog-integration-vended-credentials"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS"]}]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Substitute the values from the Treasure AI resource response:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"CREATE CATALOG INTEGRATION my_glue_rest_integration\n  CATALOG_SOURCE = ICEBERG_REST\n  TABLE_FORMAT = ICEBERG\n  REST_CONFIG = (\n    CATALOG_URI = 'https://glue.<aws_region>.amazonaws.com/iceberg'\n    CATALOG_API_TYPE = AWS_GLUE\n    CATALOG_NAME = '<aws_account_id>'\n    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS\n  )\n  REST_AUTHENTICATION = (\n    TYPE = SIGV4\n    SIGV4_IAM_ROLE = '<iam_role_arn>'\n    SIGV4_SIGNING_REGION = '<aws_region>'\n  )\n  ENABLED = TRUE;\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-snowflake-retrieve-the-iam-user-and-external-id","__idx":7},"children":["Step 2 (Snowflake): Retrieve the IAM User and External ID"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Describe the catalog integration to retrieve the AWS IAM user and external ID that Snowflake generated for it:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"DESCRIBE CATALOG INTEGRATION my_glue_rest_integration\n  ->> SELECT * FROM $1 WHERE \"property\" LIKE 'API_AWS_%';\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Record the values of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_AWS_IAM_USER_ARN"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_AWS_EXTERNAL_ID"]},". Use them in the next step."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-treasure-ai-update-trust-policy-of-iam-role-for-reading-tables","__idx":8},"children":["Step 3 (Treasure AI): Update Trust Policy of IAM Role for Reading Tables"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Update the trust policy of the IAM role for reading tables so Snowflake can assume it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call the trust policy update endpoint with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["service"]}," set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["snowflake"]},", the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_AWS_IAM_USER_ARN"]}," from Step 2 as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iam_principal_arns"]},", and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_AWS_EXTERNAL_ID"]}," from Step 2 as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_ids"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sh","header":{"controls":{"copy":{}}},"source":"curl -X POST \"https://api-iceberg-mng.us01.treasuredata.com/v1/iceberg/catalog/resources/reader_role/trust_policy\" \\\n  -H \"Authorization: TD1 <admin_api_key>\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"entries\": [\n      {\n        \"service\": \"snowflake\",\n        \"iam_principal_arns\": [\"<API_AWS_IAM_USER_ARN>\"],\n        \"external_ids\": [\"<API_AWS_EXTERNAL_ID>\"]\n      }\n    ]\n  }'\n","lang":"sh"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The external ID is matched against the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sts:ExternalId"]}," condition in the IAM role trust policy, so only the specified Snowflake catalog integration can assume the role. This value is generated by Snowflake and is only known after creating the integration."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Important"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The catalog integration will not work until this step is completed. Poll the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/resource-provisioning#get-resource-status"},"children":["Get Resource Status"]}," endpoint and wait for the status to return to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active"]}," before proceeding."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4-snowflake-verify-the-catalog-integration","__idx":9},"children":["Step 4 (Snowflake): Verify the Catalog Integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Confirm that Snowflake can reach the catalog and assume the reader role. Follow ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/user-guide/tables-iceberg-configure-catalog-integration-rest-check-config#use-systemverify_catalog_integration"},"children":["Check the catalog integration configuration"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"SELECT SYSTEM$VERIFY_CATALOG_INTEGRATION('my_glue_rest_integration');\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The integration is configured correctly when the result reports success:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"errorCode\": \"\",\n  \"errorMessage\": \"\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["success"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},", verify the IAM user ARN and external ID registered in Step 3 and that the resource status returned to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-5-snowflake-create-a-catalog-linked-database","__idx":10},"children":["Step 5 (Snowflake): Create a Catalog-Linked Database"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a catalog-linked database that exposes the Treasure AI Glue database. Follow ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/sql-reference/sql/create-database-catalog-linked"},"children":["CREATE DATABASE (catalog-linked)"]},", and set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]}," to the Treasure AI ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["db_name"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"CREATE DATABASE my_linked_db\n  LINKED_CATALOG = (\n    CATALOG = 'my_glue_rest_integration'\n    ALLOWED_NAMESPACES = ('<db_name>')\n    ALLOWED_WRITE_OPERATIONS = NONE\n  );\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_WRITE_OPERATIONS = NONE"]}," because the Treasure AI reader role is read-only."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]}," accepts more than one namespace. In addition to the default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["export"]}," database, you can link any databases you created via the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/database-management"},"children":["Database Management API"]}," by adding their names to the list:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"CREATE DATABASE my_linked_db\n  LINKED_CATALOG = (\n    CATALOG = 'my_glue_rest_integration'\n    ALLOWED_NAMESPACES = ('<db_name>', '<another_db_name>')\n    ALLOWED_WRITE_OPERATIONS = NONE\n  );\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Only databases listed in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]}," are linked. To expose a database created later, update the catalog-linked database to include its name."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Alternatively, you can expose a database through its own catalog-linked database by running ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATE DATABASE"]}," again with a different Snowflake database name against the same catalog integration. Reuse the integration from Step 1 — you do not create a new one."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"validation","__idx":11},"children":["Validation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Check that Snowflake has successfully linked the catalog with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.snowflake.com/en/sql-reference/functions/system_catalog_link_status"},"children":["SYSTEM$CATALOG_LINK_STATUS"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"sql","header":{"controls":{"copy":{}}},"source":"SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');\n","lang":"sql"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Linking is working when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["executionState"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RUNNING"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failureDetails"]}," is empty:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{ \"failureDetails\": [], \"executionState\": \"RUNNING\", \"lastLinkAttemptStartTime\": \"2026-07-15T04:40:49.001Z\" }\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After linking completes, the Treasure AI Glue database and its Iceberg tables appear in the catalog-linked database and you can query them from Snowflake."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting","__idx":12},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Possible Cause"},"children":["Possible Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SYSTEM$VERIFY_CATALOG_INTEGRATION"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["success: false"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["IAM user ARN or external ID mismatch — verify the values registered in Step 3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Access denied when querying table data"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Vended credentials could not be issued — confirm the resource status returned to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["active"]}," after Step 3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SYSTEM$CATALOG_LINK_STATUS"]}," shows ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failureDetails"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Namespace mismatch — confirm ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]}," matches the Treasure AI ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["db_name"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Region or signing error"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CATALOG_URI"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SIGV4_SIGNING_REGION"]}," must both use the Treasure AI ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["aws_region"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"important-notes","__idx":13},"children":["Important Notes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The trust policy update in Step 3 is a full replacement. To add another integration later without dropping Snowflake, use the read-modify-write flow in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/trust-policy-management"},"children":["Manage the Reader Role Trust Policy"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The reader IAM role is read-only. Snowflake can query tables but cannot modify data in the Treasure AI-managed S3 bucket, which is why ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_WRITE_OPERATIONS"]}," is set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NONE"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Catalog-vended credentials are the recommended access method. Configuring a Snowflake external volume is an alternative if you prefer to manage storage access on the Snowflake side, but it is not required for this integration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A single catalog integration can expose the default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["export"]}," database and any created via the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/ja/products/customer-data-platform/composable-publish/database-management"},"children":["Database Management API"]},". List them together in one catalog-linked database's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALLOWED_NAMESPACES"]},", or give each its own catalog-linked database — both reuse the same integration (see Step 5)."]}]}]},"headings":[{"value":"Integrate with Snowflake","id":"integrate-with-snowflake","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Authentication","id":"authentication","depth":3},{"value":"Required Information","id":"required-information","depth":3},{"value":"Setup","id":"setup","depth":2},{"value":"Step 1 (Snowflake): Create a Catalog Integration","id":"step-1-snowflake-create-a-catalog-integration","depth":3},{"value":"Step 2 (Snowflake): Retrieve the IAM User and External ID","id":"step-2-snowflake-retrieve-the-iam-user-and-external-id","depth":3},{"value":"Step 3 (Treasure AI): Update Trust Policy of IAM Role for Reading Tables","id":"step-3-treasure-ai-update-trust-policy-of-iam-role-for-reading-tables","depth":3},{"value":"Step 4 (Snowflake): Verify the Catalog Integration","id":"step-4-snowflake-verify-the-catalog-integration","depth":3},{"value":"Step 5 (Snowflake): Create a Catalog-Linked Database","id":"step-5-snowflake-create-a-catalog-linked-database","depth":3},{"value":"Validation","id":"validation","depth":2},{"value":"Troubleshooting","id":"troubleshooting","depth":2},{"value":"Important Notes","id":"important-notes","depth":2}],"frontmatter":{"seo":{"title":"Integrate with Snowflake","description":"Learn how to integrate Treasure AI-managed Iceberg tables with Snowflake using a Glue Iceberg REST catalog integration and Lake Formation vended credentials."}},"lastModified":"2026-07-21T06:07:08.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/ja/products/customer-data-platform/composable-publish/snowflake-integration","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}