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的。