Como carregar dados Parquet a partir 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 anexar dados a uma tabela atual:

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 e clique no ícone de seta para baixo imagem do ícone de seta para baixo. Em seguida, selecione 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 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.
  4. 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á configurado como Tabela nativa.
  5. Na seção Esquema, nenhuma ação é necessária. O esquema é autodescrito em arquivos Parquet.

  6. 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 compatíveis.

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 do 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 status for status.state = DONE, o job foi concluído com sucesso.
    • Se a propriedade status.errorResult estiver presente, houve falha na solicitação, e o 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.

  • É recomendado gerar um código exclusivo e transmiti-lo 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 do Go no Início rápido do BigQuery: como usar bibliotecas de cliente. Para saber mais informações, consulte a documentação de referência da API do BigQuery para Go.

// 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 do Java no 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 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 no 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 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';

// Instantiate clients
const bigquery = new BigQuery();
const storage = 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 bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(storage.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;
}

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP no 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 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 no 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:

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 e clique no ícone de seta para baixo imagem do ícone de seta para baixo. Em seguida, selecione 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 compatíveis.

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 do 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 do Go no Início rápido do BigQuery: como usar bibliotecas de cliente. Para saber mais informações, consulte a documentação de referência da API do BigQuery para Go.

// 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 no 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 Node.js.

// Imports 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 projectId = "your-project-id";
// 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';

// Instantiates clients
const bigquery = new BigQuery({
  projectId: projectId,
});

const storage = new Storage({
  projectId: projectId,
});

// 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',
};

// Loads data from a Google Cloud Storage file into the table
const [job] = await bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(storage.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;
}

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP no 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 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 no 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 atual, 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')

previous_rows = client.get_table(table_ref).num_rows
assert previous_rows > 0

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.