无法导出 Big Query 表

Posted

技术标签:

【中文标题】无法导出 Big Query 表【英文标题】:Not being able to export a Big Query table 【发布时间】:2018-05-24 12:48:45 【问题描述】:

我正在尝试使用 NEWLINE_DELIMITED_JSON 作为目标格式将 Big Query 表导出到云存储中,但我不断收到以下错误: 错误运行作业:无法对嵌套架构执行操作

如果您选择 json 格式,我知道 Big Query 允许导出嵌套表(正如 documentation 和此 question 中所述),所以我不明白我为什么会收到此错误... 我正在使用 php SDK,这是我一直在使用的代码:

extract_table($projectId, $datasetId, $tableId, $bucketName, $objectName);


function extract_table($projectId, $datasetId, $tableId, $bucketName, $objectName, $format = 'NEWLINE_DELIMITED_JSON')
    $bigQuery = new BigQueryClient(['projectId' => $projectId,]);
    $dataset = $bigQuery->dataset($datasetId);
    $table = $dataset->table($tableId);
    // load the storage object
    $storage = new StorageClient([
      'projectId' => $projectId,
    ]);
    $destinationObject = $storage->bucket($bucketName)->object($objectName);
    // create the extract job
    $options = ['destinationFormat' => $format];
    $extractConfig = $table->extract($destinationObject, $options);

    $job = $table->runJob($extractConfig);
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    try 
       $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);
           
        );
     catch (Exception $e) 
    
    // 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 extracted successfully' . PHP_EOL);
    

【问题讨论】:

【参考方案1】:

您的问题是您使用了错误的options 字段配置。在PHP documentation on the Table.extract method 之后,您将看到extract 方法中的options 字段必须是configuration 对象,例如BigQuery documentation 中的对象。

您将options 对象定义为:

$options = ['destinationFormat' => $format];

您应该使用以下格式:

$options = ['configuration' => ['extract' => ['destinationFormat' => $format]]];

这是因为destinationFormat 字段嵌套在configurationextract 下。

【讨论】:

您好 Dsesto,感谢您的回复。我将立即更改代码,如果它有效,我会告诉你。再次感谢。 成功了!非常感谢!这很奇怪,因为我使用了您可以在 php docs samples 官方 github 页面 (github.com/GoogleCloudPlatform/php-docs-samples/blob/master/…) 上找到的代码。 这对我来说不合适。如果这确实是一个错误,我将确保在内部报告并更正 GitHub 示例。感谢您指出!

以上是关于无法导出 Big Query 表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?

将 Firebase Analytics 链接到 Big Query 时,何时导出数据?

Python GAE - 如何以编程方式将数据从备份导出到 Big Query?

如何通过GCS将GA360表从Big query导出到雪花作为json文件而不丢失数据?

如何以 CSV 表格格式将原始数据源从 Google Big Query 导出到 R 服务器?

Google Big Query 的奇怪活动