【发布时间】:2018-12-03 22:39:11
【问题描述】:
我有一个具有此架构的 BigQuery 表:
name STRING NULLABLE
age INTEGER NULLABLE
amount INTEGER NULLABLE
并且我可以使用以下代码成功插入表格:
ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)
if err != nil {
log.Fatal(err)
}
u := client.Dataset(dataSetID).Table("test_user").Uploader()
savers := []*bigquery.StructSaver{
{Struct: test{Name: "Sylvanas", Age: 23, Amount: 123}},
}
if err := u.Put(ctx, savers); err != nil {
log.Fatal(err)
}
fmt.Printf("rows inserted!!")
这很好,因为该表已经在 bigquery 上创建,我现在要做的是删除该表(如果存在)并从代码中再次创建它:
type test struct {
Name string
Age int
Amount int
}
if err := client.Dataset(dataSetID).Table("test_user").Delete(ctx); err != nil {
log.Fatal(err)
}
fmt.Printf("table deleted")
t := client.Dataset(dataSetID).Table("test_user")
// Infer table schema from a Go type.
schema, err := bigquery.InferSchema(test{})
if err := t.Create(ctx,
&bigquery.TableMetadata{
Name: "test_user",
Schema: schema,
}); err != nil {
log.Fatal(err)
}
fmt.Printf("table created with the test schema")
这也很好用,因为它正在删除表并使用我的结构测试中推断的架构创建它。
当我在删除/创建过程之后尝试执行上述插入时,问题就来了。没有抛出错误,但它没有插入数据(如果我评论删除/创建部分,插入工作正常)。
我做错了什么? 我是否需要以某种方式提交创建表事务才能插入,或者我是否需要关闭 DDBB 连接?
【问题讨论】:
-
您如何确定插入不起作用?
-
我进入 bigQuery 控制台并运行了一个不返回数据的 select *(我已经做了很多选择并刷新了页面,但仍然无法正常工作)
-
@GrahamPolley 除了“等待”之外,possible duplicate 和 the other question referenced in that one 都没有解决该问题的实际解决方案(这些问题上的 cmets 建议它大约是 5 分钟而不是 2 分钟,这表明一些不一致的行为)。也许我们可以在将其作为副本关闭之前想出一些解决此限制的代码?
标签: go google-bigquery gcloud