Gérer les mises à jour du schéma - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gérer les mises à jour du schéma

Cette section fournit des conseils sur le traitement des mises à jour de schémas pour divers formats de données. Athena est un moteur de schema-on-read requêtes. Cela signifie que lorsque vous créez une table dans Athena, elle s'applique aux schémas lors de la lecture des données. Elle ne modifie ni ne réécrit les données sous-jacentes.

Si vous anticipez des modifications dans les schémas de table, envisagez de les créer dans un format de données qui est adapté à vos besoins. Vos objectifs sont de réutiliser les requêtes Athena existantes dans des schémas qui évoluent et d'éviter les erreurs de concordance de schéma lors de requêtes sur des tables avec des partitions.

Pour atteindre ces objectifs, choisissez un format de données pour la table en fonction de celle-ci dans la rubrique suivante.

Opérations de mise à jour de schéma prises en charge par format de données

Le tableau suivant récapitule les formats de stockage de données et les manipulations de schéma prises en charge correspondantes. Utilisez ce tableau pour vous aider à choisir le format qui vous permettra de continuer à utiliser les requêtes Athena, même lorsque vos schémas évoluent au fil du temps.

Dans ce tableau, notez que Parquet et C ORC sont des formats en colonnes avec différentes méthodes d'accès aux colonnes par défaut. Par défaut, Parquet accède aux colonnes par nom et ORC par index (valeur ordinale). Athena fournit donc une SerDe propriété définie lors de la création d'une table pour activer la méthode d'accès aux colonnes par défaut, ce qui permet une plus grande flexibilité lors de l'évolution du schéma.

Pour Parquet, la propriété parquet.column.index.access peut être définie sur true, ce qui définit la méthode d'accès aux colonnes pour utiliser le numéro ordinal de la colonne. La définition de cette propriété sur false change la méthode d'accès aux colonnes pour utiliser le nom de colonne. De même, pour ORC utiliser la orc.column.index.access propriété pour contrôler la méthode d'accès aux colonnes. Pour de plus amples informations, veuillez consulter Comprendre l'accès aux index pour Apache ORC et Apache Parquet.

CSVet vous TSV permettent d'effectuer toutes les manipulations du schéma, à l'exception de la réorganisation des colonnes ou de l'ajout de colonnes au début du tableau. Par exemple, si l'évolution de votre schéma nécessite uniquement de renommer les colonnes sans les supprimer, vous pouvez choisir de créer vos tables dans CSV ouTSV. Si vous devez supprimer des colonnes, n'utilisez pas CSV ou TSV utilisez plutôt l'un des autres formats pris en charge, de préférence un format en colonnes, tel que Parquet ouORC.

Mises à jour de schéma et formats de données dans Athena
Type de mise à jour de schéma attendue Récapitulatif CSV(avec et sans en-têtes) et TSV JSON AVRO PARQUET: Lire par nom (par défaut) PARQUET: Lecture par index ORC: lecture par index (par défaut) ORC: lu par nom
Changement de nom de colonne Stockez vos données dans CSV et TSV ou dans ORC Parquet si elles sont lues par index. Y N N N Y Y N
Ajouter des colonnes au début ou au milieu de la table Stockez vos données dans JSONAVRO, ou dans Parquet et ORC si elles sont lues nominativement. Ne pas utiliser CSV etTSV. N Y Y Y N N Y
Ajouter des colonnes à la fin de la table Stockez vos données dans CSV orTSV,JSON, AVROORC, ou Parquet. Y Y Y Y Y Y Y
Supprimer des colonnes Stockez vos données dans JSONAVRO, ou Parquet etORC, si elles sont lues par leur nom. Ne pas utiliser CSV etTSV. N Y Y Y N N Y
Réorganiser des colonnes Stockez vos données dans AVRO JSON ou ORC dans Parquet si elles sont lues nominativement. N Y Y Y N N Y
Modifier le type de données d'une colonne Stockez vos données dans n'importe quel format, mais testez votre requête dans Athena pour vous assurer que les types de données sont compatibles. Pour Parquet etORC, la modification d'un type de données ne fonctionne que pour les tables partitionnées. Y Y Y Y Y Y Y

Comprendre l'accès aux index pour Apache ORC et Apache Parquet

PARQUETet ORC sont des formats de stockage de données en colonnes qui peuvent être lus par index ou par nom. Le stockage de vos données dans l'un ou l'autre de ces formats vous permet d'effectuer toutes les opérations sur les schémas et d'exécuter des requêtes Athena sans erreur de non-concordance de schéma.

  • Athena lit ORC par index par défaut, comme défini dans. SERDEPROPERTIES ( 'orc.column.index.access'='true') Pour de plus amples informations, veuillez consulter ORC: Lecture par index.

  • Athena lit Parquet par nom par défaut, comme défini dans SERDEPROPERTIES ( 'parquet.column.index.access'='false'). Pour de plus amples informations, veuillez consulter Parquet : Lecture par nom.

Comme il s'agit de valeurs par défaut, la spécification de ces SerDe propriétés dans vos CREATE TABLE requêtes est facultative, elles sont utilisées implicitement. Lorsqu'elles sont utilisées, elles vous permettent d'exécuter certaines opérations de mise à jour de schéma tout en empêchant d'autres opérations. Pour activer ces opérations, exécutez une autre CREATE TABLE requête et modifiez les SerDe paramètres.

Note

Les SerDe propriétés ne sont pas automatiquement propagées à chaque partition. Utilisez ALTER TABLE ADD PARTITION des instructions pour définir les SerDe propriétés de chaque partition. Pour automatiser ce processus, écrivez un script qui exécute les instructions ALTER TABLE ADD PARTITION.

Les sections suivantes décrivent ces cas en détail.

ORC: Lecture par index

Par défaut, une table ORCest lue par index. Ce comportement est défini par la syntaxe suivante :

WITH SERDEPROPERTIES ( 'orc.column.index.access'='true')

La lecture par index vous permet de renommer des colonnes. Mais vous perdez alors la possibilité de supprimer des colonnes ou d'en ajouter au milieu de la table.

Pour effectuer une ORC lecture par nom, ce qui vous permettra d'ajouter des colonnes au milieu du tableau ou d'en supprimerORC, définissez la SerDe propriété orc.column.index.access sur false dans l'CREATE TABLEinstruction. Dans cette configuration, vous perdrez la possibilité de renommer des colonnes.

Note

Dans la version 2 du moteur Athena, lorsque ORC les tables sont définies pour être lues par nom, Athena exige que tous les noms de colonnes des ORC fichiers soient en minuscules. Comme Apache Spark ne met pas les noms de champs en minuscules lorsqu'il génère des ORC fichiers, Athena risque de ne pas être en mesure de lire les données ainsi générées. La solution consiste à renommer les colonnes pour qu'elles soient en minuscules ou à utiliser la version 3 du moteur Athena.

L'exemple suivant montre comment modifier le ORC pour qu'il soit lu par son nom :

CREATE EXTERNAL TABLE orders_orc_read_by_name ( `o_comment` string, `o_orderkey` int, `o_custkey` int, `o_orderpriority` string, `o_orderstatus` string, `o_clerk` string, `o_shippriority` int, `o_orderdate` string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'orc.column.index.access'='false') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/orders_orc/';

Parquet : Lecture par nom

Une table au format Parquet est lue par nom, par défaut. Ce comportement est défini par la syntaxe suivante :

WITH SERDEPROPERTIES ( 'parquet.column.index.access'='false')

La lecture par nom vous permet d'ajouter des colonnes au milieu de la table et de supprimer des colonnes. Mais vous perdez alors la possibilité de renommer des colonnes.

Pour que Parquet soit lu par index, ce qui vous permettra de renommer les colonnes, vous devez créer une table dont la parquet.column.index.access SerDe propriété est définie sur. true