diff --git a/docs/pages/product/configuration/data-sources/snowflake.mdx b/docs/pages/product/configuration/data-sources/snowflake.mdx index 4aadb1b570a88..4a0d2639bd065 100644 --- a/docs/pages/product/configuration/data-sources/snowflake.mdx +++ b/docs/pages/product/configuration/data-sources/snowflake.mdx @@ -134,10 +134,15 @@ Storage][google-cloud-storage] for export bucket functionality. Ensure the AWS credentials are correctly configured in IAM to allow reads and -writes to the export bucket in S3. +writes to the export bucket in S3 if you are not using storage integration. +If you are using storage integration then you still need to configure access keys +for Cube Store to be able to read from the export bucket. +It's possible to authenticate with IAM roles instead of access keys for Cube Store. +Using IAM user credentials: + ```dotenv CUBEJS_DB_EXPORT_BUCKET_TYPE=s3 CUBEJS_DB_EXPORT_BUCKET=my.bucket.on.s3 @@ -146,6 +151,27 @@ CUBEJS_DB_EXPORT_BUCKET_AWS_SECRET= CUBEJS_DB_EXPORT_BUCKET_AWS_REGION= ``` +[Using Storage Integration][snowflake-docs-aws-integration] to write to Export Bucket and +then Access Keys to read from Cube Store: + +```dotenv +CUBEJS_DB_EXPORT_BUCKET_TYPE=s3 +CUBEJS_DB_EXPORT_BUCKET=my.bucket.on.s3 +CUBEJS_DB_EXPORT_INTEGRATION=aws_int +CUBEJS_DB_EXPORT_BUCKET_AWS_KEY= +CUBEJS_DB_EXPORT_BUCKET_AWS_SECRET= +CUBEJS_DB_EXPORT_BUCKET_AWS_REGION= +``` + +Using Storage Integration to write to export bocket and IAM role to read from Cube Store: +```dotenv +CUBEJS_DB_EXPORT_BUCKET_TYPE=s3 +CUBEJS_DB_EXPORT_BUCKET=my.bucket.on.s3 +CUBEJS_DB_EXPORT_INTEGRATION=aws_int +CUBEJS_DB_EXPORT_BUCKET_AWS_REGION= +``` + + #### Google Cloud Storage @@ -203,6 +229,7 @@ connections are made over HTTPS. [snowflake-docs-account-id]: https://docs.snowflake.com/en/user-guide/admin-account-identifier.html [snowflake-docs-connection-options]: https://docs.snowflake.com/en/developer-guide/node-js/nodejs-driver-options#additional-connection-options +[snowflake-docs-aws-integration]: https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration [snowflake-docs-gcs-integration]: https://docs.snowflake.com/en/user-guide/data-load-gcs-config.html [snowflake-docs-regions]: diff --git a/rust/cubesql/cubeclient/src/models/mod.rs b/rust/cubesql/cubeclient/src/models/mod.rs index 8b83cf4497450..823af0dbd51d5 100644 --- a/rust/cubesql/cubeclient/src/models/mod.rs +++ b/rust/cubesql/cubeclient/src/models/mod.rs @@ -14,6 +14,7 @@ pub mod v1_cube_meta_measure; pub use self::v1_cube_meta_measure::V1CubeMetaMeasure; pub mod v1_cube_meta_nested_folder; pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolder; +pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolderMember; pub mod v1_cube_meta_segment; pub use self::v1_cube_meta_segment::V1CubeMetaSegment; pub mod v1_cube_meta_type; diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_nested_folder.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_nested_folder.rs index 0ce0fb480b6a7..249d00d09cb20 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_nested_folder.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_nested_folder.rs @@ -11,16 +11,23 @@ use crate::models; use serde::{Deserialize, Serialize}; +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum V1CubeMetaNestedFolderMember { + Simple(String), + Folder(V1CubeMetaNestedFolder), +} + #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaNestedFolder { #[serde(rename = "name")] pub name: String, #[serde(rename = "members")] - pub members: Vec, + pub members: Vec, } impl V1CubeMetaNestedFolder { - pub fn new(name: String, members: Vec) -> V1CubeMetaNestedFolder { + pub fn new(name: String, members: Vec) -> V1CubeMetaNestedFolder { V1CubeMetaNestedFolder { name, members } } } diff --git a/rust/cubesql/cubesql/src/transport/mod.rs b/rust/cubesql/cubesql/src/transport/mod.rs index 4f2afe344384d..4df745ae01b04 100644 --- a/rust/cubesql/cubesql/src/transport/mod.rs +++ b/rust/cubesql/cubesql/src/transport/mod.rs @@ -10,6 +10,8 @@ pub type CubeMetaMeasure = cubeclient::models::V1CubeMetaMeasure; pub type CubeMetaSegment = cubeclient::models::V1CubeMetaSegment; pub type CubeMetaJoin = cubeclient::models::V1CubeMetaJoin; pub type CubeMetaFolder = cubeclient::models::V1CubeMetaFolder; +pub type CubeMetaNestedFolder = cubeclient::models::V1CubeMetaNestedFolder; +pub type CubeMetaNestedFolderMember = cubeclient::models::V1CubeMetaNestedFolderMember; pub type CubeMetaHierarchy = cubeclient::models::V1CubeMetaHierarchy; // Request/Response pub type TransportLoadResponse = cubeclient::models::V1LoadResponse;