2015-09-25 37 views
4

我有一個Spark實例,我試圖連接到現有的Netezza數據倉庫應用程序以檢索一些數據。如何從Spark SQLContext連接到Netezza數據庫

使用SparkSQL的SQLContext,並根據Spark SQL Programming Guide,這是可以用read方法實現的。我確定我需要使用--jars標誌提供JDBC驅動程序,而不是像文檔中那樣提供SPARK_CLASSPATH。操作看起來像

// pyspark 
df = sqlContext.read.format('jdbc').options(...).load() 

// spark-shell 
val df = sqlContext.read.format("jdbc").options(...).load() 

我可以找到一些關於使用JDBC連接到Netezza的文檔,但不是如何正確傳遞用戶名和密碼。我需要通過這裏的'選項'是什麼?

回答

1

pyspark

df = sqlContext.read.format('jdbc').options(url='jdbc:netezza://server1:5480/DATABASE', \ 
    user='KIRK', password='****', dbtable='SCHEMA.MYTABLE', \ 
    driver='org.netezza.Driver').load() 

spark-shell

val df = sqlContext.read.format("jdbc").options(Map(
      "url" -> "jdbc:netezza://server1:5480/DATABASE", 
      "user" -> "KIRK", 
      "password" -> "****", 
      "dbtable" -> "SCHEMA.MYTABLE", 
      "driver" -> "org.netezza.Driver")).load() 

注意,Netezza公司喜歡在全部大寫的事情。我不知道這是否有必要,但它並沒有傷害。

+0

關於ALL CAPS評論的說明:在幾乎所有Netezza系統的實踐中都是如此。但是,有一個允許系統視圖使用全部小寫值的配置設置。所以,如果大寫不起作用,那麼也嘗試小寫。 – Tim

+0

嗨,而不是加載整個表,我可以傳遞一個查詢呢? –

+0

@sriharikalicharanTummala是的,你可以。如果你包含一個子查詢和一個別名(例如x),它就可以爲你工作 - 例如'「(SELECT * FROM表,其中id = 1)x」' –