2016-02-18 5 views
5

Apache DrillでCSVデータ(HDFS上)で実行されたクエリの結果からSpark SQL DataFrameを作成したいとします。私は成功し、それがJDBC経由でドリルに接続するためにスパークSQLを設定した:スキーマを取得する最初のもの、および実際のデータを取得するための第二1:Spark SQLとApacheドリルによるJDBCの統合

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

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

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(); 

スパークSQLは、2つのクエリを実行します

最初の1つは成功ですが、2番目のSparkはダブルクォート内のフィールドを囲んでいます。これはドリルではサポートされていないため、クエリは失敗します。

誰かがこの統合を有効にできましたか?

ありがとうございました!

答えて

1

あなたはこのためにJDBC方言を追加し、これは、Scalaのように見えますが、OPの質問には、JavaにあったJDBCコネクタに

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

を使用する前に、方言を登録することができます。 – paisanco

+0

それにもかかわらず、私はJdbcDialectを指し示すので答えを受け入れます。ありがとう! –

関連する問題