将数据从bigquery导出到云存储 - php客户端库 - 云存储文件中有一个额外的空新行

时间:2017-04-24 18:31:02

标签: google-bigquery google-cloud-storage

我按照这个样本

https://cloud.google.com/bigquery/docs/exporting-data

public function exportDailyRecordsToCloudStorage($date, $tableId)
{
    $validTableIds = ['table1', 'table2'];

    if (!in_array($tableId, $validTableIds))
    {
        die("Wrong TableId");
    }

    $date = date("Ymd", date(strtotime($date)));
    $datasetId = $date;
    $dataset = $this->bigQuery->dataset($datasetId);
    $table = $dataset->table($tableId);

    // load the storage object
    $storage = $this->storage;

    $bucketName = 'mybucket';
    $objectName = "daily_records/{$tableId}_" . $date;
    $destinationObject = $storage->bucket($bucketName)->object($objectName);

    // create the import job
    $format = 'NEWLINE_DELIMITED_JSON';

    $options = ['jobConfig' => ['destinationFormat' => $format]];
    $job = $table->export($destinationObject, $options);

    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            //throw new Exception('Job has not yet completed', 500);
        }
    });

    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Data exported successfully' . PHP_EOL);
    }

我的table1中有37670行,云存储文件有37671行。

我的桌面有388065,云存储文件有388066行。

两个云存储文件中的最后一行是空行。

这是Google BigQuery功能改进请求吗?或者我在上面的代码中做错了什么?

1 个答案:

答案 0 :(得分:0)

你所描述的似乎是意想不到的结果。输出文件通常应与源表具有相同的行数。

您的PHP代码看起来很好,不应该成为问题的原因。

我尝试重现但无法重现。你能仔细检查最后一个空行是否被文本编辑器之类的其他工具以某种方式添加?你是如何计算结果输出的行。

如果您已经排除了这一点,并且确定新行确实是由BigQuery导出功能添加的,请考虑使用xuejian建议的BigQuery问题跟踪器打开错误并包含您的作业ID,以便我们进一步调查。