Queries constructed using
standard SQL
can take advantage of parametriziation.
Refer to the table below for a guide on how parameter types are mapped to
their BigQuery equivalents.
| **PHP Type** | **BigQuery Data Type** |
|--------------------------------------------|--------------------------------------|
|
\DateTimeInterface |
DATETIME |
| {@see \Google\Cloud\BigQuery\Bytes} |
BYTES |
| {@see \Google\Cloud\BigQuery\Date} |
DATE |
| {@see \Google\Cloud\Int64} |
INT64 |
| {@see \Google\Cloud\BigQuery\Time} |
TIME |
| {@see \Google\Cloud\BigQuery\Timestamp} |
TIMESTAMP |
| Associative Array |
STRUCT |
| Non-Associative Array |
ARRAY |
|
float |
FLOAT64 |
|
int |
INT64 |
|
string |
STRING |
|
resource |
BYTES |
|
bool |
BOOL |
|
object (Outside types specified above) | **ERROR**
InvalidArgumentException |
Example:
$queryResults = $bigQuery->runQuery('SELECT commit FROM [bigquery-public-data:github_repos.commits] LIMIT 100');
$isComplete = $queryResults->isComplete();
while (!$isComplete) {
sleep(1); // let's wait for a moment...
$queryResults->reload(); // trigger a network request
$isComplete = $queryResults->isComplete(); // check the query's status
}
foreach ($queryResults->rows() as $row) {
echo $row['commit'];
}
Construct a query utilizing named parameters.
$query = 'SELECT commit FROM bigquery-public-data.github_repos.commits
' .
'WHERE author.date < @date AND message = @message LIMIT 100';
$queryResults = $bigQuery->runQuery($query, [
'parameters' => [
'date' => $bigQuery->timestamp(new \DateTime('1980-01-01 12:15:00Z')),
'message' => 'A commit message.'
]
]);
$isComplete = $queryResults->isComplete();
while (!$isComplete) {
sleep(1); // let's wait for a moment...
$queryResults->reload(); // trigger a network request
$isComplete = $queryResults->isComplete(); // check the query's status
}
foreach ($queryResults->rows() as $row) {
echo $row['commit'];
}
Construct a query utilizing positional parameters.
$query = 'SELECT commit FROM bigquery-public-data.github_repos.commits
WHERE message = ? LIMIT 100';
$queryResults = $bigQuery->runQuery($query, [
'parameters' => ['A commit message.']
]);
$isComplete = $queryResults->isComplete();
while (!$isComplete) {
sleep(1); // let's wait for a moment...
$queryResults->reload(); // trigger a network request
$isComplete = $queryResults->isComplete(); // check the query's status
}
foreach ($queryResults->rows() as $row) {
echo $row['commit'];
}