Go 如何在BigQuery中创建包含非必填字段的表?
我正在Go中制作一个RESTful API,它在BigQuery中写入行。我正在使用 为了创建BigQuery方案,我从结构推断模式,如中所述 问题是,结果模式的所有非重复字段都是“必需的”,因此,当我想要上载一个具有空值的结构时,空值将作为empy字段上载 这是my struct的一个示例:Go 如何在BigQuery中创建包含非必填字段的表?,go,google-bigquery,Go,Google Bigquery,我正在Go中制作一个RESTful API,它在BigQuery中写入行。我正在使用 为了创建BigQuery方案,我从结构推断模式,如中所述 问题是,结果模式的所有非重复字段都是“必需的”,因此,当我想要上载一个具有空值的结构时,空值将作为empy字段上载 这是my struct的一个示例: type Stats struct { Name string `bigquery:"name"` LastName int
type Stats struct {
Name string `bigquery:"name"`
LastName int `bigquery:"last_name"`
PhoneNumber string `bigquery:"phone_number"`
}
这是如何创建架构的示例:
testSchema, err := bigquery.InferSchema(Stats{})
if err != nil {
// TODO: Handle error.
}
并且,如果我上载一个只有一个字段集的结构:
rows := []*Stats{
{Name: "testA"},
}
u := table.Uploader()
err2 := u.Put(ctx, rows)
结果是,在BigQuery中,“last_name”和“phone_number”字段是一个空字符串“”,而不是NULL我是一名专家,但查看代码时,它看起来像
inferFieldSchema
方法总是设置Required:true
。我会提交一个bug以允许控制它(尽管不清楚如何),或者您可以在创建模式后对其进行修补—BigQuery支持将模式从REQUIRED修改为NULLABLE。为此,显然您必须使用特定的BigQuery NULLABLE类型(NullInt64、NullFloat64、NullString、NullBool、NullTimestamp、NullDate、NullTime和NullDateTime)
使用bigquery.NullBool的示例: