Comment charger des données à hive à partir de HDFS sans supprimer le fichier source?

quand charger des données de HDFS à Hive, en utilisant

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

commande, on dirait que c'est le déplacement de la hdfs_file hive/warehouse dir. Est-ce possible (Comment?) pour le copier au lieu de le déplacer, dans l'ordre, pour que le fichier soit utilisé par un autre processus.

42
demandé sur Athafoud 2011-09-27 14:23:32

3 réponses

a partir de votre question, je suppose que vous avez déjà vos données en hdfs. Si vous n'avez pas besoin de LOAD DATA, qui déplace les fichiers vers l'emplacement de la ruche par défaut /user/hive/warehouse. Vous pouvez simplement définir la table en utilisant le external mot-clé, qui laisse les fichiers en place, mais crée la définition de la table dans le métastore de la ruche. Voir ici: Create Table DDL par exemple.:

create external table table_name (
  id int,
  myfields string
)
location '/my/location/in/hdfs';

veuillez noter que le format que vous utilisez peut différer du format par défaut (tel que mentionné par JigneshRawal dans le commentaire.) Vous pouvez utiliser votre propre délimiteur, par exemple en utilisant Sqoop:

row format delimited fields terminated by ','
78
répondu Dag 2016-02-10 13:27:09

j'ai trouvé que, quand vous utilisez la TABLE externe et L'emplacement ensemble, La Ruche crée la table et initialement aucune donnée ne sera présentée (en supposant que votre emplacement de données est différent de l '"emplacement" de la ruche).

lorsque vous utilisez la commande 'LOAD DATA INPATH', les données sont déplacées (au lieu de copier) de l'emplacement des données à l'emplacement que vous avez spécifié lors de la création de la table Ruche.

si l'emplacement n'est pas indiqué lorsque vous créez la table de ruche, il utilise l'emplacement de l'entrepôt de Ruche interne et les données seront déplacées de votre emplacement de données source à l'emplacement d'entrepôt de données interne de Ruche (i.e. /user/ruche/warehouse/).

4
répondu Avinash 2017-02-06 12:46:15

une alternative aux' données de charge ' est disponible dans laquelle les données ne seront pas déplacées de votre emplacement de source existant à l'emplacement de l'entrepôt de données de ruche.

Vous pouvez utiliser la commande ALTER TABLE avec l'option 'LOCATION'. Voici ci-dessous la commande requise

ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'

la seule condition ici est que l'emplacement soit un répertoire au lieu d'un fichier.

Espérons que cela permettra de résoudre le problème.

3
répondu Avinash 2017-02-06 14:05:34