{"record":{"id":"8e20b03233ad31f8","repo":"risingwavelabs/risingwave","slug":"feature-feature-is-not-available-based-on-your-8e20b0","errorCode":null,"errorMessage":"feature {feature:?} is not available based on your license\n\nHint: You may want to set a license key with `ALTER SYSTEM SET license_key = '...';` command. For more information, visit https://go.risingwave.com/premium.","messagePattern":"feature (.+?) is not available based on your license\n\nHint: You may want to set a license key with `ALTER SYSTEM SET license_key = '\\.\\.\\.';` command\\. For more information, visit https://go\\.risingwave\\.com/premium\\.","errorType":"validation","errorClass":"FeatureNotAvailable","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/file_sink/opendal_sink.rs","lineNumber":150,"sourceCode":"        crate::sink::validate_sink_unknown_fields(&self.unknown_fields)\n    }\n\n    /// A file is committed only once the batching strategy is met, so an untruncated barrier\n    /// would block the checkpoint forever on the non-decoupled in-memory log store.\n    fn is_sink_decouple(user_specified: &SinkDecouple) -> Result<bool> {\n        match user_specified {\n            SinkDecouple::Default | SinkDecouple::Enable => Ok(true),\n            SinkDecouple::Disable => Err(SinkError::Config(anyhow!(\n                \"File sink can only be created with sink_decouple enabled. Please run `set sink_decouple = true` first.\"\n            ))),\n        }\n    }\n\n    async fn validate(&self) -> Result<()> {\n        if matches!(self.engine_type, EngineType::Snowflake) {\n            risingwave_common::license::Feature::SnowflakeSink\n                .check_available()\n                .map_err(|e| anyhow::anyhow!(e))?;\n        }\n        if !self.is_append_only {\n            return Err(SinkError::Config(anyhow!(\n                \"File sink only supports append-only mode at present. \\\n                    Please change the query to append-only, and specify it \\\n                    explicitly after the `FORMAT ... ENCODE ...` statement. \\\n                    For example, `FORMAT xxx ENCODE xxx(force_append_only='true')`\"\n            )));\n        }\n\n        if self.format_desc.encode != SinkEncode::Parquet\n            && self.format_desc.encode != SinkEncode::Json\n        {\n            return Err(SinkError::Config(anyhow!(\n                \"File sink only supports `PARQUET` and `JSON` encode at present.\"\n            )));\n        }\n","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/file_sink/opendal_sink.rs#L132-L168","documentation":"When a file sink targets the Snowflake engine type, the connector checks whether the `SnowflakeSink` feature is licensed and available. If the deployment lacks a valid license key covering this premium feature, `check_available()` fails and the error is surfaced (wrapped with a hint to set a license key via `ALTER SYSTEM SET license_key = '...';`). This is RisingWave's license gating, not a configuration mistake in the sink itself.","triggerScenarios":"Creating a file sink with engine_type = Snowflake (e.g. `type = 'snowflake'` / snowflake engine) on a cluster without an applicable license key or on an edition that does not include the Snowflake sink feature.","commonSituations":"Running community/open-source RisingWave and attempting a Snowflake sink; license key expired or not yet set; evaluating premium features without enabling the trial license.","solutions":["Set a valid license key: `ALTER SYSTEM SET license_key = '...';`","Verify the license covers the Snowflake sink feature for your edition","If Snowflake output is not actually needed, create the sink without the Snowflake engine type (e.g. write files to S3/GCS directly)"],"exampleFix":"-- before\nCREATE SINK s FROM mv WITH (connector = 'snowflake', ...);\n-- after\nALTER SYSTEM SET license_key = 'rw-...';\nCREATE SINK s FROM mv WITH (connector = 'snowflake', ...);","handlingStrategy":"validation","validationCode":"-- verify license before creating Snowflake sink\nALTER SYSTEM SET license_key = '...';\nSHOW PARAMETERS; -- confirm license applied\nSELECT * FROM rw_catalog.rw_license; -- check feature availability if exposed","typeGuard":null,"tryCatchPattern":"match err.message().contains(\"not available based on your license\") {\n    true => eprintln!(\"Set a license key first: ALTER SYSTEM SET license_key = '...';\"),\n    false => return Err(err),\n}","preventionTips":["Set a valid license key before attempting premium features like Snowflake sink","Track license expiry and renew proactively","Confirm feature edition coverage with your RisingWave account before designing pipelines around premium sinks"],"tags":["license","snowflake","sink","feature-gating"],"backgroundTag":"feature-not-enabled","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}