[ https://issues.apache.org/jira/browse/DRILL-6489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Volodymyr Vysotskyi updated DRILL-6489: --------------------------------------- Labels: ready-to-commit (was: ) > Fix filter push down for Hbase & Mapr-DB binary tables when convert function > is used in a view > ---------------------------------------------------------------------------------------------- > > Key: DRILL-6489 > URL: https://issues.apache.org/jira/browse/DRILL-6489 > Project: Apache Drill > Issue Type: Bug > Components: Storage - HBase, Storage - MapRDB > Affects Versions: 1.13.0 > Reporter: Arina Ielchiieva > Assignee: Arina Ielchiieva > Priority: Major > Labels: ready-to-commit > Fix For: 1.14.0 > > > Query > {noformat} > select convert_from(byte_substr(row_key, 1, 8), 'date_epoch_be') as d > from hbase.`t` > where convert_from(byte_substr(row_key, 1, 8), date_epoch_be') = date > '2015-06-13'; > {noformat} > returns plan with the push down: > {noformat} > 00-00 Screen > 00-01 Project(d=[CONVERT_FROMDATE_EPOCH_BE(BYTE_SUBSTR($0, 1, 8))]) > 00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec > [tableName=TestTableCompositeDate, startRow=\x00\x00\x01M\xEA7D\x00, > stopRow=\x00\x00\x01M\xEF]\xA0\x00, filter=null], columns=[`row_key`]]]) > {noformat} > While the same query in a view does not: > {noformat} > create view dfs.tmp.v as select convert_from(byte_substr(row_key, 1, 8), > 'date_epoch_be') as d from hbase.`t`; > select d from dfs.tmp.v where d = date '2015-06-13'; > {noformat} > {noformat} > 00-00 Screen > 00-01 Project(d=[CONVERT_FROMDATE_EPOCH_BE(BYTE_SUBSTR($0, 1, 8))]) > 00-02 SelectionVectorRemover > 00-03 Filter(condition=[=(CONVERT_FROMDATE_EPOCH_BE(BYTE_SUBSTR($0, > 1, 8)), 2015-06-13)]) > 00-04 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec > [tableName=TestTableCompositeDate, startRow=null, stopRow=null, filter=null], > columns=[`row_key`]]]) > {noformat} > The problem that {{CompareFunctionsProcessor}} waits for > {{ConvertExpression}} but receives {{FunctionCall}} with convert function. If > convert function first appears in filter it is re-presented as > {{ConvertExpression}} (case without view). If convert function first appears > in select is re-presented as {{FunctionCall}} for convert function (case with > view). The reason of such difference is the appliance of the > {{PreProcessLogicalRel}} visitor. The solution in this case would be to check > {{FunctionCall}} in CompareFunctionsProcessor}} and if this function call for > convert from function, process it as {{ConvertExpression}}. > https://github.com/apache/drill/blob/master/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/CompareFunctionsProcessor.java#L171 > https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java#L667 -- This message was sent by Atlassian JIRA (v7.6.3#76005)