2
votes

I'm trying to populate a previously created table from an insert select job in PHP. Google documentation has a short paragraph that say the next:

"Run an asynchronous query, pass in the name of your existing table, and set writeDisposition=WRITE_APPEND."

Now I'm getting rows from bigquery using next sentences :

      // query request service
      $query = new Google_Service_Bigquery_QueryRequest();
      //armar query
      $selectQuery = "select source_year, year, month, day from publicdata:samples.natality LIMIT 100";
      if($whereQuery!=null && strlen($whereQuery)>0)$selectQuery = $selectQuery . " WHERE " . $whereQuery;
      //print_r(var_dump($selectQuery));
      $query->setQuery($selectQuery);
      $response = $service->jobs->query($project_id, $query);
      $jsonStr = "";
      if($response)if($response->getRows())$jsonStr = $response->getRows();
      print_r($jsonStr);

But I need to populate another table from the query result. Thank you for your advices. Bye


Thank you Pentium10 but I'm receiving the error message "Call to undefined method Google_Service_Bigquery_QueryRequest::setDestinationTable() " because I'm not using a job to execute the query.

I working with the next sentences to get the query result but Its didn't work:

  //query request service
  $query = new Google_Service_Bigquery_QueryRequest();

  //destination table
  $destinationTable = new Google_Service_Bigquery_TableReference();
  $destinationTable->setDatasetId($dataset);
  $destinationTable->setProjectId($project_id);
  $destinationTable->setTableId('ventastest');

  $query->setDestinationTable($destinationTable);
  $query->setWriteDisposition('WRITE_APPEND');

  //build query
  $selectQuery = "SELECT " . $fieldsQuery . " FROM " . $dataset . "." . $tableQuery;
  if($whereQuery!=null && strlen($whereQuery)>0)$selectQuery = $selectQuery . " WHERE " . $whereQuery;

  $query->setQuery($selectQuery);
  $response = $service->jobs->query($project_id, $query);
  $jsonStr = "";
  if($response)if($response->getRows())$jsonStr = $response->getRows();
  print_r($jsonStr);

Even if I attach to the service->job I receive the error message:

  $destinationTable = new Google_Service_Bigquery_TableReference();
  $destinationTable->setDatasetId($dataset);
  $destinationTable->setProjectId($project_id);
  $destinationTable->setTableId('ventastest');

  $service->jobs->setDestinationTable($destinationTable);
  $service->jobs->setWriteDisposition('WRITE_APPEND');

Thanks and bye!

1
You have a low rate. Important on SO, you have to mark accepted answers by using the tick on the left of the posted answer, below the voting. This will increase your rate. See how this works by visinting this link: meta.stackoverflow.com/questions/5234/…Pentium10

1 Answers

2
votes
$destinationTable = new Google_Service_Bigquery_TableReference();
$destinationTable->setDatasetId(DATASET_ID);
$destinationTable->setProjectId(PROJECT_ID);
$destinationTable->setTableId('name_of_the_table');

$queryConfig->setDestinationTable($destinationTable);
$queryConfig->setWriteDisposition('WRITE_APPEND');