Création de tableau de la ruche à l'aide de parquet fichier de métadonnées
J'ai écrit un DataFrame que le parquet de fichier. Et, je voudrais lire le fichier à l'aide de la Ruche à l'aide de métadonnées à partir de parquet.
Sortie de l'écriture parquet écrire
_common_metadata part-r-00000-0def6ca1-0f54-4c53-b402-662944aa0be9.gz.parquet part-r-00002-0def6ca1-0f54-4c53-b402-662944aa0be9.gz.parquet _SUCCESS
_metadata part-r-00001-0def6ca1-0f54-4c53-b402-662944aa0be9.gz.parquet part-r-00003-0def6ca1-0f54-4c53-b402-662944aa0be9.gz.parquet
Tableau de la ruche
CREATE TABLE testhive
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
'/home/gz_files/result';
FAILED: SemanticException [Error 10043]: Either list of columns or a custom serializer should be specified
Comment puis-je en déduire les méta-données de parquet fichier?
Si j'ouvre la _common_metadata
j'ai contenu ci-dessous,
PAR1LHroot
%TSN%
%TS%
%Etype%
)org.apache.spark.sql.parquet.row.metadata▒{"type":"struct","fields":[{"name":"TSN","type":"string","nullable":true,"metadata":{}},{"name":"TS","type":"string","nullable":true,"metadata":{}},{"name":"Etype","type":"string","nullable":true,"metadata":{}}]}
Ou comment analyser les méta-données du fichier?
- Avez-vous essayer avec la nouvelle ruche de syntaxe? cwiki.apache.org/confluence/display/Hive/Parquet
- Il fonctionne si j'ajoute les noms de colonne. Mais, parquet au schéma de méta-informations.
Vous devez vous connecter pour publier un commentaire.
Voici une solution que j'ai trouver pour obtenir les métadonnées de parquet fichiers afin de créer un tableau de la Ruche.
D'abord lancer une étincelle-shell (Ou de compiler le tout dans un Bocal et l'exécuter avec l'étincelle de la soumettre, mais la coquille est SOO beaucoup plus facile)
Il va vous fournir les types de données que la Ruche à utiliser pour chaque colonne, car ils sont stockés en Parquet.
E. G:
CREATE EXTERNAL TABLE test_table (COL1 Decimal(38,10), COL2 String, COL3 Timestamp) STORED AS PARQUET LOCATION '/path/to/parquet/files'
creatingTableDDL("test_table",df,"test_db")
a 3 arguments, mais la définition de la méthode 2. Quel est le but de l'argument"test_db"
?creatingTableDDL("test_table",df)
seraitJ'aimerais étendre sur James Tobin réponse. Il y a un StructField classe qui fournit Ruche types de données, sans faire la chaîne de remplacement.
Cela résout le IntegerType problème.
Cela devrait fonctionner avec n'importe quel DataFrame, non seulement avec le Parquet. (par exemple, je suis en utilisant ce avec JDBC DataFrame.)
Comme un bonus supplémentaire, si votre cible DDL prend en charge nullable colonnes, vous pouvez étendre la fonction en cochant
StructField.nullable
.Une petite amélioration par rapport à Victor (ajout de citations sur le terrain.nom) et modifié pour lier la table locale de parquet fichier (testé sur la spark 1.6.1)
Également remarquer que:
table externe.
Je voudrais élargir James réponse,
Le code suivant fonctionne pour tous les types de données, y compris le TABLEAU, à la CARTE et STRUCT.
Avons testé SPARK 2.2
En fait, l'Impala prend en charge
(pas de section colonnes au total):
http://www.cloudera.com/content/www/en-us/documentation/archive/impala/2-x/2-1-x/topics/impala_create_table.html
Les balises de votre question ont "la ruche" et "l'étincelle" et je ne vois pas ce qui est mis en œuvre dans la Ruche, mais dans le cas où vous utilisez le CDH, il est peut-être ce que vous cherchez.
J'ai eu la même question. Il pourrait être difficile à mettre en œuvre à partir de pratcical côté si, comme le Parquet prend en charge l'évolution des schémas:
http://www.cloudera.com/content/www/en-us/documentation/archive/impala/2-x/2-0-x/topics/impala_parquet.html#parquet_schema_evolution_unique_1
Par exemple, vous pouvez ajouter une nouvelle colonne à votre table et vous n'avez pas à modifier les données qui sont déjà dans la table. C'est uniquement les nouveaux fichiers de données ont de nouvelles métadonnées (compatible avec la version précédente).
Schéma de fusion est désactivé par défaut depuis Étincelle 1.5.0, car il est "opération relativement coûteuse"
http://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging
Donc inférer le plus récent schéma peut ne pas être aussi simple qu'il y paraît. Bien que rapide et sale approches sont tout à fait possible, par exemple, par l'analyse de la sortie de