数据流insertAll api用法不等于实际插入的行

时间:2015-07-26 13:50:42

标签: google-bigquery

我们正在使用 google-php-client-api ,以便将网站网页浏览日志流式传输到包含9列的表格中。 (由基本数据类型组成

  • cookieid(string),
  • domain(string),
  • site_category(string),
  • site_subcategory(string),
  • querystring(string),
  • connectiontime(时间戳),
  • flag(布尔值),
  • 的持续时间(整数),
  • REMOTEIP(字符串))

经过10个小时或运行脚本后,我们观察到bigquery api的使用(对于 insertAll methods )变为 300K ,但在此期间 35K行仅被记录到桌子......

当我们查看谷歌云控制台时,大约 299K的300K api使用返回“成功代码”;我的意思是流媒体似乎运作良好。

我们不理解,在299K成功请求之后,如何只将35K行插入表中?

这是一个问题,因为google-php-client-api或bigquery没有将发送的数据保存到表中呢?

如果第二个是真的,我们需要多长时间才能看到发送到bigquery的实际(所有)行?

用于流数据的代码:

    $rows = array();
    $data = json_decode($rawjson);
    $row = new Google_Service_Bigquery_TableDataInsertAllRequestRows();
    $row->setJson($data);
    $row->setInsertId(strtotime('now'));
    $rows[0] = $row;

    $req = new Google_Service_Bigquery_TableDataInsertAllRequest();
    $req->setKind('bigquery#tableDataInsertAllRequest');
    $req->setRows($rows);

    $this->service->tabledata->insertAll($projectid, $datasetid, $tableid, $req);

提前谢谢你,

吉汗

1 个答案:

答案 0 :(得分:3)

我们解决了这个问题。 我们看到它是由于这个代码行引起的:

$row->setInsertId(strtotime('now'));

因为我们每秒至少有10-20个请求;因为这个" insertID",发送到BigQuery,这取决于当前的时间戳; BigQuery每秒只保存1个请求,拒绝所有其他请求而不将它们保存到表中。

我们删除了这一行,现在数字是相干的。