2016-02-18 9 views
5

Ich möchte einen Spark SQL DataFrame aus den Ergebnissen einer Abfrage über CSV-Daten (auf HDFS) mit Apache Drill erstellen. I erfolgreich konfiguriert Spark-SQL, um es über JDBC zu machen eine Verbindung zu bohren:Integration von Spark SQL und Apache Drill über JDBC

Map<String, String> connectionOptions = new HashMap<String, String>(); 
connectionOptions.put("url", args[0]); 
connectionOptions.put("dbtable", args[1]); 
connectionOptions.put("driver", "org.apache.drill.jdbc.Driver"); 

DataFrame logs = sqlc.read().format("jdbc").options(connectionOptions).load(); 

Spark-SQL führt zwei Abfragen: das erste, das Schema zu erhalten, und die zweite die aktuelle Daten abzurufen:

SELECT * FROM (SELECT * FROM dfs.output.`my_view`) WHERE 1=0 

SELECT "field1","field2","field3" FROM (SELECT * FROM dfs.output.`my_view`) 

Die erste ist erfolgreich, aber in der zweiten schließt Spark Felder in doppelten Anführungszeichen ein, was Drill nicht unterstützt, daher schlägt die Abfrage fehl.

Hat jemand diese Integration funktioniert?

Vielen Dank!

Antwort

1

können Sie JDBC Dialect für diese hinzufügen und den Dialekt registrieren, bevor jdbc Anschluss

case object DrillDialect extends JdbcDialect { 

    def canHandle(url: String): Boolean = url.startsWith("jdbc:drill:") 

    override def quoteIdentifier(colName: java.lang.String): java.lang.String = { 
    return colName 
    } 

    def instance = this 
} 

JdbcDialects.registerDialect(DrillDialect) 
+0

mit Das sieht aus wie Scala, aber Frage des OP in Java war. – paisanco

+0

Stimmt, ich akzeptiere dennoch die Antwort, da sie mich auf JdbcDialect verweist. Vielen Dank! –