La ruche: Créer une Nouvelle Table à partir de l'Existant Table Partitionnée
Je suis en utilisant Amazon Elastic MapReduce et j'ai un tableau de la ruche créé sur la base d'une série de fichiers journaux stockés dans Amazon S3 et split dans des dossiers par jour comme suit:
- de données/jour=2011-09-01/log_file.tsv
- de données/jour=2011-09-02/log_file.tsv
Je suis en train d'essayer de créer une table supplémentaire qui filtre non désirés de l'activité dans ces fichiers journaux, mais je ne peux pas comprendre comment le faire et de garder des erreurs telles que:
FAILED: Error in semantic analysis: need to specify partition columns because the destination table is partitioned.
Si ma première création de table déclaration ressemble à quelque chose comme ceci:
CREATE EXTERNAL TABLE IF NOT EXISTS table1 (
... fields ...
)
PARTITIONED BY ( DAY STRING )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 's3://bucketname/data/';
De cette première table fonctionne très bien et j'ai été capable de faire une requête sans problèmes.
Alors, comment devrais-je créer une nouvelle table qui partage la structure de la précédente, mais simplement de filtrer les données? Cela ne semble pas fonctionner.
CREATE EXTERNAL TABLE IF NOT EXISTS table2 LIKE table1;
FROM table1
INSERT OVERWRITE TABLE table2
SELECT * WHERE
col1 = '%somecriteria%' AND
more criteria...
;
Comme je l'ai mentionné ci-dessus, cela renvoie:
FAILED: Error in semantic analysis: need to specify partition columns because the destination table is partitioned.
Merci!
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne toujours pour moi:
Notez que j'ai ajouté "jour" comme une colonne dans l'instruction SELECT. Notez également qu'il est un ALTER TABLE ligne qui est nécessaire pour la Ruche afin de prendre conscience des partitions qui ont été nouvellement créés dans table2.
Je n'ai jamais utilisé le
like
option.. donc merci pour me montrer que. Va que créer toutes les partitions de la première table a ainsi? Si non, qui pourrait être le problème. Vous pouvez essayer d'utiliser partitions dynamiques:Peut-être pas la meilleure solution, comme je pense que vous devez spécifier vos colonnes dans la
select clause
(ainsi que la partition de la colonne dans lapartition clause
).Et, vous devez activer partitionnement dynamique.
J'espère que cette aide.