ruby の google-api-client gem を使用して、ストリーミング insert_all メソッドを使用してテーブルにデータを挿入しようとしています。
そこで、Bigquery で次の内容の新しいテーブルを作成することから始めます (読み取り権限と書き込み権限は正しい)。
+-----+-----------+-------------+
| Row | person_id | person_name |
+-----+-----------+-------------+
| 1 | 1 | ABCD |
| 2 | 2 | EFGH |
| 3 | 3 | IJKL |
+-----+-----------+-------------+
これはルビーの私のコードです: (私は今日、tabledata.insert_all が tabledata.insertAll のルビーであることを発見しました - google docs / example を更新する必要があります)
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 |
+-----+-----------+-------------+
それで、何が得られますか?I've lost data.... (ID 11 と ID 5 は消えました) リクエストに対する応答にもエラーはありません。
私が何か間違ったことをしているのか、なぜこれが起こっているのか誰か教えてもらえますか?
どんな助けでも大歓迎です。
素晴らしい一日をありがとう。