[ 
https://issues.apache.org/jira/browse/DRILL-6965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16831893#comment-16831893
 ] 

ASF GitHub Bot commented on DRILL-6965:
---------------------------------------

vvysotskyi commented on pull request #1777: DRILL-6965: Implement schema table 
function parameter
URL: https://github.com/apache/drill/pull/1777#discussion_r280474815
 
 

 ##########
 File path: 
exec/java-exec/src/main/java/org/apache/drill/exec/record/metadata/schema/SchemaProviderFactory.java
 ##########
 @@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill.exec.record.metadata.schema;
+
+import org.apache.drill.exec.planner.sql.handlers.SchemaHandler;
+import org.apache.drill.exec.planner.sql.parser.SqlSchema;
+import org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory;
+import org.apache.hadoop.fs.Path;
+
+import java.io.IOException;
+
+/**
+ * Factory class responsible for creating different instances of schema 
provider based on given parameters.
+ */
+public class SchemaProviderFactory {
+
+  /**
+   * Creates schema provider for sql schema commands.
+   *
+   * @param sqlSchema sql schema call
+   * @param schemaHandler schema handler
+   * @return schema provider instance
+   * @throws IOException if unable to init schema provider
+   */
+  public static SchemaProvider create(SqlSchema sqlSchema, SchemaHandler 
schemaHandler) throws IOException {
+    if (sqlSchema.hasTable()) {
+      String tableName = sqlSchema.getTableName();
+      WorkspaceSchemaFactory.WorkspaceSchema wsSchema = 
schemaHandler.getWorkspaceSchema(sqlSchema.getSchemaPath(), tableName);
+      return new FsMetastoreSchemaProvider(wsSchema, tableName);
+    } else {
+      return new PathSchemaProvider(new Path(sqlSchema.getPath()));
+    }
+  }
+
+  /**
+   * Creates schema provider based table function schema parameter.
+   *
+   * @param parameterValue schema parameter value
+   * @return schema provider instance
+   * @throws IOException if unable to init schema provider
+   */
+  public static SchemaProvider create(String parameterValue) throws 
IOException {
+    String[] split = parameterValue.split("=", 2);
+    if (split.length != 2) {
 
 Review comment:
   Is it makes sense to change this check to something like `split.length < 2` 
since `split` length cannot be greater than 2?
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Adjust table function usage for all storage plugins and implement schema 
> parameter
> ----------------------------------------------------------------------------------
>
>                 Key: DRILL-6965
>                 URL: https://issues.apache.org/jira/browse/DRILL-6965
>             Project: Apache Drill
>          Issue Type: Sub-task
>            Reporter: Arina Ielchiieva
>            Assignee: Arina Ielchiieva
>            Priority: Major
>              Labels: doc-impacting
>             Fix For: 1.17.0
>
>
> Schema can be used while reading the table into two ways:
>  a. schema is created in the table root folder using CREATE SCHEMA command 
> and schema usage command is enabled;
>  b. schema indicated in table function.
>  This Jira implements point b.
> Schema indication using table function is useful when user does not want to 
> persist schema in table root location or when reading from file, not folder.
> Schema parameter can be used as individual unit or in together with for 
> format plugin table properties.
> Usage examples:
> Pre-requisites: 
>  V3 reader must be enabled: {{set `exec.storage.enable_v3_text_reader` = 
> true;}}
> Query examples:
> 1. There is folder with files or just one file (ex: dfs.tmp.text_table) and 
> user wants to apply schema to them:
>  a. indicate schema inline:
> {noformat}
> select * from table(dfs.tmp.`text_table`(
> schema => 'inline=(col1 date properties {`drill.format` = `yyyy-MM-dd`}) 
> properties {`drill.strict` = `false`}'))
> {noformat}
> To indicate only table properties use the following syntax:
> {noformat}
> select * from table(dfs.tmp.`text_table`(
> schema => 'inline=() 
> properties {`drill.strict` = `false`}'))
> {noformat}
> b. indicate schema using path:
>  First schema was created in some location using CREATE SCHEMA command. For 
> example:
> {noformat}
> create schema 
> (col int)
> path '/tmp/my_schema'
> {noformat}
> Now user wants to apply this schema in table function:
> {noformat}
> select * from table(dfs.tmp.`text_table`(schema => 'path=`/tmp/my_schema`'))
> {noformat}
> 2. User wants to apply schema along side with format plugin table function 
> parameters.
>  Assuming that user has CSV file with headers with extension that does not 
> comply to default text file with headers extension (ex: cars.csvh-test):
> {noformat}
> select * from table(dfs.tmp.`cars.csvh-test`(type => 'text', 
> fieldDelimiter => ',', extractHeader => true,
> schema => 'inline=(col1 date)'))
> {noformat}
> More details about syntax can be found in design document:
>  
> [https://docs.google.com/document/d/1mp4egSbNs8jFYRbPVbm_l0Y5GjH3HnoqCmOpMTR_g4w/edit]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to