[ https://issues.apache.org/jira/browse/CALCITE-2741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16736820#comment-16736820 ]
Lai Zhou edited comment on CALCITE-2741 at 1/8/19 7:17 AM: ----------------------------------------------------------- [~julianhyde], I there a right way to add local fileld declarations into the bind method of 'Baz' class? {code:java} public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) {code} I write a new NotNullImplementor for hive operators, that returns a expression like {code:java} org.apache.calcite.hivesql.function.HiveUDFInvoke.invokeGenericUdfGetBoolean(udfInstance_1, new Object[] {...) {code} the udfInstance_1 is a hive generic udf instance that should be constructed at the beginning of the bind method block, like {code:java} public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) { final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_2 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("OR", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_3 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("AND", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_4 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("<", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInst ance_1 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("=", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_0 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance(">", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_5 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("SUBSTR", org.apache.calcite.sql.SqlSyntax.FUNCTION); final org.apache.calcite.linq4j.Enumerable _inputEnumerable = org.apache.calcite.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("DEFAULT_SCH"), java.lang.Object[].class, "T").asEnumerable(); {code} I think it'd be better to stash the local field declarations when implement a RexCall.But the RexToLixTranslator did not hold a reference of EnumerableRelImplementor, can you give me some suggestions to support this feature? (now I use an arbitrary way to support it ,just use a ThreadLocal context to stash things, and clear all things when parse a new sql query ). was (Author: hhlai1990): [~julianhyde], I there a right way to add local fileld declarations into the bind method of 'Baz' class? {code:java} public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) {code} I write a new NotNullImplementor for hive operators, that returns a expression like {code:java} org.apache.calcite.hivesql.function.HiveUDFInvoke.invokeGenericUdfGetBoolean(udfInstance_1, new Object[] {...) {code} the udfInstance_1 is a hive generic udf instance that should be constructed at the beginning of the bind method block, like {code:java} public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) { final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_2 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("OR", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_3 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("AND", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_4 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("<", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInst ance_1 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("=", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_0 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance(">", org.apache.calcite.sql.SqlSyntax.BINARY); final org.apache.hadoop.hive.ql.udf.generic.GenericUDF udfInstance_5 = org.apache.calcite.hivesql.function.HiveUDFInvoke.createGenericUDFInstance("SUBSTR", org.apache.calcite.sql.SqlSyntax.FUNCTION); final org.apache.calcite.linq4j.Enumerable _inputEnumerable = org.apache.calcite.schema.Schemas.queryable(root, root.getRootSchema().getSubSchema("DEFAULT_SCH"), java.lang.Object[].class, "T").asEnumerable(); {code} I think it'd be better to stash the local field declarations when implement a RexCall.But the RexToLixTranslator did not hold a reference of EnumerableRelImplementor, can you give me some suggestions to support this feature? (now I use a arbitrary way to support it ,just use a ThreadLocal context to stash things, and clear all things when parse a new sql query ). > Add operator table with Hive-specific built-in functions > -------------------------------------------------------- > > Key: CALCITE-2741 > URL: https://issues.apache.org/jira/browse/CALCITE-2741 > Project: Calcite > Issue Type: New Feature > Components: core > Reporter: Lai Zhou > Assignee: Julian Hyde > Priority: Minor > > [~julianhyde], > I extended the native enummerable implemention of calcite to support Hive sql > ,include UDF、UDAF and all the SqlSpecialOperator,which inspired by apache > Drills. > I modified the parser,type systems,and bridge the hive operator . > How do you think of supporting a direct implemention of hive sql like this? > I think it will be valueable when someone want to migrate his hive etl jobs > to real-time scene. -- This message was sent by Atlassian JIRA (v7.6.3#76005)