Bigquery PHP从查询结果创建表模式或创建表

时间:2014-09-17 15:25:51

标签: php google-bigquery schema google-api-php-client

我想从Query结果创建一个BigQuery表,或者在PHP中使用模式创建表。 我现在正在处理这些句子,但他们正在制作一个空的noschema表:

$postBody = array(  'tableReference' =>
    array(
        'projectId' => $project_id,
        'datasetId' => $dataset,
        'tableId' => 'josetest'
    )
);

$table = $service->tables->insert($project_id, $dataset, new Google_Service_Bigquery_Table($postBody));

我发现可能是python解决方案但是有人可以将它翻译成PHP吗? 它是:

"configuration": {
  "query": {
    "query": "select count(*) from foo.bar",
    "destinationTable": {
      "projectId": "my_project",
      "datasetId": "my_dataset",
      "tableId": "my_table"
    },
    "createDisposition": "CREATE_IF_NEEDED",
    "writeDisposition": "WRITE_APPEND",
  }
}

2 个答案:

答案 0 :(得分:4)

  1. 最简单的方法是使用Google APIs Client Library for PHP

  2. 请参阅this post如何实例化Google_Client对象并进行身份验证

  3. 来自我们自己代码的几个类的一个部分。

  4. /**
     * @param Google_Client $client 
     * @param string $project_id
     * @param string $dataset_id
     * @throws Google_Service_Exception
     * @return Google_Service_Bigquery_Table
     */
    public function BQ_Tables_Insert($client, $project_id, $dataset_id) {
        $bq = new Google_Service_Bigquery($client);
        $table_reference = new Google_Service_Bigquery_TableReference();
        $table_reference->setProjectId($project_id);
        $table_reference->setDatasetId($dataset_id);
        $table_reference->setTableId(static::tableId());
        $schema = new Google_Service_Bigquery_TableSchema();
        $schema->setFields(static::fields());
        $table = new Google_Service_Bigquery_Table();
        $table->setTableReference($table_reference);
        $table->setSchema($schema);
    
        try {
            return $bq->tables->insert($project_id, $dataset_id, $table);
        } catch (Google_Service_Exception $e) {
            $this->setErrors($e->getErrors())->setErrorMessage($e->getMessage());
            throw $e;
        }
    }
    

    其中static::tableId()是表的名称,static::fields()是表的数组表示

    /**
     * @see https://developers.google.com/bigquery/docs/reference/v2/tables/insert
     */
    public static function fields() {
        return array(
            array('name' => 'user_id', 'type' => 'integer', 'mode' => 'required'),
            array('name' => 'order_id', 'type' => 'integer', 'mode' => 'required'),
            array('name' => 'status', 'type' => 'integer', 'mode' => 'nullable'),
            array('name' => 'timestamp', 'type' => 'timestamp', 'mode' => 'nullable')
        );
    }
    

答案 1 :(得分:2)

非常感谢,以前的答案解决了mi问题。

 $fields = array(
        array('name' => 'user_id', 'type' => 'integer', 'mode' => 'required'),
        array('name' => 'order_id', 'type' => 'integer', 'mode' => 'required'),
        array('name' => 'status', 'type' => 'integer', 'mode' => 'nullable'),
        array('name' => 'timestamp', 'type' => 'timestamp', 'mode' => 'nullable')
    );


    //$bq = $service
    $table_reference = new Google_Service_Bigquery_TableReference();
    $table_reference->setProjectId($project_id);
    $table_reference->setDatasetId($dataset);
    $table_reference->setTableId("testsales");
    $schema = new Google_Service_Bigquery_TableSchema();
    $schema->setFields($fields);
    $table = new Google_Service_Bigquery_Table();
    $table->setTableReference($table_reference);
    $table->setSchema($schema);

    try {
        return $service->tables->insert($project_id, $dataset, $table);
    } catch (Google_Service_Exception $e) {
        $this->setErrors($e->getErrors())->setErrorMessage($e->getMessage());
        throw $e;
    }

这创建了一个带有架构的Bigquery表。 再见!