You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "Victoria Markman (JIRA)" <ji...@apache.org> on 2015/04/13 19:51:14 UTC
[jira] [Commented] (DRILL-1651) Allow Filter to push past Project
with ITEM operator
[ https://issues.apache.org/jira/browse/DRILL-1651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14492736#comment-14492736 ]
Victoria Markman commented on DRILL-1651:
-----------------------------------------
Here is even simpler case, not only in HBase:
{code}
0: jdbc:drill:schema=dfs> select * from bigtable;
+------------+------------+------------+
| columns | dir0 | dir1 |
+------------+------------+------------+
| ["123","123","123"] | 2015 | 01 |
| ["123","123","123"] | 2015 | 01 |
| ["123","123","123"] | 2015 | 01 |
| ["123","123","123"] | 2015 | 02 |
| ["123","123","123"] | 2015 | 03 |
| ["123","123","123"] | 2015 | 04 |
| ["123","123","123"] | 2016 | 01 |
+------------+------------+------------+
7 rows selected (0.22 seconds)
0: jdbc:drill:schema=dfs> create view v1 as select * from bigtable;
+------------+------------+
| ok | summary |
+------------+------------+
| true | View 'v1' created successfully in 'dfs.test' schema |
+------------+------------+
1 row selected (0.096 seconds)
0: jdbc:drill:schema=dfs> explain plan for select * from v1 where dir0='2016';
+------------+------------+
| text | json |
+------------+------------+
| 00-00 Screen
00-01 SelectionVectorRemover
00-02 Filter(condition=[=(ITEM($0, 'dir0'), '2016')])
00-03 Scan(groupscan=[EasyGroupScan [selectionRoot=/test/bigtable, numFiles=7, columns=[`*`], files=[maprfs:/test/bigtable/2015/01/t1.csv, maprfs:/test/bigtable/2015/01/t3.csv, maprfs:/test/bigtable/2015/01/t2.csv, maprfs:/test/bigtable/2015/02/t1.csv, maprfs:/test/bigtable/2015/03/t1.csv, maprfs:/test/bigtable/2015/04/t1.csv, maprfs:/test/bigtable/2016/01/t1.csv]]])
| {
"head" : {
"version" : 1,
"generator" : {
"type" : "ExplainHandler",
"info" : ""
},
"type" : "APACHE_DRILL_PHYSICAL",
"options" : [ ],
"queue" : 0,
"resultMode" : "EXEC"
},
"graph" : [ {
"pop" : "fs-scan",
"@id" : 3,
"files" : [ "maprfs:/test/bigtable/2015/01/t1.csv", "maprfs:/test/bigtable/2015/01/t3.csv", "maprfs:/test/bigtable/2015/01/t2.csv", "maprfs:/test/bigtable/2015/02/t1.csv", "maprfs:/test/bigtable/2015/03/t1.csv", "maprfs:/test/bigtable/2015/04/t1.csv", "maprfs:/test/bigtable/2016/01/t1.csv" ],
{code}
> Allow Filter to push past Project with ITEM operator
> ----------------------------------------------------
>
> Key: DRILL-1651
> URL: https://issues.apache.org/jira/browse/DRILL-1651
> Project: Apache Drill
> Issue Type: Improvement
> Components: Query Planning & Optimization, Storage - HBase
> Affects Versions: 0.7.0
> Reporter: Chun Chang
> Assignee: Jinfeng Ni
> Fix For: 1.0.0
>
>
> #Tue Nov 04 16:58:08 UTC 2014
> git.commit.id.abbrev=129cb9c
> I noticed that the following query did not cause a pushdown:
> {code}
> select cast(row_key as integer) student_id, (cast(twocf['age'] as integer)/cast(threecf['gpa'] as float)) from student where row_key < '800' and row_key > '750';
> {code}
> plan:
> {code}
> 00-01 Project(student_id=[CAST($0):INTEGER NOT NULL], EXPR$1=[/(CAST($1):INTEGER, CAST($2):FLOAT)])
> 00-02 SelectionVectorRemover
> 00-03 Filter(condition=[AND(<($0, '800'), >($0, '750'))])
> 00-04 Project(row_key=[$1], ITEM=[ITEM($2, 'age')], ITEM2=[ITEM($0, 'gpa')])
> 00-05 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec [tableName=student, startRow=null, stopRow=null, filter=null], columns=[SchemaPath [`row_key`], SchemaPath [`twocf`.`age`], SchemaPath [`threecf`.`gpa`]]]])
> {code}
> But the following query did:
> {code}
> select cast(row_key as integer) student_id, cast(onecf['name'] as varchar(30)) name, cast(twocf['age'] as integer) age, cast(threecf['gpa'] as decimal(4,2)) gpa, cast(fourcf['studentnum'] as bigint) student_num, cast(fivecf['create_date'] as timestamp) create_date from student where row_key > '750' and row_key < '800';
> {code}
> plan:
> {code}
> 00-01 Project(student_id=[CAST($0):INTEGER NOT NULL], name=[CAST(ITEM($3, 'name')):VARCHAR(30) CHARACTER SET "ISO-8859-1" COLLATE "ISO-8859-1$en_US$primary"], age=[CAST(ITEM($5, 'age')):INTEGER], gpa=[CAST(ITEM($4, 'gpa')):DECIMAL(4, 2)], student_num=[CAST(ITEM($2, 'studentnum')):BIGINT], create_date=[CAST(ITEM($1, 'create_date')):TIMESTAMP(0)])
> 00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec [tableName=student, startRow=750\x00, stopRow=800, filter=FilterList AND (2/2): [RowFilter (GREATER, 750), RowFilter (LESS, 800)]], columns=[SchemaPath [`*`]]]])
> {code}
> Select * caused triggered pushdown:
> {code}
> 0: jdbc:drill:schema=hbase> explain plan for select * from student where row_key < '800' and row_key > '750';
> +------------+------------+
> | text | json |
> +------------+------------+
> | 00-00 Screen
> 00-01 Project(row_key=[$0], fivecf=[$1], fourcf=[$2], onecf=[$3], threecf=[$4], twocf=[$5])
> 00-02 Scan(groupscan=[HBaseGroupScan [HBaseScanSpec=HBaseScanSpec [tableName=student, startRow=750\x00, stopRow=800, filter=FilterList AND (2/2): [RowFilter (LESS, 800), RowFilter (GREATER, 750)]], columns=[SchemaPath [`*`]]]])
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)