[ https://issues.apache.org/jira/browse/DRILL-7308?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16871990#comment-16871990 ]
Paul Rogers edited comment on DRILL-7308 at 6/25/19 5:27 AM: ------------------------------------------------------------- The width issue appears to have been introduced with this commit: "DRILL-6847: Add Query Metadata to RESTful Interface" (which, ahem, [~cgivre], was your PR...). In {{WebUserConnection}}: {code:java} //For DECIMAL type if (col.getType().hasPrecision()) { dataType.append("("); dataType.append(col.getType().getPrecision()); if (col.getType().hasScale()) { dataType.append(", "); dataType.append(col.getType().getScale()); } dataType.append(")"); } else if (col.getType().hasWidth()) { //Case for VARCHAR columns with specified width dataType.append("("); dataType.append(col.getType().getWidth()); dataType.append(")"); } {code} I did not debug the code, but it appears that {{hasPrecision()}} and {{hasScale()}} simply report if the field is set; it does *not* tell us if the field is zero. Also, about a year or so ago, Drill moved {{VARCHAR}} width to the precision field, so the supposed {{VARCHAR}} code block is a no-op. The correct code would be something like: {code:java} //For DECIMAL and VARCHAR types if (col.getType().hasPrecision() && col.getType().getPrecision() > 0) { dataType.append("("); dataType.append(col.getType().getPrecision()); if (col.getType().hasScale() && col.getType().getScale() > 0) { {code} was (Author: paul.rogers): The width issue appears to have been introduced with this commit: "DRILL-6847: Add Query Metadata to RESTful Interface" (which, ahem, [~cgivre], was your PR...): {code:java} //For DECIMAL type if (col.getType().hasPrecision()) { dataType.append("("); dataType.append(col.getType().getPrecision()); if (col.getType().hasScale()) { dataType.append(", "); dataType.append(col.getType().getScale()); } dataType.append(")"); } else if (col.getType().hasWidth()) { //Case for VARCHAR columns with specified width dataType.append("("); dataType.append(col.getType().getWidth()); dataType.append(")"); } {code} I did not debug the code, but it appears that {{hasPrecision()}} and {{hasScale()}} simply report if the field is set; it does *not* tell us if the field is zero. Also, about a year or so ago, Drill moved {{VARCHAR}} width to the precision field, so the supposed {{VARCHAR}} code block is a no-op. The correct code would be something like: {code:java} //For DECIMAL and VARCHAR types if (col.getType().hasPrecision() && col.getType().getPrecision() > 0) { dataType.append("("); dataType.append(col.getType().getPrecision()); if (col.getType().hasScale() && col.getType().getScale() > 0) { {code} > Incorrect Metadata from text file queries > ----------------------------------------- > > Key: DRILL-7308 > URL: https://issues.apache.org/jira/browse/DRILL-7308 > Project: Apache Drill > Issue Type: Bug > Components: Metadata > Affects Versions: 1.17.0 > Reporter: Charles Givre > Priority: Major > Attachments: Screen Shot 2019-06-24 at 3.16.40 PM.png, domains.csvh > > > I'm noticing some strange behavior with the newest version of Drill. If you > query a CSV file, you get the following metadata: > {code:sql} > SELECT * FROM dfs.test.`domains.csvh` LIMIT 1 > {code} > {code:json} > { > "queryId": "22eee85f-c02c-5878-9735-091d18788061", > "columns": [ > "domain" > ], > "rows": [} > { "domain": "thedataist.com" } ], > "metadata": [ > "VARCHAR(0, 0)", > "VARCHAR(0, 0)" > ], > "queryState": "COMPLETED", > "attemptedAutoLimit": 0 > } > {code} > There are two issues here: > 1. VARCHAR now has precision > 2. There are twice as many columns as there should be. > Additionally, if you query a regular CSV, without the columns extracted, you > get the following: > {code:json} > "rows": [ > { > "columns": "[\"ACCT_NUM\",\"PRODUCT\",\"MONTH\",\"REVENUE\"]" } > ], > "metadata": [ > "VARCHAR(0, 0)", > "VARCHAR(0, 0)" > ], > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)