aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorgatorsmile <gatorsmile@gmail.com>2016-11-07 18:34:21 -0800
committerReynold Xin <rxin@databricks.com>2016-11-07 18:34:21 -0800
commit1da64e1fa0970277d1fb47dec8adca47b068b1ec (patch)
treea9eefedc47b08c544cc24863382cd8366df6bed0 /docs
parentc1a0c66bd2662bc40f312da474c3b95229fe92d0 (diff)
downloadspark-1da64e1fa0970277d1fb47dec8adca47b068b1ec.tar.gz
spark-1da64e1fa0970277d1fb47dec8adca47b068b1ec.tar.bz2
spark-1da64e1fa0970277d1fb47dec8adca47b068b1ec.zip
[SPARK-18217][SQL] Disallow creating permanent views based on temporary views or UDFs
### What changes were proposed in this pull request? Based on the discussion in [SPARK-18209](https://issues.apache.org/jira/browse/SPARK-18209). It doesn't really make sense to create permanent views based on temporary views or temporary UDFs. To disallow the supports and issue the exceptions, this PR needs to detect whether a temporary view/UDF is being used when defining a permanent view. Basically, this PR can be split to two sub-tasks: **Task 1:** detecting a temporary view from the query plan of view definition. When finding an unresolved temporary view, Analyzer replaces it by a `SubqueryAlias` with the corresponding logical plan, which is stored in an in-memory HashMap. After replacement, it is impossible to detect whether the `SubqueryAlias` is added/generated from a temporary view. Thus, to detect the usage of a temporary view in view definition, this PR traverses the unresolved logical plan and uses the name of an `UnresolvedRelation` to detect whether it is a (global) temporary view. **Task 2:** detecting a temporary UDF from the query plan of view definition. Detecting usage of a temporary UDF in view definition is not straightfoward. First, in the analyzed plan, we are having different forms to represent the functions. More importantly, some classes (e.g., `HiveGenericUDF`) are not accessible from `CreateViewCommand`, which is part of `sql/core`. Thus, we used the unanalyzed plan `child` of `CreateViewCommand` to detect the usage of a temporary UDF. Because the plan has already been successfully analyzed, we can assume the functions have been defined/registered. Second, in Spark, the functions have four forms: Spark built-in functions, built-in hash functions, permanent UDFs and temporary UDFs. We do not have any direct way to determine whether a function is temporary or not. Thus, we introduced a function `isTemporaryFunction` in `SessionCatalog`. This function contains the detailed logics to determine whether a function is temporary or not. ### How was this patch tested? Added test cases. Author: gatorsmile <gatorsmile@gmail.com> Closes #15764 from gatorsmile/blockTempFromPermViewCreation.
Diffstat (limited to 'docs')
0 files changed, 0 insertions, 0 deletions