2017-07-05 9 views
-1

udfを方解石に追加します。 udfのパラメータはテーブル名で、varchar値が返されます。これのサンプルはありますか?ありがとう。udfを追加する方法パラメータはテーブル名です

私のテストSQLは次のとおりです。

SELECT MYTEST22(a), MYTEST(a), MYTEST1(a), COUNT(*) 
FROM alisis.table1 
WHERE a=max_dt(alisis.table1) 
GROUP BY MYTEST22(a),MYTEST(a),MYTEST1(a) 

max_dtは、私が追加したい機能です。

+0

質問を編集して[これまでのコード](http://whathaveyoutried.com)を表示してください。問題を抱えているコードのアウトライン(ただし、好ましくは[mcve])を含める必要があります。次に、特定の問題を解決することができます。 [ask]も読んでください。 –

答えて

1

あなたのやりたいことがわかりません。あなたは明確な説明をすることができますか?

パラメータにはtableを受け入れることはできません。パラメータには特定の型、String、Intなどが必要です。したがって、constantsおよびcolumnsをパラメータとして使用できます。あなたの意味は、パラメータとしてテーブル名である場合は、次のように、SQLは次のようになります。

SELECT MYTEST22(a), MYTEST(a), MYTEST1(a), COUNT(*) 
FROM alisis.table1 
WHERE a=max_dt('alisis.table1') 
GROUP BY MYTEST22(a),MYTEST(a),MYTEST1(a) 

私が知られているように、すべての機能方解石は(バージョンが1.11である)サポートがSqlStdOperatorTableで定義されています。あなたが他の機能をサポートしたい場合は、例えば、SqlStdOperatorTableを拡張するクラスを実装することができます

public class TestOperatorTable extends SqlStdOperatorTable { 
    private static volatile TestOperatorTable instance; 
    public static TestOperatorTable instance() { 
    if (instance == null) { 
     synchronized(TestOperatorTable.class) { 
     if (instance == null) { 
      instance = new TestOperatorTable(); 
      // Use reflection to register the expressions stored in public fields. 
      instance.init(); 
     } 
     } 
    } 
    return instance; 
    } 

    /** Follow add your functions */ 
    public static SqlFunction LTRIM = new SqlTrimFunction("LTRIM"); 
} 

SqlTrimFunctionを次のように:あなたはたとえばSqlValidatorImplため、SqlValidatorを作成

public class SqlTrimFunction extends SqlFunction { 
    public SqlTrimFunction(String funcName) { 
    super(
     funcName, 
     SqlKind.OTHER_FUNCTION, 
     ReturnTypes.VARCHAR_2000, // return type is String 
     InferTypes.FIRST_KNOWN, 
     OperandTypes.STRING,  // parameter type is String 
     SqlFunctionCategory.STRING 
    ); 
    } 
} 

、あなたがすべき最初のパラメータとしてTestOperatorTableを使用してください。

+0

はい、私がサポートしたい機能は、パラメータとしてテーブル名を持っています。私のテストSQLには構文エラーがあります。私はクラスを実装しようとします。非常にマッハーありがとう! –

+0

@ fei.chen、この回答を受け入れることができます。 – inferno

+0

@ fei.chen https://stackoverflow.com/a/44962144/1314077これはUDFを追加するのに役立ちますが、SqlStdOperatorTableを拡張しないでください。 – inferno

関連する問題