如何使用google-cloud-bigquery crate创建ARRAY<STRUCT<..>>参数?
解决BigQuery ARRAY类型参数的创建问题
使用google-cloud-bigquery crate访问BigQuery时,要构造ARRAY<STRUCT<..>>类型的参数,关键是正确填充QueryParameterValue的struct_values字段——它需要接收一个Box包裹的结构体字段值数组。以下是修复后的完整代码:
#[derive(Debug, Clone)] pub struct Hello { pub bar: String, pub foo: String, } fn main() { let hello_array = vec![ Hello { bar: "Bar1".to_string(), foo: "Foo1".to_string(), }, Hello { bar: "Bar2".to_string(), foo: "Foo2".to_string(), }, ]; let query_parameter = QueryParameter { name: Some("hello_array_param".to_string()), parameter_type: QueryParameterType { parameter_type: "ARRAY".to_string(), array_type: Some(Box::new(QueryParameterType { parameter_type: "STRUCT".to_string(), struct_types: Some(vec![ QueryParameterStructType { name: Some("bar".to_string()), field_type: QueryParameterType { parameter_type: "STRING".to_string(), array_type: None, struct_types: None, }, description: None, }, QueryParameterStructType { name: Some("foo".to_string()), field_type: QueryParameterType { parameter_type: "STRING".to_string(), array_type: None, struct_types: None, }, description: None, }, ]), array_type: None, })), struct_types: None, }, parameter_value: QueryParameterValue { value: None, array_values: Some(hello_array.iter().map(|hello| QueryParameterValue { struct_values: Some(Box::new(vec![ // 对应struct_types里的第一个字段bar QueryParameterValue { value: Some(hello.bar.clone()), array_values: None, struct_values: None, }, // 对应struct_types里的第二个字段foo QueryParameterValue { value: Some(hello.foo.clone()), array_values: None, struct_values: None, }, ])), value: None, array_values: None, }).collect()), struct_values: None, }, }; println!("QueryParameter: {:#?}", query_parameter); }
关键说明:
struct_values字段的类型是Option<Box<Vec<QueryParameterValue>>>,需要将结构体的每个字段转换为单独的QueryParameterValue,放入Vec后用Box::new包裹- 结构体字段对应的
QueryParameterValue顺序必须和parameter_type中struct_types定义的字段顺序完全一致,BigQuery会按顺序匹配结构体字段 - 每个字段值通过
QueryParameterValue的value字段传入,这里因为是字符串类型,直接赋值Some(字段值.clone())即可
内容的提问来源于stack exchange,提问作者Niels Bosma
相关产品推荐
相关产品推荐

