Charger des données ORC à partir de Cloud Storage

Cette page vous offre un aperçu du chargement de données ORC depuis Cloud Storage dans BigQuery.

ORC est un format de données Open Source orienté colonnes dont l'utilisation est très répandue dans l'écosystème Apache Hadoop.

Lorsque vous chargez des données ORC depuis Cloud Storage, vous pouvez les placer dans une nouvelle table ou partition, les ajouter à une table ou partition existante, ou bien les utiliser pour écraser ces dernières. Lorsque les données sont chargées dans BigQuery, elles sont converties au format en colonnes de Capacitor (le format de stockage de BigQuery).

Lorsque vous chargez des données depuis Cloud Storage dans une table BigQuery, l'ensemble de données contenant la table doit se trouver dans la même zone régionale ou multirégionale que le bucket Cloud Storage.

Pour en savoir plus sur le chargement des données ORC à partir d'un fichier local, consultez la page Charger des données dans BigQuery à partir d'une source de données locale.

Schémas ORC

Lorsque vous chargez des fichiers ORC dans BigQuery, le schéma de la table est automatiquement extrait des données sources auto-descriptives. Lorsque BigQuery récupère le schéma à partir des données sources, le fichier qui figure en dernier selon l'ordre alphabétique est utilisé.

Par exemple, si vous disposez des fichiers ORC suivants dans Cloud Storage :

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

La commande CLI ci-dessous permet de charger tous les fichiers en une seule fois (sous la forme d'une liste d'éléments séparés par une virgule). Le schéma est dérivé de mybucket/01/b.orc :

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

Lorsque BigQuery détecte le schéma, certains types de données ORC sont convertis en types de données BigQuery de façon qu'ils soient compatibles avec la syntaxe SQL de BigQuery. Tous les champs du schéma détecté sont en mode NULLABLE. Pour en savoir plus, consultez la section Conversions ORC.

Lorsque vous chargez plusieurs fichiers ORC ayant des schémas différents, les champs identiques (même nom et même niveau imbriqué) spécifiés dans plusieurs schémas doivent être mappés au même type de données BigQuery converti dans chaque définition de schéma.

Compression ORC

Les fichiers ORC compressés ne sont pas acceptés, à la différence des pieds de page et des bandes de fichiers compressés. Les types de compression acceptés sont Zlib, Snappy, LZO et LZ4.

Charger des données ORC dans une nouvelle table

Pour charger des données ORC depuis Google Cloud Storage dans une nouvelle table BigQuery, ou pour ajouter des données à une table existante, procédez comme suit :

Interface utilisateur classique

  1. Accédez à l'UI Web de BigQuery.
    Accéder à l'UI Web de BigQuery

  2. Dans le panneau de navigation, passez la souris sur un ensemble de données. Cliquez ensuite sur la flèche vers le bas image de la flèche vers le bas, puis sur Créer une table. Le processus de chargement des données est identique au processus de création d'une table vide.

  3. Dans la section Données sources de la page Créer une table :

    • Pour Emplacement, sélectionnez Cloud Storage. Dans le champ "Source", indiquez l'URI Cloud Storage. Notez que vous ne pouvez pas inclure plusieurs URI dans l'interface utilisateur Web de BigQuery. En revanche, les caractères génériques sont acceptés. Le bucket Cloud Storage doit se trouver dans la même zone que l'ensemble de données contenant la table que vous créez.
    • Pour Format de fichier, sélectionnez ORC.
  4. Dans la section Table de destination de la page Créer une table :

    • Pour Nom de la table, sélectionnez l'ensemble de données approprié, puis saisissez dans le champ le nom de la table que vous créez dans BigQuery.
    • Vérifiez que Type de table est défini sur Table native.
  5. Aucune action n'est nécessaire dans la section Schéma. Le schéma est auto-décrit dans les fichiers ORC.

  6. Cliquez sur Créer une table.

Ligne de commande

Exécutez la commande bq load, puis indiquez ORC pour source_format et spécifiez un URI Cloud Storage. Vous pouvez inclure un seul URI, une liste d'URI séparés par une virgule, ou un URI contenant un caractère générique.

Définissez l'indicateur --location sur la valeur correspondant à votre emplacement.

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

où :

  • [LOCATION] correspond à votre zone. L'indicateur --location est facultatif si vos données se situent dans les zones multirégionales US ou EU. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, définissez la valeur de l'indicateur sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.
  • [FORMAT] est ORC.
  • [DATASET] est un ensemble de données existant.
  • [TABLE] est le nom de la table dans laquelle vous chargez des données.
  • [PATH_TO_SOURCE] est un URI Cloud Storage complet ou une liste d'URI séparés par une virgule. Les caractères génériques sont également acceptés.

Exemples :

  • La commande suivante permet de charger des données de gs://mybucket/mydata.orc dans la table mytable de mydataset. mybucket et mydataset ont été créés dans la zone multirégionale US.

    bq --location=US load --source_format=ORC mydataset.mytable gs://mybucket/mydata.orc
    
  • La commande suivante permet de charger des données de plusieurs fichiers de gs://mybucket/ dans la table mytable de mydataset : L'URI Cloud Storage utilise un caractère générique. mybucket et mydataset ont été créés dans la zone multirégionale US.

    bq --location=US load --source_format=ORC mydataset.mytable gs://mybucket/mydata*.orc
    
  • La commande suivante permet de charger des données de plusieurs fichiers de gs://mybucket/ dans la table mytable de mydataset : La commande inclut une liste d'URI Cloud Storage séparés par une virgule avec des caractères génériques. mybucket et mydataset ont été créés dans la région asia-northeast1.

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

API

Définissez les propriétés suivantes pour charger des données ORC à l'aide de l'API.

  1. Créez une tâche de chargement qui pointe vers les données sources dans Cloud Storage.

  2. Spécifiez votre emplacement dans la propriété location de la section jobReference de la ressource de tâche.

  3. Les URI sources doivent être complets et respecter le format gs://[BUCKET]/[OBJECT]. Chaque URI peut contenir un caractère générique (*).

  4. Spécifiez le format de données ORC en définissant la propriété configuration.load.sourceFormat sur ORC.

  5. Pour vérifier l'état de la tâche, appelez jobs.get([JOB_ID]*), où [JOB_ID] correspond à l'ID de la tâche renvoyée par la requête initiale.

    • Si la propriété status.state = DONE s'affiche, la tâche a bien été exécutée.
    • Si la propriété status.errorResult est présente, la requête a échoué. Cet objet inclura des informations décrivant le problème rencontré. En cas d'échec d'une requête, aucune table n'est créée et aucune donnée n'est ajoutée.

    • Si la propriété status.errorResult est absente, la tâche a bien été exécutée. Toutefois, des erreurs non fatales, telles que des problèmes d'importation de lignes, ont pu se produire. Ces erreurs sont répertoriées dans la propriété status.errors de l'objet de tâche renvoyé.

Remarques relatives à l'API :

  • Les tâches de chargement sont atomiques et cohérentes. En cas d'échec d'une tâche de chargement, aucune donnée n'est disponible. Si une tâche aboutit, toutes les données sont disponibles.

  • Nous vous recommandons de générer un ID unique et de le transmettre en tant que jobReference.jobId lorsque vous appelez jobs.insert() pour créer une tâche de chargement. Cette approche offre une protection plus robuste contre les pannes réseau, car le client peut lancer une requête ou effectuer de nouvelles tentatives en utilisant l'ID de tâche connu.

  • L'appel de jobs.insert() avec un ID de tâche donné est idempotent. En d'autres termes, vous pouvez effectuer autant de tentatives que vous le souhaitez avec le même ID de tâche. L'une de ces opérations tout au plus aboutira.

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery C#.

using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsOrc
{
    public void LoadTableGcsOrc(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
        var dataset = client.GetDataset(datasetId);
        TableReference destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            SourceFormat = FileFormat.Orc
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI,
            destination: destinationTableRef,
            // Pass null as the schema because the schema is inferred when
            // loading Orc data
            schema: null,
            options: jobOptions
        );
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery 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.orc")
gcsRef.SourceFormat = bigquery.ORC
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())
}

Node.js

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Node.js dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery 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 ORC file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.orc
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.orc';

// Instantiates clients
const bigquery = new BigQuery({projectId});
const storage = new Storage({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: 'ORC',
};

// 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

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour PHP dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'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.orc';
$loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('ORC');
$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

Avant de tester cet exemple, suivez la procédure de configuration de Python dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

# 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.ORC
uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc'

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))

Ruby

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Ruby dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Ruby.

require "google/cloud/bigquery"

def load_table_gcs_orc dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.orc"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, format: "orc"
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

Écraser une table avec des données ORC

Vous pouvez charger des données supplémentaires dans une table à partir de fichiers sources ou en ajoutant des résultats de requête.

Dans l'interface utilisateur Web de BigQuery, utilisez l'option Préférence d'écriture pour spécifier l'action à entreprendre lorsque vous chargez des données à partir d'un fichier source ou d'un résultat de requête.

Vous disposez des options suivantes lorsque vous chargez des données supplémentaires dans une table :

Option de la console Option d'interface utilisateur classique Indicateur de la CLI Propriété de l'API BigQuery Description
Écrire si la table est vide Écrire si la table est vide Aucun WRITE_EMPTY N'écrit les données que si la table est vide.
Ajouter au tableau Ajouter au tableau --noreplace ou --replace=false. Si --[no]replace n'est pas spécifié, les données sont ajoutées par défaut. WRITE_APPEND (Par défaut) Ajoute les données à la fin de la table.
Écraser la table Écraser la table --replace ou --replace=true WRITE_TRUNCATE Efface toutes les données existantes d'une table avant d'écrire les nouvelles données.

Par défaut, les tâches de chargement ajoutent des données à une table, sauf si la disposition d'écriture est modifiée. Si vous préférez remplacer les données par celles d'une tâche de chargement, vous pouvez choisir d'écraser les données d'une table BigQuery :

Interface utilisateur classique

  1. Accédez à l'UI Web de BigQuery.
    Accéder à l'UI Web de BigQuery

  2. Dans le panneau de navigation, passez la souris sur un ensemble de données. Cliquez ensuite sur la flèche vers le bas image de la flèche vers le bas, puis sur Créer une table. Le processus de chargement des données est identique au processus de création d'une table vide.

  3. Dans la section Données sources de la page Créer une table :

    • Pour Emplacement, sélectionnez Cloud Storage. Dans le champ "Source", indiquez l'URI Cloud Storage. Notez que vous ne pouvez pas inclure plusieurs URI dans l'interface utilisateur. En revanche, les caractères génériques sont acceptés. Le bucket Cloud Storage doit se trouver dans la même zone que l'ensemble de données contenant la table à laquelle vous ajoutez des données ou que vous écrasez.
    • Pour Format de fichier, sélectionnez ORC.
  4. Dans la section Table de destination de la page Créer une table :

    • Pour Nom de la table, sélectionnez l'ensemble de données approprié, puis saisissez dans le champ le nom de la table à laquelle vous ajoutez des données ou que vous écrasez.
    • Vérifiez que Type de table est défini sur Table native.
  5. Aucune action n'est nécessaire dans la section Schéma. Les informations sur le schéma sont auto-décrites dans les fichiers ORC.

  6. Dans la section Options, pour Write preference (Préférence d'écriture), choisissez Write if empty (Écrire si la table est vide), Append to table (Ajouter à la table) ou Overwrite table (Écraser la table).

    Ajouter un schéma à l'aide de champs d'ajout

  7. Cliquez sur Create Table (Créer une table).

Ligne de commande

Saisissez la commande bq load avec l'indicateur --replace pour écraser la table. Définissez l'indicateur --location sur la valeur correspondant à votre emplacement. Utilisez l'indicateur --noreplace pour ajouter des données à la table. Si aucun indicateur n'est spécifié, les données sont ajoutées par défaut.

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

où :

  • [LOCATION] correspond à votre zone. L'indicateur --location est facultatif si vos données se situent dans les zones multirégionales US ou EU. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.
  • [DATASET] est un ensemble de données existant.
  • [TABLE] est le nom de la table dans laquelle vous chargez des données.
  • [PATH_TO_SOURCE] est un URI Cloud Storage complet ou une liste d'URI séparés par une virgule. Les caractères génériques sont également acceptés.

Exemples :

  • La commande suivante permet de charger des données de gs://mybucket/mydata.orc et d'écraser une table nommée mytable dans mydataset. mybucket et mydataset ont été créés dans la zone multirégionale US.

    bq --location=US load --replace --source_format=ORC mydataset.mytable gs://mybucket/mydata.orc
    
  • La commande suivante permet de charger des données à partir de gs://mybucket/mydata.orc et de les ajouter à une table nommée mytable dans mydataset. mybucket et mydataset ont été créés dans la région asia-northeast1.

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

API

Définissez les propriétés suivantes pour charger des données CSV à l'aide de l'API.

  1. Créez une tâche de chargement qui pointe vers les données sources dans Cloud Storage.

  2. Spécifiez votre emplacement dans la propriété location de la section jobReference de la ressource de tâche.

  3. Les URI sources doivent être complets et respecter le format gs://[BUCKET]/[OBJECT]. Vous pouvez inclure plusieurs URI sous la forme d'une liste d'éléments séparés par une virgule. Sachez que les caractères génériques sont également acceptés lors du chargement de données CSV à partir de Cloud Storage.

  4. Spécifiez le format de données en définissant la propriété configuration.load.sourceFormat sur ORC.

  5. Spécifiez la préférence d'écriture en définissant la propriété configuration.load.writeDisposition sur WRITE_TRUNCATE, WRITE_APPEND ou WRITE_EMPTY. Pour les travaux de chargement, le mode par défaut est WRITE_APPEND.

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery C#.

using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsOrcTruncate
{
    public void LoadTableGcsOrcTruncate(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
        var dataset = client.GetDataset(datasetId);
        TableReference destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            SourceFormat = FileFormat.Orc,
            WriteDisposition = WriteDisposition.WriteTruncate
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI,
            destination: destinationTableRef,
            // Pass null as the schema because the schema is inferred when
            // loading Orc data
            schema: null, options: jobOptions);
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery 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.orc")
gcsRef.SourceFormat = bigquery.ORC
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
// Default for import jobs is to append data to a table.  WriteTruncate
// specifies that existing data should instead be replaced/overwritten.
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

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Node.js dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery 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.orc';

// 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: 'ORC',
  // 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

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour PHP dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'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.orc';
$loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('ORC')->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

Avant de tester cet exemple, suivez la procédure de configuration de Python dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

Pour remplacer les lignes d'une table existante, définissez la propriété LoadJobConfig.write_disposition sur 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.ORC
uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc'
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))

Ruby

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Ruby dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Ruby.

require "google/cloud/bigquery"

def load_table_gcs_orc_truncate(
    dataset_id = "your_dataset_id",
    table_id   = "your_table_id"
  )
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.orc"

  load_job = dataset.load_job table_id,
                              gcs_uri,
                              format: "orc",
                              write:  "truncate"
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

Conversions ORC

BigQuery convertit les types de données ORC en types de données BigQuery, comme décrit ci-dessous.

Types primitifs

Type de données ORC Type de données BigQuery Notes
booléen BOOLEAN
byte INTEGER
short INTEGER
int INTEGER
long INTEGER
float FLOAT
double FLOAT
string STRING UTF-8 uniquement
varchar STRING UTF-8 uniquement
char STRING UTF-8 uniquement
binary BYTES
date DATE
timestamp TIMESTAMP ORC accepte une précision à la nanoseconde, mais BigQuery convertit les valeurs inférieures à la microseconde en microsecondes lors de la lecture des données.
decimal NUMERIC ou STRING Les types NUMERIC sont des valeurs numériques exactes avec 38 chiffres de précision et 9 chiffres décimaux d'échelle. Pour en savoir plus, consultez la section Type NUMERIC. Dans un schéma ORC, si un type "decimal" a au plus 9 chiffres d'échelle, et que le résultat de la soustraction des chiffres d'échelle aux chiffres de précision ne dépasse pas 29, il est converti au format NUMERIC. Sinon, il est converti au format STRING. Dans ce cas, un message d'avertissement est renvoyé.

Types complexes

Type de données ORC Type de données BigQuery Notes
struct RECORD
  • Tous les champs sont en mode NULLABLE.
  • L'ordre des champs est ignoré.
  • Le nom d'un champ doit être un nom de colonne valide.
map<K,V> RECORD Un champ map<K,V> ORC est converti en un élément RECORD répété contenant deux champs : une clé du même type de données que K et une valeur du même type de données que V. Ces deux champs sont en mode NULLABLE.
list champs répétés Les listes imbriquées et les listes de cartes ne sont pas acceptées.
union RECORD
  • Lorsqu'une union n'a qu'une variante, elle est convertie en champ NULLABLE.
  • Sinon, elle est convertie en élément RECORD avec une liste de champs en mode NULLABLE. Ces derniers ont des suffixes tels que champ_0, champ_1, etc. Lors de la lecture des données, un seul de ces champs se voit attribuer une valeur.

Noms de colonnes

Un nom de colonne ne doit contenir que des lettres (a-z, AZ), des chiffres (0-9) et des traits de soulignement (_), et il doit commencer par une lettre ou un trait de soulignement. Sa longueur maximale est de 128 caractères. Un nom de colonne ne peut utiliser aucun des préfixes suivants :

  • _TABLE_
  • _FILE_
  • _PARTITION

Les noms de colonnes en double ne sont pas autorisés, même si la casse est différente. Par exemple, la colonne Column1 est considérée comme identique à la colonne column1.

Valeurs NULL

Sachez que BigQuery ignore actuellement les éléments NULL pour le type composé de list.

Pour en savoir plus sur les types de données ORC, consultez le document Apache ORC™ Specification v1.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.