1. 程式人生 > >phoenix學習第三節 User-defined functions(UDFs) 自定義函式

phoenix學習第三節 User-defined functions(UDFs) 自定義函式

User-defined functions(UDFs)

自定義函式

U 概要

使用者可以建立臨時/永久的函式。UDF可以與查詢中的內建函式一樣使用,例如select,upsert,delete,create functions index。臨時函式在特定的回話和連線中生效,但是不能在其他的回話和連線中使用。永久函式的元資訊將儲存在SYSTEM.FUNCION的系統表中。支援租戶特定函式,在特定的租戶的連線中建立的函式對於其他的租戶是不可見的。只有全域性租戶的UDF才可以在所有的連線中可見。

pheonix使用hbase的動態類載入jar,在客戶端和regionserver上動態載入jar。不需要重啟服務。

1.配置

在phoenix的客戶端的hbase-site.xml檔案中配置

<property>
  <name>phoenix.functions.allowUserDefinedFunctions</name>
  <value>true</value>
</property>
<property>
  <name>fs.hdfs.impl</name>
  <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
</property>
<property>
  <name>hbase.rootdir</name>
  <value>${hbase.tmp.dir}/hbase</value>
</property>
<property>
  <name>hbase.dynamic.jars.dir</name>
  <value>${hbase.rootdir}/lib</value>
</property>

hbase.rootdir 。這是一個共享目錄。預設在 臨時/tmp下,需要自己配置修改,因為重啟伺服器未見回丟失,也可以配置hdfs 例如:hdfs://namenode.ehl.com:9000/hbase

hbase.dynamic.jars.dir 這個目錄是phoenix 客戶端/regionserver獲取自定義udf的jar的地方。不需要重啟服務。

下面還有兩個配置需要修改

使用jdbc配置的時候如下:

Properties props = new Properties();
props.setProperty("phoenix.functions.allowUserDefinedFunctions", "true");
Connection conn = DriverManager.getConnection("jdbc:phoenix:localhost", props);

還有udf的jar動態的下載到這個地址

<property>
  <name>hbase.local.dir</name>
  <value>${hbase.tmp.dir}/local/</value>
  <description>Directory on the local filesystem to be used
    as a local storage.</description>
</property>

2.建立自定義函式 
Creating Custom UDFs

1.實現一個自定義的udf的jar     2.上傳jar到hdfs目錄的 hbase.dynamic.jars.dir中

      3.執行 create function的語句

 怎麼樣建立udf的jar呢

    1.建立一個class 實現這個介面 org.apache.phoenix.expression.function.ScalarFunction

 2.實現gteDataType的方法,這個方法將返回一個function型別。

 3.實現evaluate方法,這個是用於計算結果中的row的。