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;