2016-03-04 57 views
0

我试图插入与架构的BigQuery时:异常更新的BigQuery架构

require 'gcloud' 

gc = Gcloud.new 'PROJECT_ID' 
bq = gc.bigquery 
ds = bq.dataset 'MY_DATASET' 
t = ds.create_table 'MY_TABLE' 
t.schema = { fields: [ { name: 'Name', type: 'STRING' } ] } 
t.insert [{'name' => 'test1'}] 

正如预期的那样,我的终端控制台显示输出误差:

[{"reason"=>"invalid", "location"=>"name", "debugInfo"=>"generic::not_found: no such field.", "message"=>"no such field."}]

当我尝试更新架构插入关键名称

t.schema = { 
    fields: [ 
    { name: 'Name', type: 'STRING' }, 
    { name: 'name', type: 'STRING' } 
    ] 
} 

显示EXC eption:

Gcloud::Bigquery::ApiError: Field name already exists in schema

任何建议我该如何解决这个问题?这是一个BigQuery错误?

+0

我以前没有用过bigquery,但它看起来像是降低了字段名称。因此,尽管第一次使用字段名称,但基本上试图创建两次字段“名称”。 –

+0

不,返回的密钥是'Name',我无法在密钥中使用大写字母定义的模式之后创建低密钥。我也不能用小写键来插入数据。这很混乱。 –

回答

2

当插入数据时(通过流式传输,至少,似乎使用哪一个t.insert),字段名称区分大小写。所以如果你更新到'名称',它应该与你的模式一起工作。

t.insert [{'Name' => 'test1'}] 

然而,在查询中,字段名称是区分大小写的,所以它是无效的表有只有大小写不同的字段名称:他们会难以区分。这会导致您的第二个错误“字段名称已存在于模式中”。

这是无可否认的混乱。我会研究是否可以使用户更易于预测区分大小写。