我正在尝试使用流式 insert_all 方法使用 ruby 中的 google-api-client gem 将数据插入到表中。
所以我首先在 Bigquery 中创建一个新表(读写权限是正确的),内容如下:
+-----+-----------+-------------+
| Row | person_id | person_name |
+-----+-----------+-------------+
| 1 | 1 | ABCD |
| 2 | 2 | EFGH |
| 3 | 3 | IJKL |
+-----+-----------+-------------+
这是我在 ruby 中的代码:(我今天早些时候发现 tabledata.insert_all 是 tabledata.insertAll 的 ruby - 需要更新谷歌文档/示例)
def streaming_insert_data_in_table(table, dataset=DATASET)
body = {"rows"=>[
{"json"=> {"person_id"=>10,"person_name"=>"george"}},
{"json"=> {"person_id"=>11,"person_name"=>"washington"}}
]}
result = @client.execute(
:api_method=> @bigquery.tabledata.insert_all,
:parameters=> {
:projectId=> @project_id.to_s,
:datasetId=> dataset,
:tableId=>table},
:body_object=>body,
)
puts result.body
end
所以我第一次运行我的代码,一切看起来都很好。我在 Bigquery 的表格中看到了这一点:
+-----+-----------+-------------+
| Row | person_id | person_name |
+-----+-----------+-------------+
| 1 | 1 | ABCD |
| 2 | 2 | EFGH |
| 3 | 3 | IJKL |
| 4 | 10 | george |
| 5 | 11 | washington |
+-----+-----------+-------------+
然后我将方法中的数据更改为:
body = {"rows"=>[
{"json"=> {"person_id"=>5,"person_name"=>"john"}},
{"json"=> {"person_id"=>6,"person_name"=>"kennedy"}}
]}
运行该方法并在 Bigquery 中获取它:
+-----+-----------+-------------+
| Row | person_id | person_name |
+-----+-----------+-------------+
| 1 | 1 | ABCD |
| 2 | 2 | EFGH |
| 3 | 3 | IJKL |
| 4 | 10 | george |
| 5 | 6 | kennedy |
+-----+-----------+-------------+
那么,什么给了?我丢失了数据....(ids 11 和 id 5 已经消失)请求的响应也没有错误。
有人可以告诉我我做错了什么或者为什么会这样吗?
任何帮助深表感谢。
谢谢,祝你有美好的一天。