Como carregar dados Parquet do Cloud Storage

Nesta página, apresentamos uma visão geral de como fazer o carregamento de dados Parquet do Cloud Storage no BigQuery.

Parquet é um formato de dados orientado por colunas de código aberto muito usado no ecossistema do Apache Hadoop.

Os dados Parquet podem ser carregados pelo Cloud Storage em uma nova tabela ou partição. Também é possível anexá-los a uma tabela ou partição atual, bem como substituí-las. Quando os dados são carregados no BigQuery, eles são convertidos no formato de colunas do Capacitor, o formato de armazenamento do BigQuery.

Quando você carrega dados do Cloud Storage em uma tabela do BigQuery, o conjunto de dados que contém a tabela precisa estar na mesma região ou multirregião que o intervalo do Cloud Storage.

Para informações sobre como carregar dados Parquet de um arquivo local, consulte Como carregar dados no BigQuery de uma fonte de dados local.

Esquemas Parquet

Quando você carrega arquivos Parquet no BigQuery, o esquema da tabela é recuperado automaticamente pelos dados de origem autodescritivos. Quando o BigQuery recupera o esquema dos dados de origem, o último arquivo ordenado pela ordem alfabética é usado.

Por exemplo, você tem os seguintes arquivos Parquet no Cloud Storage:

gs://mybucket/00/
  a.parquet
  z.parquet
gs://mybucket/01/
  b.parquet

Este comando carrega todos os arquivos em um único comando da CLI, como uma lista separada por vírgulas, e o esquema é derivado de mybucket/01/b.parquet:

bq --location=US load --source_format=PARQUET [DATASET].[TABLE] "gs://mybucket/00/*.parquet","gs://mybucket/01/*.parquet"

Quando você carrega vários arquivos Parquet com esquemas diferentes, as colunas idênticas especificadas em vários esquemas precisam ter o mesmo modo em cada definição de esquema.

Quando o BigQuery detecta o esquema, alguns tipos de dados Parquet são convertidos em tipos de dados do BigQuery para torná-los compatíveis com a sintaxe SQL do BigQuery. Para mais informações, consulte Conversões Parquet.

Compactação do Parquet

Os arquivos Parquet compactados não são compatíveis, ao contrário dos blocos de dados compactados. O BigQuery é compatível com os codecs Snappy, GZip e LZO_1X para blocos de dados compactados em arquivos Parquet.

Como carregar dados Parquet em uma nova tabela

Para carregar dados Parquet do Cloud Storage em uma nova tabela do BigQuery ou anexá-los a uma tabela existente, faça o seguinte:

Console

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar a IU da Web do BigQuery

  2. No painel de navegação, na seção Recursos, expanda seu projeto e selecione um conjunto de dados.

  3. No lado direito da janela, no painel de detalhes, clique em Criar tabela. O processo de carregamento de dados é igual ao de criação de uma tabela vazia.

    Criar tabela

  4. Siga estas etapas na página Criar tabela, na seção Origem:

    • Em Criar tabela de, selecione o tipo de fonte desejada.

      Criar origem da tabela

    • No campo de origem, procure o arquivo/intervalo do Cloud Storage ou insira o URI do Cloud Storage. Não é possível incluir vários URIs na IU da Web do BigQuery, mas caracteres curinga são aceitos. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.

      Selecionar arquivo

    • Em Formato do arquivo, selecione Parquet.

  5. Na página Criar tabela, na seção Destino, faça o seguinte:

    • Em Nome do conjunto de dados, escolha o conjunto apropriado.

      Ver conjunto de dados

    • No campo Nome da tabela, insira o nome da tabela que você está criando no BigQuery.

    • Verifique se o Tipo de tabela está definido como Tabela nativa.

  6. Na seção Esquema, nenhuma ação é necessária. O esquema é descrito automaticamente nos arquivos Parquet.

  7. Selecione itens aplicáveis na seção Opções avançadas e clique em Criar tabela.

IU clássica

  • Acesse a IU da Web do BigQuery.
    Acessar a IU da Web do BigQuery

  • No painel de navegação, passe o cursor sobre um conjunto de dados, clique no ícone de seta para baixo imagem do ícone de seta para baixo e depois em Criar nova tabela. O processo de carregamento de dados é igual ao de criação de uma tabela vazia.

  • Na página Criar tabela, na seção Dados de origem:

    • Em Local, selecione Cloud Storage e, no campo de origem, insira o URI do Cloud Storage. Não é possível incluir vários URIs na IU da Web do BigQuery, mas caracteres curinga são aceitos. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.
    • Em Formato do arquivo, selecione Parquet.
  • Na página Criar tabela, na seção Tabela de destino:

    • Em Nome da tabela, escolha o conjunto de dados apropriado e, no campo de nome da tabela, insira um nome para a tabela que você está criando no BigQuery.
    • Verifique se o Tipo de tabela está definido como Tabela nativa.
  • Na seção Esquema, nenhuma ação é necessária. O esquema é descrito automaticamente nos arquivos Parquet.

  • Clique em Criar tabela.

  • Linha de comando

    Use o comando bq load, especifique PARQUET como o source_format e inclua um URI do Cloud Storage. É possível adicionar um URI único, uma lista de URIs separados por vírgulas ou um URI contendo um caractere curinga.

    Forneça a sinalização --location e defina o valor do local.

    bq --location=[LOCATION] load --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]
    

    em que:

    • [LOCATION] é o local. A sinalização --location é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, poderá definir o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
    • [FORMAT] é PARQUET;
    • [DATASET] é um conjunto de dados existente;
    • [TABLE] é o nome da tabela em que você está carregando dados;
    • [PATH_TO_SOURCE] é um URI do Cloud Storage totalmente qualificado ou uma lista de URIs separados por vírgulas. Caracteres curinga também são aceitos.

    Exemplos:

    • O comando a seguir carrega dados de gs://mybucket/mydata.parquet em uma tabela chamada mytable em mydataset. mybucket e mydataset foram criados na multirregião US.

      bq --location=US load --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      
    • O comando a seguir carrega dados de vários arquivos em gs://mybucket/ em uma tabela chamada mytable no mydataset. O URI do Cloud Storage usa um caractere curinga: mybucket e mydataset foram criados na multirregião US.

      bq --location=US load --source_format=PARQUET mydataset.mytable gs://mybucket/mydata*.parquet
      
    • O comando a seguir carrega dados de vários arquivos em gs://mybucket/ em uma tabela chamada mytable no mydataset. O comando inclui uma lista separada por vírgula de URIs do Cloud Storage com caracteres curingas. mybucket e mydataset foram criados na região asia-northeast1.

      bq --location=asia-northeast1 load --autodetect --source_format=PARQUET mydataset.mytable "gs://mybucket/00/*.parquet","gs://mybucket/01/*.parquet"
      

    API

    Defina as propriedades a seguir para carregar dados Parquet usando a API.

    1. Crie um job de carregamento que aponte para os dados de origem no Cloud Storage.

    2. Especifique o local na propriedade location da seção jobReference do recurso de job.

    3. Os URIs de origem precisam ser totalmente qualificados no formato gs://[BUCKET]/[OBJECT]. Cada URI pode conter um caractere curinga "*".

    4. Para especificar o formato de dados Parquet, defina a propriedade configuration.load.sourceFormat como PARQUET.

    5. Para verificar o status do job, chame jobs.get([JOB_ID]*), em que [JOB_ID] é o código do job retornado pela solicitação inicial.

      • Se o valor status.state = DONE for exibido, o job foi concluído com sucesso.
      • Se a propriedade status.errorResult estiver presente, houve falha na solicitação, e esse objeto incluirá informações que descrevem o erro. Quando há falha na solicitação, nenhuma tabela é criada e não são adicionados dados.
      • Se status.errorResult estiver ausente, o job foi concluído com sucesso, embora possa haver alguns erros não fatais, como problemas ao importar algumas linhas. Os erros não fatais são listados na propriedade status.errors do objeto de job retornado.

    Observações sobre a API:

    • Os jobs de carregamento são atômicos e consistentes. Se um deles falhar, nenhum dos dados estará disponível, e se um deles for bem-sucedido, todos os dados estarão disponíveis.

    • Como prática recomendada, gere um código exclusivo e o transmita como jobReference.jobId ao chamar jobs.insert() para a criação de um job de carregamento. Essa abordagem é mais resistente a falhas de rede porque o cliente pode pesquisar ou tentar novamente com o código do job conhecido.

    • A chamada jobs.insert() com um determinado código de job é idempotente, ou seja, é possível repeti-la quantas vezes quiser com o mesmo código e, no máximo, uma das operações será bem-sucedida.

    Go

    Antes de testar esta amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go (em inglês).

    // To run this sample, you will need to create (or reuse) a context and
    // an instance of the bigquery client.  For example:
    // import "cloud.google.com/go/bigquery"
    // ctx := context.Background()
    // client, err := bigquery.NewClient(ctx, "your-project-id")
    gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.parquet")
    gcsRef.SourceFormat = bigquery.Parquet
    gcsRef.AutoDetect = true
    loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
    
    job, err := loader.Run(ctx)
    if err != nil {
    	return err
    }
    status, err := job.Wait(ctx)
    if err != nil {
    	return err
    }
    
    if status.Err() != nil {
    	return fmt.Errorf("Job completed with error: %v", status.Err())
    }

    Java

    Antes de testar esta amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet";
    TableId tableId = TableId.of(datasetName, "us_states");
    LoadJobConfiguration configuration =
            LoadJobConfiguration.builder(tableId, sourceUri)
                    .setFormatOptions(FormatOptions.parquet())
                    .build();
    // Load the table
    Job loadJob = bigquery.create(JobInfo.of(configuration));
    loadJob = loadJob.waitFor();
    // Check the table
    StandardTableDefinition destinationTable = bigquery.getTable(tableId).getDefinition();
    System.out.println("State: " + loadJob.getStatus().getState());
    System.out.printf("Loaded %d rows.\n", destinationTable.getNumRows());

    Node.js

    Antes de testar esta amostra, siga as instruções de configuração do Node.js em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Node.js.

    // Import the Google Cloud client libraries
    const {BigQuery} = require('@google-cloud/bigquery');
    const {Storage} = require('@google-cloud/storage');
    
    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const datasetId = "my_dataset";
    // const tableId = "my_table";
    
    /**
     * This sample loads the Parquet file at
     * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.parquet
     *
     * TODO(developer): Replace the following lines with the path to your file.
     */
    const bucketName = 'cloud-samples-data';
    const filename = 'bigquery/us-states/us-states.parquet';
    
    async function loadTableGCSParquet() {
      // Imports a GCS file into a table with Parquet source format.
    
      // Instantiate clients
      const bigqueryClient = new BigQuery();
      const storageClient = new Storage();
    
      // Configure the load job. For full list of options, see:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
      const metadata = {
        sourceFormat: 'PARQUET',
        location: 'US',
      };
    
      // Load data from a Google Cloud Storage file into the table
      const [job] = await bigqueryClient
        .dataset(datasetId)
        .table(tableId)
        .load(storageClient.bucket(bucketName).file(filename), metadata);
    
      // load() waits for the job to finish
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }
    loadTableGCSParquet();

    PHP

    Antes de testar esta amostra, siga as instruções de configuração do PHP em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId  = 'The Google project ID';
    // $datasetId  = 'The BigQuery dataset ID';
    
    // instantiate the bigquery table service
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $table = $dataset->table('us_states');
    
    // create the import job
    $gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.parquet';
    $loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('PARQUET');
    $job = $table->runJob($loadConfig);
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $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);
        }
    });
    // 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 imported successfully' . PHP_EOL);
    }

    Python

    Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, veja a documentação de referência da API do BigQuery para Python.

    Use o método Client.load_table_from_uri () para iniciar um job de carregamento no Cloud Storage. Para usar Parquet, defina a propriedade LoadJobConfig.source_format como a constante SourceFormat PARQUET e transfira a configuração do job como o argumento job_config para o método load_table_from_uri().

    # from google.cloud import bigquery
    # client = bigquery.Client()
    # dataset_id = 'my_dataset'
    
    dataset_ref = client.dataset(dataset_id)
    job_config = bigquery.LoadJobConfig()
    job_config.source_format = bigquery.SourceFormat.PARQUET
    uri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet"
    
    load_job = client.load_table_from_uri(
        uri, dataset_ref.table("us_states"), job_config=job_config
    )  # API request
    print("Starting job {}".format(load_job.job_id))
    
    load_job.result()  # Waits for table load to complete.
    print("Job finished.")
    
    destination_table = client.get_table(dataset_ref.table("us_states"))
    print("Loaded {} rows.".format(destination_table.num_rows))

    Como substituir uma tabela com dados Parquet

    Carregue dados adicionais para uma tabela a partir de arquivos de origem ou anexando resultados de consultas.

    No Console ou na IU da Web clássica do BigQuery, use a opção Gravar preferência para especificar a ação a ser executada ao carregar dados de um arquivo de origem ou de um resultado de consulta.

    Você tem as seguintes opções ao carregar dados adicionais em uma tabela:

    Opção do console Opção da IU clássica Sinalização da CLI Propriedade da API BigQuery Descrição
    Gravar apenas se a tabela estiver vazia Gravar apenas se a tabela estiver vazia Nenhum WRITE_EMPTY Grava dados apenas se a tabela estiver vazia.
    Anexar à tabela Anexar à tabela --noreplace ou --replace=false. Se --[no]replace não estiver especificado, o padrão será anexar WRITE_APPEND (Padrão) Anexa os dados ao final da tabela.
    Substituir tabela Substituir tabela --replace ou --replace=true WRITE_TRUNCATE Apaga todos os dados existentes em uma tabela, antes de gravar os novos.

    Por padrão, os jobs de carregamento anexam dados a uma tabela, a menos que a disposição de gravação seja alterada. Se você quiser substituir esses dados por dados de um job de carregamento, opte por substituir os dados em uma tabela do BigQuery:

    Console

    1. Abra a IU da Web do BigQuery no Console do GCP.
      Acessar a IU da Web do BigQuery

    2. No painel de navegação, na seção Recursos, expanda seu projeto e selecione um conjunto de dados.

    3. No lado direito da janela, no painel de detalhes, clique em Criar tabela. O processo de carregamento de dados é igual ao de criação de uma tabela vazia.

      Criar tabela

    4. Siga estas etapas na página Criar tabela, na seção Origem:

      • Em Criar tabela de, selecione o tipo de fonte desejada.

        Criar origem da tabela

      • No campo de origem, procure o arquivo/intervalo do Cloud Storage ou insira o URI do Cloud Storage. Não é possível incluir vários URIs na IU da Web do BigQuery, mas caracteres curinga são aceitos. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.

        Selecionar arquivo

      • Em Formato do arquivo, selecione Parquet.

    5. Na página Criar tabela, na seção Destino, faça o seguinte:

      • Em Nome do conjunto de dados, escolha o conjunto apropriado.

        Escolher conjunto de dados

      • No campo Nome da tabela, insira o nome da tabela que você está criando no BigQuery.

      • Verifique se o Tipo de tabela está configurado como Tabela nativa.

    6. Na seção Esquema, insira a definição do esquema.

      • Insira as informações do esquema manualmente:

        • Ative Editar como texto e insira o esquema da tabela como uma matriz JSON.

        • Use Adicionar campo para inserir manualmente o esquema.

    7. Na seção Opções avançadas, em Preferência de gravação, selecione Gravar apenas se a tabela estiver vazia, Anexar à tabela ou Substituir tabela.

      Substituir tabela

    8. Clique em Criar tabela.

    IU clássica

    1. Acesse a IU da Web do BigQuery.
      Acessar a IU da Web do BigQuery

    2. No painel de navegação, passe o cursor sobre um conjunto de dados, clique no ícone de seta para baixo imagem do ícone de seta para baixo e depois em Criar nova tabela. O processo de carregamento de dados é igual ao de criação de uma tabela vazia.

    3. Na página Criar tabela, na seção Dados de origem:

      • Em Local, selecione Cloud Storage e, no campo de origem, insira o URI do Cloud Storage. Não é possível incluir vários URIs na IU, mas caracteres curinga são aceitos. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está anexando ou substituindo.
      • Em Formato do arquivo, selecione Parquet.
    4. Na página Criar tabela, na seção Tabela de destino:

      • Em Nome da tabela, escolha o conjunto de dados apropriado e insira o nome da tabela que você está anexando ou substituindo.
      • Verifique se o Tipo de tabela está configurado como Tabela nativa.
    5. Na seção Esquema, nenhuma ação é necessária. As informações do esquema são autodescritas em arquivos Parquet.

    6. Na seção Opções, em Preferência de gravação, escolha Gravar se estiver vazia, Anexar à tabela ou Substituir tabela.

      Adicionar esquema usando adição de campos

    7. Clique em Criar tabela.

    Linha de comando

    Insira o comando bq load com a sinalização --replace para substituir a tabela. Forneça a sinalização --location e defina o valor do local. Use a sinalização --noreplace para anexar dados à tabela. Se nenhuma sinalização for especificada, o padrão será anexar os dados.

    bq --location=[LOCATION] load --[no]replace [DATASET].[TABLE] [PATH_TO_SOURCE]
    

    em que:

    • [LOCATION] é o local. A sinalização --location é opcional. Defina um valor padrão para o local usando o arquivo .bigqueryrc;
    • [DATASET] é um conjunto de dados atual;
    • [TABLE] é o nome da tabela em que você está carregando dados;
    • [PATH_TO_SOURCE] é um URI do Cloud Storage totalmente qualificado ou uma lista de URIs separados por vírgulas. Caracteres curinga também são aceitos.

    Exemplos:

    • O comando a seguir carrega dados de gs://mybucket/mydata.parquet e substitui uma tabela chamada mytable em mydataset. mybucket e mydataset foram criados na multirregião US.

      bq --location=US load --replace --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      
    • O comando a seguir carrega dados de gs://mybucket/mydata.parquet e acrescenta dados a uma tabela chamada mytable em mydataset. mybucket e mydataset foram criados na região asia-northeast1.

      bq --location=asia-northeast1 load --noreplace --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      

    API

    Defina as seguintes propriedades para carregar dados CSV usando a API.

    1. Crie um job de carregamento que aponte para os dados de origem no Cloud Storage.

    2. Especifique o local na propriedade location da seção jobReference do recurso de job.

    3. Os URIs de origem precisam ser totalmente qualificados no formato gs://[BUCKET]/[OBJECT]. É possível incluir vários URIs como uma lista separada por vírgulas. Caracteres curinga também são aceitos no carregamento de dados CSV do Cloud Storage.

    4. Para especificar o formato de dados, configure a propriedade configuration.load.sourceFormat como PARQUET.

    5. Defina a propriedade configuration.load.writeDisposition como WRITE_TRUNCATE, WRITE_APPEND ou WRITE_EMPTY para especificar a preferência de gravação.

    Go

    Antes de testar esta amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go (em inglês).

    // To run this sample, you will need to create (or reuse) a context and
    // an instance of the bigquery client.  For example:
    // import "cloud.google.com/go/bigquery"
    // ctx := context.Background()
    // client, err := bigquery.NewClient(ctx, "your-project-id")
    gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.parquet")
    gcsRef.SourceFormat = bigquery.Parquet
    gcsRef.AutoDetect = true
    loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
    loader.WriteDisposition = bigquery.WriteTruncate
    
    job, err := loader.Run(ctx)
    if err != nil {
    	return err
    }
    status, err := job.Wait(ctx)
    if err != nil {
    	return err
    }
    
    if status.Err() != nil {
    	return fmt.Errorf("Job completed with error: %v", status.Err())
    }

    Node.js

    Antes de testar esta amostra, siga as instruções de configuração do Node.js em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Node.js.

    // Import the Google Cloud client libraries
    const {BigQuery} = require('@google-cloud/bigquery');
    const {Storage} = require('@google-cloud/storage');
    
    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const datasetId = "my_dataset";
    // const tableId = "my_table";
    
    /**
     * This sample loads the CSV file at
     * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
     *
     * TODO(developer): Replace the following lines with the path to your file.
     */
    const bucketName = 'cloud-samples-data';
    const filename = 'bigquery/us-states/us-states.parquet';
    
    async function loadParquetFromGCSTruncate() {
      /**
       * Imports a GCS file into a table and overwrites
       * table data if table already exists.
       */
    
      // Instantiate clients
      const bigqueryClient = new BigQuery();
      const storageClient = new Storage();
    
      // Configure the load job. For full list of options, see:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
      const metadata = {
        sourceFormat: 'PARQUET',
        // Set the write disposition to overwrite existing table data.
        writeDisposition: 'WRITE_TRUNCATE',
        location: 'US',
      };
    
      // Load data from a Google Cloud Storage file into the table
      const [job] = await bigqueryClient
        .dataset(datasetId)
        .table(tableId)
        .load(storageClient.bucket(bucketName).file(filename), metadata);
      // load() waits for the job to finish
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }
    loadParquetFromGCSTruncate();

    PHP

    Antes de testar esta amostra, siga as instruções de configuração do PHP em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $tableID = 'The BigQuery table ID';
    
    // instantiate the bigquery table service
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $table = $bigQuery->dataset($datasetId)->table($tableId);
    
    // create the import job
    $gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.parquet';
    $loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('PARQUET')->writeDisposition('WRITE_TRUNCATE');
    $job = $table->runJob($loadConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $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);
        }
    });
    
    // 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 imported successfully' . PHP_EOL);
    }

    Python

    Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, veja a documentação de referência da API do BigQuery para Python.

    Para substituir as linhas em uma tabela existente, defina a propriedade LoadJobConfig.write_disposition como a constante WriteDisposition WRITE_TRUNCATE.

    # from google.cloud import bigquery
    # client = bigquery.Client()
    # table_ref = client.dataset('my_dataset').table('existing_table')
    
    job_config = bigquery.LoadJobConfig()
    job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
    job_config.source_format = bigquery.SourceFormat.PARQUET
    uri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet"
    load_job = client.load_table_from_uri(
        uri, table_ref, job_config=job_config
    )  # API request
    print("Starting job {}".format(load_job.job_id))
    
    load_job.result()  # Waits for table load to complete.
    print("Job finished.")
    
    destination_table = client.get_table(table_ref)
    print("Loaded {} rows.".format(destination_table.num_rows))

    Conversões Parquet

    O BigQuery converte tipos de dados Parquet nos seguintes tipos de dados:

    Conversões de tipos

    Tipo Parquet Tipo(s) convertido(s) Parquet Tipo de dados do BigQuery
    BOOLEAN NENHUM Booleano
    INT32 NENHUM, UINT_8, UINT_16, UINT_32, INT_8, INT_16, INT_32 Inteiro
    INT32 DECIMAL (consulte anotação DECIMAL) Numérico
    INT32 DATA Data
    INT64 NENHUM, UINT_64, INT_64 Inteiro
    INT64 DECIMAL (consulte anotação DECIMAL) Numérico
    INT64 TIMESTAMP_MILLIS Carimbo de data/hora
    INT64 TIMESTAMP_MICROS Carimbo de data/hora
    INT96 NENHUM Carimbo de data/hora
    FLOAT NENHUM Ponto flutuante
    DOUBLE NENHUM Ponto flutuante
    BYTE_ARRAY NENHUM Bytes
    BYTE_ARRAY UTF8 String
    FIXED_LEN_BYTE_ARRAY DECIMAL (consulte anotação DECIMAL) Numérico
    FIXED_LEN_BYTE_ARRAY NENHUM Bytes

    Outras combinações de tipos Parquet e tipos convertidos não são compatíveis.

    Anotação decimal

    Os tipos Parquet com a anotação DECIMAL podem ter no máximo uma precisão de 38 (número total de dígitos) e no máximo uma escala de 9 (dígitos à direita do decimal). O número de dígitos inteiros, que é a precisão menos a escala, pode ser no máximo 29. Por exemplo, DECIMAL(38, 9) é aceito porque a precisão é 38 e a escala é 9. Nesse exemplo, o número de dígitos inteiros é 29. DECIMAL(38, 5) não é aceito porque a precisão é 38 e a escala é 5. Nesse exemplo, o número de dígitos inteiros é 33.

    Conversões de nome de coluna

    O nome da coluna precisa conter apenas letras (a-z, A-Z), números (0-9) ou sublinhados (_) e começar com uma letra ou sublinhado. O comprimento máximo é de 128 caracteres. Não é possível usar estes prefixos nos nomes da coluna:

    • _TABLE_
    • _FILE_
    • _PARTITION

    Os nomes de coluna duplicados não são permitidos, mesmo em caso de diferença de maiúsculas e minúsculas. Por exemplo, uma coluna chamada Column1 é considerada idêntica a uma column1.

    Atualmente, não é possível carregar arquivos Parquet que contenham colunas com um ponto final (.) no nome da coluna.

    Se o nome de uma coluna Parquet contiver outros caracteres (além de um ponto final), os caracteres serão substituídos por sublinhados. Os sublinhados à direita podem ser adicionados aos nomes das colunas para evitar colisões. Por exemplo, se um arquivo Parquet tiver duas colunas, Column1 e column1, elas serão carregadas como Column1 e column1_, respectivamente.

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

    Enviar comentários sobre…

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