2017-02-09 2 views
0

Nos compartiments s3 comportent généralement un certain nombre de sous-répertoires, de sorte que le chemin vers un compartiment ressemble à s3: groupe de fonctions de niveau supérieur/dossier plus spécifique/org-locataire-société-id/entityid/réelles-donnéesEst-il possible de créer une table athena pour les sous-répertoires s3 seau?

Nous examinons dans Athena pour pouvoir interroger contre les données sur ce niveau de données/réel, mais dans l'org-locataire-société-ID, de sorte qu'il devrait être passé comme une sorte de paramètre.

Ou est-ce que org-tenant-company-id serait une partition?

Est-il possible de créer une table athena qui interroge cette structure? Et quel serait l'emplacement s3 sur l'assistant de création de table? Je l'ai essayé avec s3: top-level-function-groupe/more-specific-folder/mais quand il a fonctionné, je pense qu'il a dit quelque chose comme '0 Kb data read'.

+0

Votre plan semble viable pour moi. Pouvez-vous partager l'instruction create table qui n'a pas fonctionné? – James

+0

L'instruction create table initiale a semblé fonctionner; au moins, il n'a pas commis d'erreur; mais il n'a pas non plus chargé de données; Je l'ai encore essayé et je pense que le problème était une colonne qui n'existait pas; maintenant je voudrais le partitionner le long de ce sous-répertoire org-locataire-compagnie-id, mais c'est probablement une question séparée, à moins que vous le sachiez – user26270

Répondre

1

Vous pouvez créer une table partitionnée comme suit, où les clés de partition ne sont définies que dans la cloisonnée par la clause, pas dans la liste des champs de table:

CREATE EXTERNAL TABLE mydb.mytable (
    id int, 
    stuff string, 
    ... 
) 
PARTITIONED BY (
    orgtenantcompanyid string 
) 
LOCATION 's3://mybucket/top-level-function-group/more-specific-folder/'; 

Après avoir créé la table, vous pouvez alors charger partitions individuelles:

ALTER TABLE mydb.mytable ADD PARTITION (orgtenantcompanyid='org1') 
LOCATION 's3://mybucket/top-level-function-group/more-specific-folder/org1'; 

lignes de résultat contiendront les champs de partition comme orgtenantcompanyid.

+0

Merci, mais je pense que nous avons besoin que le partitionnement soit fait automatiquement. Je ne voudrais pas avoir à maintenir les partitions manuellement. il semble que nous devions changer nos sous-répertoires pour qu'ils soient dans un format 'clé = valeur' ​​afin qu'ils soient reconnus automatiquement comme des partitions – user26270

+0

N'auras-tu pas encore besoin d'appeler 'MSCK REPAIR TABLE mydb.mytable'? [Scénario 1: Données déjà partitionnées et stockées sur S3 au format Hive] (http://docs.aws.amazon.com/athena/latest/ug/partitions.html#scenario-1-data-already-partitioned-and- stocké sur-s3-in-hive-format) – James

+0

Je ne sais pas, il n'est pas clair à partir de là si vous devez continuer à appeler cette commande que d'autres partitions sont créées, ou si c'est une chose unique. – user26270