2017-07-07 4 views
1

J'essaye de charger des colonnes spécifiques dans Redshift Spectrum, mais il semble que les données soient chargées positionnellement, ce qui signifie que peu importe ce que je mets pour les noms de colonnes.Comment charger des colonnes spécifiques formatées en parquet dans le spectre Redshift?

Pour rendre plus concrète:

Disons que les données que je veux charger est stocké positionnelle en parquet sous forme de colonnes A, B, C. Je ne veux que la colonne B, donc j'écrire:

create external table spectrum.Foo(
    B varchar(500) 
) 
STORED AS PARQUET 
LOCATION 's3://data/'; 

Malheureusement, quand je fais ça, il charge en fait les données de A dans Foo.B

y at-il une syntaxe supplémentaire j'ai besoin. J'ai parcouru la documentation mais je n'ai rien trouvé.

Merci!

Répondre

0

La définition de la table externe ne charge pas les données dans Redshift - elle vous permet simplement de l'interroger. Si vous souhaitez acquérir un sous-ensemble des colonnes, vous pouvez essayer l'ensemble des requêtes suivantes:

create external table spectrum.Foo(
    A varchar(100), B varchar(100), C varchar(100) 
) stored as parquet location 's3://data/'; 

Ceci définit le schéma externe:

create table local_data as select A, C from spectrum.Foo; 

Ce sera essentiellement charger uniquement les colonnes spécifiées de la table externe dans une table locale dans Redshift. Cependant, vous n'avez pas besoin de le faire: L'avantage de Redshift du spectre et du parquet est que lorsque vous exécutez la requête:

select A, C from spectrum.Foo; 

il ne chargera les données de S3 pour les colonnes accessibles, ce qui réduit le nombre de Opérations d'E/S vers S3 et réduction des coûts.

+0

Merci pour l'explication claire! – user5976738