Présentation des transferts Amazon S3

Le Service de transfert de données BigQuery pour Amazon S3 vous permet de programmer et de gérer automatiquement des jobs de chargement récurrents à partir d'Amazon S3 dans BigQuery.

Formats de fichiers acceptés

Le Service de transfert de données BigQuery est compatible avec le chargement de données à partir d'Amazon S3 dans l'un des formats suivants :

  • Valeurs séparées par une virgule (CSV)
  • JSON (délimité par un retour à la ligne)
  • Avro
  • Parquet
  • ORC

Types de compression acceptés

Le service de transfert de données BigQuery pour Amazon S3 accepte le chargement de données compressées. Les types de compression acceptés par le service de transfert de données BigQuery sont identiques aux types de compression acceptés par les tâches de chargement BigQuery. Pour en savoir plus, consultez la section Charger des données compressées et non compressées.

Prérequis Amazon S3

Pour charger des données à partir d'une source de données Amazon S3, vous devez :

  • indiquer l'URI Amazon S3 pour vos données source ;
  • avoir votre ID de clé d'accès ;
  • avoir votre clé d'accès secrète ;
  • définir au minimum la stratégie AWS gérée AmazonS3ReadOnlyAccess sur vos données source Amazon S3.

URI Amazon S3

Lorsque vous spécifiez l'URI Amazon S3, le chemin d'accès doit être au format s3://bucket/folder1/folder2/.... Seul le nom du compartiment de niveau supérieur est requis. Les noms de dossier sont facultatifs. Si vous spécifiez un URI comprenant uniquement le nom du bucket, tous les fichiers du bucket sont transférés et chargés dans BigQuery.

Paramétrer l'exécution du transfert Amazon S3

L'URI Amazon S3 et la table de destination peuvent être tous deux paramétrés, ce qui vous permet de charger des données à partir de compartiments Amazon S3 organisées par date. Notez que la partie compartiment de l'URI ne peut pas être paramétrée. Les paramètres utilisés par les transferts Amazon S3 sont les mêmes que ceux utilisés par les transferts Cloud Storage.

Pour plus de détails, consultez la page Paramètres d'exécution dans les transferts.

Ingestion de données pour les transferts Amazon S3

Vous pouvez spécifier le mode de chargement des données dans BigQuery en sélectionnant une préférence d'écriture dans la configuration de transfert lorsque vous configurez un transfert Amazon S3.

Il existe deux types de préférences d'écriture : les transferts incrémentiels et les transferts tronqués.

Transferts incrémentiels

Une configuration de transfert avec une préférence d'écriture APPEND ou WRITE_APPEND, également appelée transfert incrémentiel, ajoute de nouvelles données depuis le dernier transfert réussi vers une table de destination BigQuery. Lorsqu'une configuration de transfert s'exécute avec une préférence d'écriture APPEND, le service de transfert de données BigQuery filtre les fichiers modifiés depuis la dernière exécution de transfert réussie. Pour déterminer le moment où un fichier est modifié, le service de transfert de données BigQuery recherche une propriété "dernière modification" dans les métadonnées du fichier. Par exemple, le service de transfert de données BigQuery examine la propriété d'horodatage updated dans un fichier Cloud Storage. Si le service de transfert de données BigQuery trouve des fichiers dont l'heure de la dernière modification s'est produite après l'horodatage du dernier transfert réussi, le service transfère ces fichiers dans un transfert incrémentiel.

Pour illustrer le fonctionnement des transferts incrémentiels, prenons l'exemple de transfert Cloud Storage suivant. Un utilisateur crée un fichier dans un bucket Cloud Storage à la date 2023-07-01T00:00Z nomméfile_1. L'horodatage updated pour file_1 correspond à l'heure à laquelle le fichier a été créé. L'utilisateur crée ensuite un transfert incrémentiel à partir du bucket Cloud Storage, dont l'exécution est programmée une fois par jour à 03h00, à partir du 2023-07-01T03:00Z.

  • À la date 2023-07-01T03:00Z, la première exécution du transfert commence. Comme il s'agit de la première exécution de transfert pour cette configuration, le service de transfert de données BigQuery tente de charger tous les fichiers correspondant à l'URI source dans la table BigQuery de destination. L'exécution du transfert aboutit et le service de transfert de données BigQuery charge correctement file_1 dans la table BigQuery de destination.
  • La prochaine exécution de transfert, à 2023-07-02T03:00Z, ne détecte aucun fichier dont la propriété d'horodatage updated est supérieure à la dernière exécution de transfert réussie (2023-07-01T03:00Z). L'exécution du transfert aboutit sans charger de données supplémentaires dans la table BigQuery de destination.

L'exemple précédent montre comment le service de transfert de données BigQuery examine la propriété d'horodatage updated du fichier source pour déterminer si des modifications ont été apportées aux fichiers sources, et pour transférer ces modifications le cas échéant.

Après ce même exemple, supposons que l'utilisateur crée ensuite un autre fichier dans le bucket Cloud Storage, à la date 2023-07-03T00:00Z, nommé file_2. L'horodatage updated pour file_2 correspond à l'heure à laquelle le fichier a été créé.

  • La prochaine exécution de transfert, à 2023-07-03T03:00Z, détecte que file_2 possède un horodatage updated supérieur à la dernière exécution de transfert (2023-07-01T03:00Z). Supposons que le démarrage de l'exécution du transfert échoue en raison d'une erreur temporaire. Dans ce scénario, file_2 n'est pas chargé dans la table BigQuery de destination. Le dernier horodatage d'exécution de transfert réussi reste 2023-07-01T03:00Z.
  • La prochaine exécution de transfert, à 2023-07-04T03:00Z, détecte que file_2 possède un horodatage updated supérieur à la dernière exécution de transfert réussie (2023-07-01T03:00Z). Cette fois, l'exécution de transfert se termine sans problème. Elle charge donc file_2 dans la table BigQuery de destination.
  • La prochaine exécution de transfert, à 2023-07-05T03:00Z, ne détecte aucun fichier dont l'horodatage updated est supérieur à la dernière exécution de transfert réussie (2023-07-04T03:00Z). L'exécution du transfert réussit sans charger de données supplémentaires dans la table BigQuery de destination.

L'exemple précédent montre qu'en cas d'échec d'un transfert, aucun fichier n'est transféré vers la table de destination BigQuery. Toutes les modifications de fichiers seront transférées lors de la prochaine exécution de transfert réussie. Tout transfert réussi après un transfert ayant échoué n'entraîne pas de données en double. En cas de transfert ayant échoué, vous pouvez également choisir de déclencher manuellement un transfert en dehors de son heure prévue.

Transferts tronqués

Une configuration de transfert avec une préférence d'écriture MIRROR ou WRITE_TRUNCATE, également appelée transfert tronqué, écrase des données dans la table de destination BigQuery à chaque exécution de transfert avec les données de tous les fichiers correspondant à l'URI source. MIRROR écrase une nouvelle copie des données de la table de destination. Si la table de destination utilise un décorateur de partition, l'exécution du transfert n'écrase que les données de la partition spécifiée. Une table de destination dotée d'un décorateur de partition est au format my_table${run_date} (par exemple, my_table$20230809).

La répétition de transferts incrémentiels ou tronqués dans une journée n'entraîne pas de données en double. Toutefois, si vous exécutez plusieurs configurations de transfert différentes qui affectent la même table de destination BigQuery, le service de transfert de données BigQuery peut dupliquer les données.

Compatibilité des caractères génériques avec les URI Amazon S3

Si vos données source sont séparées en plusieurs fichiers partageant un nom de base commun, vous pouvez utiliser un caractère générique dans l'URI lorsque vous chargez les données. Un caractère générique est constitué d'un astérisque (*) et peut être utilisé n'importe où dans l'URI Amazon S3, sauf dans le nom du compartiment.

Bien que vous puissiez utiliser plusieurs caractères génériques dans l'URI Amazon S3, spécifier un seul caractère générique permet certaines optimisations :

  • Il existe une limite plus élevée sur le nombre maximal de fichiers par exécution de transfert.

  • Le caractère générique couvre également les répertoires. Par exemple, le fichier s3://my-bucket/my-folder/my-subfolder/my-file.csv sera mis en correspondance avec l'URI Amazon S3 s3://my-bucket/*.csv.

Exemples d'URI Amazon S3

Exemple 1

Pour charger un unique fichier depuis Amazon S3 vers BigQuery, spécifiez l'URI Amazon S3 de ce fichier.

s3://my-bucket/my-folder/my-file.csv

Exemple 2

Pour charger tous les fichiers d'un compartiment Amazon S3 dans BigQuery, spécifiez uniquement le nom du compartiment, avec ou sans caractère générique.

s3://my-bucket/

ou

s3://my-bucket/*

Notez que s3://my-bucket* n'est pas un URI Amazon S3 autorisé, car il est interdit d'utiliser un caractère générique dans le nom du compartiment.

Exemple 3

Pour charger depuis Amazon S3 tous les fichiers partageant un préfixe commun, spécifiez ce préfixe suivi d'un caractère générique.

s3://my-bucket/my-folder/*

Contrairement au chargement de l'ensemble des fichiers d'un compartiment Amazon S3 de niveau supérieur, il faut ici spécifier le caractère générique à la fin de l'URI Amazon S3 pour que les fichiers puissent être chargés.

Exemple 4

Pour charger depuis Amazon S3 tous les fichiers ayant un chemin similaire, spécifiez le préfixe commun suivi d'un caractère générique.

s3://my-bucket/my-folder/*.csv

Exemple 5

Notez que les caractères génériques s'appliquent également aux répertoires. Ainsi, tous les fichiers csv figurant dans my-folder ainsi que dans les sous-dossiers de my-folder seront chargés dans BigQuery.

Si ces fichiers sources figurent dans un dossier logs :

s3://my-bucket/logs/logs.csv
s3://my-bucket/logs/system/logs.csv
s3://my-bucket/logs/some-application/system_logs.log
s3://my-bucket/logs/logs_2019_12_12.csv

l'URI suivant les identifie en totalité :

s3://my-bucket/logs/*

Exemple 6

Si vous disposez des fichiers sources suivants, mais que vous souhaitez transférer uniquement ceux portant le nom logs.csv :

s3://my-bucket/logs.csv
s3://my-bucket/metadata.csv
s3://my-bucket/system/logs.csv
s3://my-bucket/system/users.csv
s3://my-bucket/some-application/logs.csv
s3://my-bucket/some-application/output.csv

l'URI suivant identifie tous les fichiers nommés logs.csv :

s3://my-bucket/*logs.csv

Exemple 7

Utiliser plusieurs caractères génériques vous donne davantage de contrôle sur la sélection des fichiers à transférer, au prix de limites plus faibles. Si vous utilisez plusieurs caractères génériques, la correspondance s'arrête pour chacun d'eux à la fin du chemin dans un sous-répertoire. Par exemple, prenons le cas des fichiers source suivants dans Amazon S3 :

s3://my-bucket/my-folder1/my-file1.csv
s3://my-bucket/my-other-folder2/my-file2.csv
s3://my-bucket/my-folder1/my-subfolder/my-file3.csv
s3://my-bucket/my-other-folder2/my-subfolder/my-file4.csv

Si vous avez l'intention de transférer uniquement my-file1.csv et my-file2.csv, utilisez la valeur suivante pour l'URI Amazon S3 :

s3://my-bucket/*/*.csv

Étant donné qu'aucun des caractères génériques ne peut s'appliquer à plusieurs répertoires, cet URI restreint le transfert aux fichiers CSV se trouvant dans my-folder1 et my-other-folder2. Les sous-dossiers ne seront pas inclus dans le transfert.

Clés d'accès AWS

L'ID de clé d'accès et la clé d'accès secrète permettent d'accéder aux données Amazon S3 en votre nom. Il est recommandé de créer un ID de clé d'accès et une clé d'accès secrète uniques spécifiquement pour les transferts Amazon S3 afin de donner un accès minimal au service de transfert de données BigQuery. Pour plus d'informations sur la gestion de vos clés d'accès, consultez la documentation de référence générale AWS.

Considérations relatives à la cohérence

Lorsque vous transférez des données à partir d'Amazon S3, il est possible que certaines de vos données ne soient pas transférées vers BigQuery, en particulier si les fichiers ont été ajoutés au compartiment très récemment. Après son ajout au compartiment, il faut attendre environ 10 minutes avant qu'un fichier ne soit disponible pour le service de transfert de données BigQuery. Dans certains cas, cependant, cela peut prendre plus de 10 minutes.

Pour plus d'informations sur le modèle de cohérence Amazon S3, consultez la page Modèle de cohérence des données Amazon S3 dans la documentation Amazon S3.

Bonnes pratiques concernant les coûts associés aux transferts de données sortantes

Les transferts depuis Amazon S3 peuvent échouer si la table de destination n'a pas été correctement configurée. Une configuration incorrecte peut résulter des problèmes suivants :

  • La table de destination n'existe pas.
  • Le schéma de la table n'est pas défini.
  • Le schéma de la table n'est pas compatible avec les données transférées.

Pour éviter les coûts associés aux transferts de données sortantes Amazon S3, vous devez d'abord tester un transfert avec un sous-ensemble restreint mais représentatif des fichiers. Restreint signifie ici que le test doit porter sur un petit nombre de fichiers, eux-mêmes de petite taille.

Tarifs

Pour plus d'informations sur la tarification du service de transfert de données BigQuery, consultez la page Tarifs.

Notez qu'en utilisant ce service, des coûts peuvent être engagés en dehors de Google. Veuillez consulter la page de tarification d'Amazon S3 pour plus de détails.

Quotas et limites

Le service de transfert de données BigQuery utilise des tâches de chargement pour charger des données Amazon S3 dans BigQuery. Tous les quotas et limites BigQuery associés aux tâches de chargement s'appliquent aux transferts récurrents Amazon S3, avec les considérations supplémentaires suivantes :

Valeur Limit
Taille maximale par exécution de transfert de tâche de chargement 15 To
Nombre maximal de fichiers par exécution de transfert lorsque l'URI Amazon S3 comporte 0 ou 1 caractère générique 10 000 000 fichiers
Nombre maximal de fichiers par exécution de transfert lorsque l'URI Amazon S3 comporte plusieurs caractères génériques 10 000 fichiers

Étapes suivantes