{"record":{"id":"72cc356b8e478098","repo":"risingwavelabs/risingwave","slug":"can-t-find-message-proto","errorCode":null,"errorMessage":"Can't find message proto {}","messagePattern":"Can't find message proto (.+?)","errorType":"exception","errorClass":"SinkError::BigQuery","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/big_query.rs","lineNumber":689,"sourceCode":"                .map(|f| (f.name.as_str(), &f.data_type)),\n            config.common.table.clone(),\n        )?;\n\n        if !is_append_only {\n            let field = FieldDescriptorProto {\n                name: Some(CHANGE_TYPE.to_owned()),\n                number: Some((schema.len() + 1) as i32),\n                r#type: Some(field_descriptor_proto::Type::String.into()),\n                ..Default::default()\n            };\n            descriptor_proto.field.push(field);\n        }\n\n        let descriptor_pool = build_protobuf_descriptor_pool(&descriptor_proto)?;\n        let message_descriptor = descriptor_pool\n            .get_message_by_name(&config.common.table)\n            .ok_or_else(|| {\n                SinkError::BigQuery(anyhow::anyhow!(\n                    \"Can't find message proto {}\",\n                    config.common.table\n                ))\n            })?;\n        let proto_field = if !is_append_only {\n            let proto_field = message_descriptor\n                .get_field_by_name(CHANGE_TYPE)\n                .ok_or_else(|| {\n                    SinkError::BigQuery(anyhow::anyhow!(\"Can't find {}\", CHANGE_TYPE))\n                })?;\n            Some(proto_field)\n        } else {\n            None\n        };\n        let row_encoder = ProtoEncoder::new(\n            schema.clone(),\n            None,\n            message_descriptor.clone(),","sourceCodeStart":671,"sourceCodeEnd":707,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/big_query.rs#L671-L707","documentation":"When creating a BigQuery sink writer, RisingWave builds a protobuf descriptor pool from the sink schema with a message named after the sink's `table` config property, then looks up that message descriptor. This error means the pool was built but does not contain a message with the configured table name, i.e. the generated proto descriptor name does not match the table name string used for lookup.","triggerScenarios":"Calling BigQuerySinkWriter::new where build_protobuf_descriptor_pool succeeded but config.common.table does not equal the message name actually inserted into the pool - e.g. the table name contains dots, dashes, or case that was transformed when constructing the FileDescriptorProto.","commonSituations":"Table property containing a dot (e.g. 'project.dataset.table' given as table), table names with invalid protobuf identifier characters, or mismatched naming between descriptor construction and lookup after a config change.","solutions":["Set the sink's `table` property to a plain valid protobuf identifier (letters, digits, underscore; no dots or dashes); set project/dataset via their own properties.","Check build_protobuf_schema to confirm the message name it generates exactly matches config.common.table.","Verify build_protobuf_descriptor_pool registers the file under the expected package/name used by get_message_by_name.","Log the descriptor pool's message names before lookup to see what name actually exists."],"exampleFix":"// before\n'bigquery.table' = 'my-project.my-dataset.my-table'\n// after\n'bigquery.table' = 'my_table'  // project/dataset set via their own properties","handlingStrategy":"validation","validationCode":"-- `table` must be a valid protobuf identifier; check in config:\n-- reject if it contains '.', '-', or starts with a digit.\nSELECT table_name FROM `<project>.<dataset>.INFORMATION_SCHEMA.TABLES`\nWHERE table_name = '<table>';  -- confirms the table exists","typeGuard":null,"tryCatchPattern":"match sink_creation {\n    Err(SinkError::BigQuery(e)) if e.to_string().contains(\"Can't find message proto\") => {\n        // fix the `table` config value to a valid protobuf identifier and retry\n    }\n    other => other?,\n}","preventionTips":["Keep the `table` property a plain identifier: no dots, dashes, or special characters.","Set project and dataset through their dedicated config fields, never inside `table`.","Test CREATE SINK in a dev environment to catch name mismatches early.","After config changes, verify the error's interpolated table name matches what you expect."],"tags":["bigquery","protobuf","config","rust"],"backgroundTag":"resource-not-found","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}