Criar um aplicativo simples com a API

Neste tutorial, você aprenderá a desenvolver um simples aplicativo de linha de comando (em C#, Go, Java, Node.js, PHP, Python ou Ruby) com as bibliotecas de cliente do Google BigQuery. O aplicativo consulta o conjunto de dados públicos do Stack Overflow e mostra os resultados.

Objetivos

Você pode usar as bibliotecas de cliente do BigQuery para:

  • Autenticar a BigQuery API.
  • Executar uma consulta.
  • Ler os resultados da consulta

Custos

A amostra de código contido neste tutorial executa uma consulta que processa cerca de 500 MB de dados. Consulte a referência de preços para ver mais detalhes sobre o preço do BigQuery.

Antes de começar

  1. Uma compreensão dos conceitos e terminologia do BigQuery.

    Acesse o Guia de início rápido do BigQuery para se familiarizar com as tarefas comuns do BigQuery.

  2. Um projeto com a BigQuery API ativada.

    Os aplicativos que usam o BigQuery precisam ser associados a um projeto do Console do Google Cloud Platform com a BigQuery API ativada.

  3. Um ambiente de desenvolvimento local.

    C#

    Para configurar seu ambiente de desenvolvimento local, consulte Como configurar um ambiente de desenvolvimento .NET.

    Go

    Certifique-se de ter uma versão recente do Go instalada.

    Java

    Certifique-se de ter uma versão recente do Maven ou Gradle instalada.

    Node.js

    Para configurar seu ambiente de desenvolvimento local, consulte Como configurar um ambiente de desenvolvimento do Node.js.

    PHP

    Certifique-se de ter uma versão recente do PHP e do Composer instaladas.

    Python

    Para configurar seu ambiente de desenvolvimento local, consulte Como configurar um ambiente de desenvolvimento Python.

    Ruby

    Certifique-se de ter uma versão recente do Ruby e do Bundler instaladas.

Fazer o download do código de amostra

Faça o download do código para o aplicativo de linha de comando da amostra e acesse o diretório dele:

  1. Faça uma cópia do repositório das amostras em sua máquina local.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

    Go

    go get -u -d github.com/GoogleCloudPlatform/golang-samples/bigquery/simpleapp

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

    Node.js

    git clone https://github.com/googleapis/nodejs-bigquery.git

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

    PHP

    git clone https://github.com/GoogleCloudPlatform/php-docs-samples

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples

    Outra opção é fazer o download da amostra como um arquivo zip e extraí-lo.

  2. Acesse o diretório que contém o código de amostra:

    C#

    Clique duas vezes em dotnet-docs-samples\bigquery\api\BigquerySample.sln para abrir o Visual Studio 2017.

    Go

    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/bigquery/simpleapp

    Java

    cd java-docs-samples/bigquery/cloud-client

    Node.js

    cd nodejs-bigquery/samples

    PHP

    cd php-docs-samples/bigquery/stackoverflow

    Python

    cd python-docs-samples/bigquery/cloud-client

    Ruby

    cd ruby-docs-samples/bigquery

Configurar dependências do aplicativo

Este exemplo usa as bibliotecas de cliente do Google Cloud para fazer chamadas para a BigQuery API.

C#

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O arquivo de solução para a amostra inclui as dependências necessárias usando o NuGet.

Importe as bibliotecas do BigQuery:

using System;
using Google.Cloud.BigQuery.V2;

Go

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O comando go get usado para fazer o download da amostra também serve para as dependências necessárias.

Importe as bibliotecas do BigQuery:

import (
	"fmt"
	"io"
	"log"
	"os"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"

	"golang.org/x/net/context"
)

Java

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O pom.xml define dependências que serão baixadas quando você criar a amostra via Maven.

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-bigquery</artifactId>
  <version>1.22.0</version>
</dependency>

Se estiver usando o Gradle, execute gradle init para converter automaticamente de pom.xml para um arquivo de versão do Gradle.

Importe as bibliotecas do BigQuery:

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryResponse;
import com.google.cloud.bigquery.TableResult;
import java.util.UUID;

Node.js

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O arquivo package.json define as dependências para a amostra.

{
  "name": "nodejs-docs-samples-bigquery",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": "googleapis/nodejs-bigquery",
  "engines": {
    "node": ">=4"
  },
  "scripts": {
    "test": "repo-tools test run --cmd npm -- run cover",
    "ava": "ava -T 3m --verbose test/*.test.js system-test/*.test.js",
    "cover": "nyc --reporter=lcov --cache ava -T 3m --verbose test/*.test.js system-test/*.test.js && nyc report"
  },
  "dependencies": {
    "@google-cloud/bigquery": "1.2.0",
    "@google-cloud/storage": "1.5.1",
    "yargs": "10.0.3"
  },
  "devDependencies": {
    "@google-cloud/nodejs-repo-tools": "2.1.3",
    "ava": "0.24.0",
    "nyc": "11.3.0",
    "proxyquire": "1.8.0",
    "sinon": "4.1.3",
    "uuid": "3.1.0"
  }
}

Instale as dependências:

npm install

Importe as bibliotecas do BigQuery:

// Imports the Google Cloud client library
const BigQuery = require('@google-cloud/bigquery');

PHP

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O arquivo composer.json define as dependências para a amostra.

{
    "require": {
        "google/cloud-bigquery": "^1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.8"
    }
}

Instale as dependências:

composer install

Importe as bibliotecas do BigQuery:

use Google\Cloud\BigQuery\BigQueryClient;

Python

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

Instalar as dependências com pip.

pip install -r requirements.txt

As dependências usadas nesta amostra são definidas no arquivo requirements.txt.

google-cloud-bigquery==0.31.0
google-auth-oauthlib==0.2.0
pytz==2018.3
Os usuários do Conda podem preferir usar o pacote do BigQuery para Conda com suporte da comunidade no canal conda-forge.

Importe as bibliotecas do BigQuery:

from google.cloud import bigquery

Ruby

Para saber mais sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

O arquivo Gemfile define as dependências para a amostra.

# Copyright 2016 Google, Inc
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

source "https://rubygems.org"

gem "google-cloud-bigquery"

group :test do
  gem "rspec"
  gem "rspec-retry"
  gem "google-cloud-storage"
end

Instale as dependências:

bundle install

Importe as bibliotecas do BigQuery:

require "google/cloud/bigquery"

Criar um objeto de serviço do BigQuery

Use as credenciais padrão do aplicativo para autenticar e fazer solicitações autorizadas para o BigQuery.

C#

Use a função BigQueryClient.Create() para criar o objeto de serviço do BigQuery.

// By default, the Google.Cloud.BigQuery.V2 library client will authenticate
// using the service account file (created in the Google Developers
// Console) specified by the GOOGLE_APPLICATION_CREDENTIALS
// environment variable. If you are running on
// a Google Compute Engine VM, authentication is completely
// automatic.
var client = BigQueryClient.Create(projectId);

Go

Use a função bigquery.NewClient() para criar o objeto de serviço do BigQuery.

ctx := context.Background()

client, err := bigquery.NewClient(ctx, proj)
if err != nil {
	return nil, err
}

Java

Use a função BigQueryOptions.getDefaultInstance() para usar as opções de autenticação padrão. Use a função BigQueryOptions.getService() para criar o objeto de serviço do BigQuery.

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

Node.js

Instancie a classe BigQuery para criar o objeto de serviço do BigQuery.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";

// Creates a client
const bigquery = new BigQuery({
  projectId: projectId,
});

PHP

Instancie a classe BigQueryClient para criar o objeto de serviço do BigQuery.

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

Python

Instancie a classe bigquery.Client para criar o objeto de serviço do BigQuery.

client = bigquery.Client()

Ruby

Use a função Google::Cloud::Bigquery.new para criar o objeto de serviço do BigQuery.

# This uses Application Default Credentials to authenticate.
# @see https://cloud.google.com/bigquery/docs/authentication/getting-started
bigquery = Google::Cloud::Bigquery.new

Consulte o guia de autenticação para conhecer outras formas de autenticação na BigQuery API.

Execução de consultas

Consulte o conjunto de dados público do Stack Overflow para encontrar as perguntas mais visualizadas marcadas com o google-bigquery.

SELECT
  CONCAT(
    'https://stackoverflow.com/questions/',
    CAST(id as STRING)) as url,
  view_count
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE tags like '%google-bigquery%'
ORDER BY view_count DESC
LIMIT 10

Esta consulta usa sintaxe SQL padrão, que é descrita no guia de referência da consulta. As bibliotecas de cliente são pré-determinadas para a sintaxe SQL padrão. Consulte Como ativar o SQL padrão para alterar dialetos de SQL.

Como executar a consulta

Faça a consulta usando o cliente autenticado do BigQuery.

C#

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

string query = @"SELECT
    CONCAT(
        'https://stackoverflow.com/questions/',
        CAST(id as STRING)) as url, view_count
    FROM `bigquery-public-data.stackoverflow.posts_questions`
    WHERE tags like '%google-bigquery%'
    ORDER BY view_count DESC
    LIMIT 10";
var result = client.ExecuteQuery(query, parameters: null);

Go

Use a função bigquery.Query() para definir uma consulta e a função Query.Read() para enviar a consulta e receber os resultados.

query := client.Query(
	`SELECT
		CONCAT(
			'https://stackoverflow.com/questions/',
			CAST(id as STRING)) as url,
		view_count
	FROM ` + "`bigquery-public-data.stackoverflow.posts_questions`" + `
	WHERE tags like '%google-bigquery%'
	ORDER BY view_count DESC
	LIMIT 10;`)
return query.Read(ctx)

Java

Defina a consulta com uma instância do QueryJobConfiguration. Inicie o job de consulta com o método BigQuery.create().

QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(
      "SELECT "
          + "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, "
          + "view_count "
          + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
          + "WHERE tags like '%google-bigquery%' "
          + "ORDER BY favorite_count DESC LIMIT 10")
        // Use standard SQL syntax for queries.
        // See: https://cloud.google.com/bigquery/sql-reference/
        .setUseLegacySql(false)
        .build();

// Create a job ID so that we can safely retry.
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

// Wait for the query to complete.
queryJob = queryJob.waitFor();

// Check for errors
if (queryJob == null) {
  throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
  // You can also look at queryJob.getStatus().getExecutionErrors() for all
  // errors, not just the latest one.
  throw new RuntimeException(queryJob.getStatus().getError().toString());
}

Node.js

Use o método BigQuery.query() para iniciar a consulta.

// The SQL query to run
const sqlQuery = `SELECT
  CONCAT(
    'https://stackoverflow.com/questions/',
    CAST(id as STRING)) as url,
  view_count
  FROM \`bigquery-public-data.stackoverflow.posts_questions\`
  WHERE tags like '%google-bigquery%'
  ORDER BY view_count DESC
  LIMIT 10`;

// Query options list: https://cloud.google.com/bigquery/docs/reference/v2/jobs/query
const options = {
  query: sqlQuery,
  useLegacySql: false, // Use standard SQL syntax for queries.
};

// Runs the query
bigquery
  .query(options)
  .then(results => {
    const rows = results[0];
    printResult(rows);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

Crie uma configuração de consulta e use o método BigQueryClient.startQuery() para iniciar a consulta.

$query = <<<ENDSQL
SELECT
  CONCAT(
    'https://stackoverflow.com/questions/',
    CAST(id as STRING)) as url,
  view_count
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE tags like '%google-bigquery%'
ORDER BY view_count DESC
LIMIT 10;
ENDSQL;
$queryJobConfig = $bigQuery->query($query);
$queryResults = $bigQuery->runQuery($queryJobConfig);

Python

Use o método Client.query() para iniciar a consulta.

query_job = client.query("""
    SELECT
      CONCAT(
        'https://stackoverflow.com/questions/',
        CAST(id as STRING)) as url,
      view_count
    FROM `bigquery-public-data.stackoverflow.posts_questions`
    WHERE tags like '%google-bigquery%'
    ORDER BY view_count DESC
    LIMIT 10""")

results = query_job.result()  # Waits for job to complete.

Ruby

Use a função Google::Cloud::Bigquery::Project.query para iniciar uma consulta e aguarde os resultados.

sql     = "SELECT " +
          "CONCAT('https://stackoverflow.com/questions/', " +
          "       CAST(id as STRING)) as url, view_count " +
          "FROM `bigquery-public-data.stackoverflow.posts_questions` " +
          "WHERE tags like '%google-bigquery%' " +
          "ORDER BY view_count DESC LIMIT 10"
results = bigquery.query sql

Para ver mais exemplos de como executar consultas do BigQuery, acesse:

Como exibir do resultado da consulta

Aguarde até que a consulta seja concluída e exiba os resultados.

C#

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

Console.Write("\nQuery Results:\n------------\n");
foreach (var row in result)
{
    Console.WriteLine($"{row["url"]}: {row["view_count"]} views");
}

Go

Use a função RowIterator.Next() para carregar cada linha em um ponteiro para estrutura.

type StackOverflowRow struct {
	URL       string `bigquery:"url"`
	ViewCount int64  `bigquery:"view_count"`
}

// printResults prints results from a query to the Stack Overflow public dataset.
func printResults(w io.Writer, iter *bigquery.RowIterator) error {
	for {
		var row StackOverflowRow
		err := iter.Next(&row)
		if err == iterator.Done {
			return nil
		}
		if err != nil {
			return err
		}

		fmt.Fprintf(w, "url: %s views: %d\n", row.URL, row.ViewCount)
	}
}

Java

Itere o QueryResponse para receber todas as linhas nos resultados. O iterador administra automaticamente a paginação. Cada FieldList expõe as colunas por índices numéricos ou nome de coluna.

// Get the results.
QueryResponse response = bigquery.getQueryResults(jobId);

TableResult result = queryJob.getQueryResults();

// Print all pages of the results.
for (FieldValueList row : result.iterateAll()) {
  String url = row.get("url").getStringValue();
  long viewCount = row.get("view_count").getLongValue();
  System.out.printf("url: %s views: %d%n", url, viewCount);
}

Node.js

Os resultados da consulta são retornados como uma lista de linhas, em que cada uma é um dicionário.

console.log('Query Results:');
rows.forEach(function(row) {
  let url = row['url'];
  let viewCount = row['view_count'];
  console.log(`url: ${url}, ${viewCount} views`);
});

PHP

Chame o método Job.queryResults() para aguardar o encerramento da consulta. Cada linha nos resultados da consulta é uma matriz associativa.

if ($queryResults->isComplete()) {
    $i = 0;
    $rows = $queryResults->rows();
    foreach ($rows as $row) {
        printf('--- Row %s ---' . PHP_EOL, ++$i);
        printf('url: %s, %s views' . PHP_EOL, $row['url'], $row['view_count']);
    }
    printf('Found %s row(s)' . PHP_EOL, $i);
} else {
    throw new Exception('The query failed to complete');
}

Python

Itere o RowIterator para receber todas as linhas nos resultados. O iterador administra automaticamente a paginação. Cada linha expõe as colunas por índice numérico, nome da coluna ou como atributos do Python.

for row in results:
    print("{} : {} views".format(row.url, row.view_count))

Ruby

A classe Google::Cloud::Bigquery::Data expõe cada linha como um hash.

results.each do |row|
  puts "#{row[:url]}: #{row[:view_count]} views"
end

Saiba mais sobre como trabalhar com linhas de dados no BigQuery:

Código-fonte completo

Veja o código-fonte completo para a amostra.

C#

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

using System;
using Google.Cloud.BigQuery.V2;

namespace GoogleCloudSamples
{
    public class BigquerySample
    {
        const string usage = @"Usage:
BigquerySample <project_id>";

        private static void Main(string[] args)
        {
            string projectId = null;
            if (args.Length == 0)
            {
                Console.WriteLine(usage);
            }
            else
            {
                projectId = args[0];
                // By default, the Google.Cloud.BigQuery.V2 library client will authenticate
                // using the service account file (created in the Google Developers
                // Console) specified by the GOOGLE_APPLICATION_CREDENTIALS
                // environment variable. If you are running on
                // a Google Compute Engine VM, authentication is completely
                // automatic.
                var client = BigQueryClient.Create(projectId);
                string query = @"SELECT
                    CONCAT(
                        'https://stackoverflow.com/questions/',
                        CAST(id as STRING)) as url, view_count
                    FROM `bigquery-public-data.stackoverflow.posts_questions`
                    WHERE tags like '%google-bigquery%'
                    ORDER BY view_count DESC
                    LIMIT 10";
                var result = client.ExecuteQuery(query, parameters: null);
                Console.Write("\nQuery Results:\n------------\n");
                foreach (var row in result)
                {
                    Console.WriteLine($"{row["url"]}: {row["view_count"]} views");
                }
            }
            Console.WriteLine("\nPress any key...");
            Console.ReadKey();
        }
    }
}

Go

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

import (
	"fmt"
	"io"
	"log"
	"os"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"

	"golang.org/x/net/context"
)

func main() {
	proj := os.Getenv("GOOGLE_CLOUD_PROJECT")
	if proj == "" {
		fmt.Println("GOOGLE_CLOUD_PROJECT environment variable must be set.")
		os.Exit(1)
	}

	rows, err := query(proj)
	if err != nil {
		log.Fatal(err)
	}
	if err := printResults(os.Stdout, rows); err != nil {
		log.Fatal(err)
	}
}

// query returns a slice of the results of a query.
func query(proj string) (*bigquery.RowIterator, error) {
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, proj)
	if err != nil {
		return nil, err
	}

	query := client.Query(
		`SELECT
			CONCAT(
				'https://stackoverflow.com/questions/',
				CAST(id as STRING)) as url,
			view_count
		FROM ` + "`bigquery-public-data.stackoverflow.posts_questions`" + `
		WHERE tags like '%google-bigquery%'
		ORDER BY view_count DESC
		LIMIT 10;`)
	return query.Read(ctx)
}

type StackOverflowRow struct {
	URL       string `bigquery:"url"`
	ViewCount int64  `bigquery:"view_count"`
}

// printResults prints results from a query to the Stack Overflow public dataset.
func printResults(w io.Writer, iter *bigquery.RowIterator) error {
	for {
		var row StackOverflowRow
		err := iter.Next(&row)
		if err == iterator.Done {
			return nil
		}
		if err != nil {
			return err
		}

		fmt.Fprintf(w, "url: %s views: %d\n", row.URL, row.ViewCount)
	}
}

Java

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FieldValueList;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryResponse;
import com.google.cloud.bigquery.TableResult;
import java.util.UUID;

public class SimpleApp {
  public static void main(String... args) throws Exception {
    BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    QueryJobConfiguration queryConfig =
        QueryJobConfiguration.newBuilder(
          "SELECT "
              + "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, "
              + "view_count "
              + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
              + "WHERE tags like '%google-bigquery%' "
              + "ORDER BY favorite_count DESC LIMIT 10")
            // Use standard SQL syntax for queries.
            // See: https://cloud.google.com/bigquery/sql-reference/
            .setUseLegacySql(false)
            .build();

    // Create a job ID so that we can safely retry.
    JobId jobId = JobId.of(UUID.randomUUID().toString());
    Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

    // Wait for the query to complete.
    queryJob = queryJob.waitFor();

    // Check for errors
    if (queryJob == null) {
      throw new RuntimeException("Job no longer exists");
    } else if (queryJob.getStatus().getError() != null) {
      // You can also look at queryJob.getStatus().getExecutionErrors() for all
      // errors, not just the latest one.
      throw new RuntimeException(queryJob.getStatus().getError().toString());
    }

    // Get the results.
    QueryResponse response = bigquery.getQueryResults(jobId);

    TableResult result = queryJob.getQueryResults();

    // Print all pages of the results.
    for (FieldValueList row : result.iterateAll()) {
      String url = row.get("url").getStringValue();
      long viewCount = row.get("view_count").getLongValue();
      System.out.printf("url: %s views: %d%n", url, viewCount);
    }
  }
}

Node.js

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

function printResult(rows) {
  console.log('Query Results:');
  rows.forEach(function(row) {
    let url = row['url'];
    let viewCount = row['view_count'];
    console.log(`url: ${url}, ${viewCount} views`);
  });
}

function queryStackOverflow(projectId) {
  // Imports the Google Cloud client library
  const BigQuery = require('@google-cloud/bigquery');

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const projectId = "your-project-id";

  // Creates a client
  const bigquery = new BigQuery({
    projectId: projectId,
  });

  // The SQL query to run
  const sqlQuery = `SELECT
    CONCAT(
      'https://stackoverflow.com/questions/',
      CAST(id as STRING)) as url,
    view_count
    FROM \`bigquery-public-data.stackoverflow.posts_questions\`
    WHERE tags like '%google-bigquery%'
    ORDER BY view_count DESC
    LIMIT 10`;

  // Query options list: https://cloud.google.com/bigquery/docs/reference/v2/jobs/query
  const options = {
    query: sqlQuery,
    useLegacySql: false, // Use standard SQL syntax for queries.
  };

  // Runs the query
  bigquery
    .query(options)
    .then(results => {
      const rows = results[0];
      printResult(rows);
    })
    .catch(err => {
      console.error('ERROR:', err);
    });
}

PHP

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\BigQuery\BigQueryClient;

// get the project ID as the first argument
if (2 != count($argv)) {
    die("Usage: php stackoverflow.php YOUR_PROJECT_ID\n");
}

$projectId = $argv[1];

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$query = <<<ENDSQL
SELECT
  CONCAT(
    'https://stackoverflow.com/questions/',
    CAST(id as STRING)) as url,
  view_count
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE tags like '%google-bigquery%'
ORDER BY view_count DESC
LIMIT 10;
ENDSQL;
$queryJobConfig = $bigQuery->query($query);
$queryResults = $bigQuery->runQuery($queryJobConfig);

if ($queryResults->isComplete()) {
    $i = 0;
    $rows = $queryResults->rows();
    foreach ($rows as $row) {
        printf('--- Row %s ---' . PHP_EOL, ++$i);
        printf('url: %s, %s views' . PHP_EOL, $row['url'], $row['view_count']);
    }
    printf('Found %s row(s)' . PHP_EOL, $i);
} else {
    throw new Exception('The query failed to complete');
}

Python

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

from google.cloud import bigquery

def query_stackoverflow():
    client = bigquery.Client()
    query_job = client.query("""
        SELECT
          CONCAT(
            'https://stackoverflow.com/questions/',
            CAST(id as STRING)) as url,
          view_count
        FROM `bigquery-public-data.stackoverflow.posts_questions`
        WHERE tags like '%google-bigquery%'
        ORDER BY view_count DESC
        LIMIT 10""")

    results = query_job.result()  # Waits for job to complete.

    for row in results:
        print("{} : {} views".format(row.url, row.view_count))

if __name__ == '__main__':
    query_stackoverflow()

Ruby

Para mais informações sobre como instalar e criar um cliente do BigQuery, consulte Bibliotecas de cliente do BigQuery.

require "google/cloud/bigquery"

# This uses Application Default Credentials to authenticate.
# @see https://cloud.google.com/bigquery/docs/authentication/getting-started
bigquery = Google::Cloud::Bigquery.new

sql     = "SELECT " +
          "CONCAT('https://stackoverflow.com/questions/', " +
          "       CAST(id as STRING)) as url, view_count " +
          "FROM `bigquery-public-data.stackoverflow.posts_questions` " +
          "WHERE tags like '%google-bigquery%' " +
          "ORDER BY view_count DESC LIMIT 10"
results = bigquery.query sql

results.each do |row|
  puts "#{row[:url]}: #{row[:view_count]} views"
end

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.