MaxGekk opened a new pull request #27804: 
[SPARK-31020][SPARK-31023][SPARK-31025][SPARK-31044][SQL] Support foldable args 
by `from_csv/json` and `schema_of_csv/json`
URL: https://github.com/apache/spark/pull/27804
 
 
   ### What changes were proposed in this pull request?
   In the PR, I propose:
   
   1. To replace matching by `Literal` in `ExprUtils.evalSchemaExpr()` to 
checking foldable property of the `schema` expression.
   2. To replace matching by `Literal` in `ExprUtils.evalTypeExpr()` to 
checking foldable property of the `schema` expression.
   3. To change checking of the input parameter in the `SchemaOfCsv` 
expression, and allow foldable `child` expression.
   4. To change checking of the input parameter in the `SchemaOfJson` 
expression, and allow foldable `child` expression.
   
   Closes #27771
   Closes #27774
   Closes #27777
   Closes #27797
   
   ### Why are the changes needed?
   This should improve Spark SQL UX for `from_csv`/`from_json`. Currently, 
Spark expects only literals:
   ```sql
   spark-sql> select from_csv('1,Moscow', replace('dpt_org_id INT, dpt_org_city 
STRING', 'dpt_org_', ''));
   Error in query: Schema should be specified in DDL format as a string literal 
or output of the schema_of_csv function instead of replace('dpt_org_id INT, 
dpt_org_city STRING', 'dpt_org_', '');; line 1 pos 7
   spark-sql> select from_json('{"id":1, "city":"Moscow"}', replace('dpt_org_id 
INT, dpt_org_city STRING', 'dpt_org_', ''));
   Error in query: Schema should be specified in DDL format as a string literal 
or output of the schema_of_json function instead of replace('dpt_org_id INT, 
dpt_org_city STRING', 'dpt_org_', '');; line 1 pos 7
   ```
   and only string literals are acceptable as CSV examples by 
`schema_of_csv`/`schema_of_json`:
   ```sql
   spark-sql> select schema_of_csv(concat_ws(',', 0.1, 1));
   Error in query: cannot resolve 'schema_of_csv(concat_ws(',', CAST(0.1BD AS 
STRING), CAST(1 AS STRING)))' due to data type mismatch: The input csv should 
be a string literal and not null; however, got concat_ws(',', CAST(0.1BD AS 
STRING), CAST(1 AS STRING)).; line 1 pos 7;
   'Project [unresolvedalias(schema_of_csv(concat_ws(,, cast(0.1 as string), 
cast(1 as string))), None)]
   +- OneRowRelation
   spark-sql> select schema_of_json(regexp_replace('{"item_id": 1, 
"item_price": 0.1}', 'item_', ''));
   Error in query: cannot resolve 'schema_of_json(regexp_replace('{"item_id": 
1, "item_price": 0.1}', 'item_', ''))' due to data type mismatch: The input 
json should be a string literal and not null; however, got 
regexp_replace('{"item_id": 1, "item_price": 0.1}', 'item_', '').; line 1 pos 7;
   'Project [unresolvedalias(schema_of_json(regexp_replace({"item_id": 1, 
"item_price": 0.1}, item_, )), None)]
   +- OneRowRelation
   ```
   
   ### Does this PR introduce any user-facing change?
   Yes, after the changes users can pass any foldable string expression as the 
`schema` parameter to `from_csv()/from_json()`. For the example above:
   ```sql
   spark-sql> select from_csv('1,Moscow', replace('dpt_org_id INT, dpt_org_city 
STRING', 'dpt_org_', ''));
   {"id":1,"city":"Moscow"}
   spark-sql> select from_json('{"id":1, "city":"Moscow"}', replace('dpt_org_id 
INT, dpt_org_city STRING', 'dpt_org_', ''));
   {"id":1,"city":"Moscow"}
   ```
   After change the `schema_of_csv`/`schema_of_json` functions accept foldable 
expressions, for example:
   ```sql
   spark-sql> select schema_of_csv(concat_ws(',', 0.1, 1));
   struct<_c0:double,_c1:int>
   spark-sql> select schema_of_json(regexp_replace('{"item_id": 1, 
"item_price": 0.1}', 'item_', ''));
   struct<id:bigint,price:double>
   ```
   
   ### How was this patch tested?
   Added new test to `CsvFunctionsSuite` and to `JsonFunctionsSuite`.

----------------------------------------------------------------
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:
us...@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to