2016-05-31 4 views
0

ich eine Tabelle in Hive haben, der die folgende Struktur aufweist:cloudera Impalas jdbc Abfrage sieht nicht Array <string> Hive Spalte

> describe volatility2; 
Query: describe volatility2 
+------------------+---------------+---------+ 
| name    | type   | comment | 
+------------------+---------------+---------+ 
| version   | int   |   | 
| unmappedmkfindex | int   |   | 
| mfvol   | array<string> |   | 
+------------------+---------------+---------+ 

Es Spark HiveContext Code erstellt wurde, indem ein Dataframe API wie folgt aus:

val volDF = hc.createDataFrame(volRDD) 
volDF.saveAsTable(volName) 

die sich über die RDD Struktur getragen, die im Schema definiert wurde:

def schemaVolatility: StructType = StructType(
    StructField("Version", IntegerType, false) :: 
    StructField("UnMappedMKFIndex", IntegerType, false) :: 
    StructField("MFVol", DataTypes.createArrayType(StringType), true) :: Nil) 

Wenn ich jedoch versuche, mit dem neuesten JDBC-Impala-Treiber aus dieser Tabelle auszuwählen, ist die letzte Spalte nicht sichtbar. Meine Frage ist sehr einfach - versuchen, die Daten an die Konsole zu drucken - genau wie im Codebeispiel durch den Treiber-Download zur Verfügung gestellt:

String sqlStatement = "select * from default.volatility2"; 
Class.forName(jdbcDriverName); 
con = DriverManager.getConnection(connectionUrl); 
Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery(sqlStatement); 
System.out.println("\n== Begin Query Results ======================"); 

ResultSetMetaData metadata = rs.getMetaData(); 
for (int i=1; i<=metadata.getColumnCount(); i++) { 
    System.out.println(rs.getMetaData().getColumnName(i)+":"+rs.getMetaData().getColumnTypeName(i)); 
} 
System.out.println("== End Query Results =======================\n\n"); 

Die Konsolenausgabe es das:

== Begin Query Results ====================== 
version:version 
unmappedmkfindex:unmappedmkfindex 
== End Query Results ======================= 

Ist es ein Treiberfehler oder mir fehlt etwas?

Antwort

0

Ich fand die Antwort auf meine eigene Frage. Veröffentlichen Sie es hier, damit es anderen hilft und Zeit beim Suchen spart. Anscheinend hat Impala in letzter Zeit die sogenannte "komplexe Typen" -Unterstützung für ihre SQL eingeführt, zu denen unter anderem das Array gehört. Der Link zum Dokument ist dies:

http://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_complex_types.html#complex_types_using

nach dem, was ich tun musste, ist die Abfrage ändern wie folgt aussehen:

select version, unmappedmkfindex, mfvol.ITEM from volatility2, volatility2.mfvol 

und ich habe die richtigen erwarteten Ergebnisse zurück