av9ash/GitBugs huggingface dataset:
Bug: Can't set resources (GPU/FPGA) to 0 when they are set to positive value in spark-defaults.conf
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 21/Jun/23 14:14
Affects Version/s: 3.2.0

With resource aware scheduling, if you specify a default value in the spark-defaults.conf, a user can't override that to set it to 0.

Meaning spark-defaults.conf has something like:
{{spark.executor.resource.\{resourceName}.amount=1}}

{{spark.task.resource.\{resourceName}.amount}} =1

If the user tries to override when submitting an application with {{{}spark.executor.resource.\{resourceName}.amount{}}}=0 and {{spark.task.resource.\{resourceName}.amount}} =0, it gives the user an error:

 
{code:java}
23/06/21 09:12:57 ERROR Main: Failed to initialize Spark session.
org.apache.spark.SparkException: No executor resource configs were not specified for the following task configs: gpu
        at org.apache.spark.resource.ResourceProfile.calculateTasksAndLimitingResource(ResourceProfile.scala:206)
        at org.apache.spark.resource.ResourceProfile.$anonfun$limitingResource$1(ResourceProfile.scala:139)
        at scala.Option.getOrElse(Option.scala:189)
        at org.apache.spark.resource.ResourceProfile.limitingResource(ResourceProfile.scala:138)
        at org.apache.spark.resource.ResourceProfileManager.addResourceProfile(ResourceProfileManager.scala:95)
        at org.apache.spark.resource.ResourceProfileManager.<init>(ResourceProfileManager.scala:49)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:455)
        at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2704)
        at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:953){code}
This used to work, my guess is this may have gotten broken with the stage level scheduling feature.
Bug: Fix QueryExecutionErrorsSuite
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 25/Jun/23 07:55
Affects Version/s: 3.5.0

after [https://bugs.openjdk.org/browse/JDK-8292914]

The format of the lambda-class name change from

`<declaring_class>$$Lambda$<counter>/#<hidden_class_reference>`

to

`<declaring_class>$$Lambda/#<hidden_class_reference>`
Bug: Document Spark Connect only API in PySpark 
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 21/Jun/23 15:16
Affects Version/s: 3.4.0

https://issues.apache.org/jira/browse/SPARK-41255
https://issues.apache.org/jira/browse/SPARK-43509
https://issues.apache.org/jira/browse/SPARK-43612
https://issues.apache.org/jira/browse/SPARK-43790

added four Spark Connect only API to Spark Session. We should document them.
Bug: Forked unit tests don't receive proxy system properties
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 20/Jun/23 17:42
Affects Version/s: 3.3.2

Spark unit tests fail in an enterprise environment that requires the use of a proxy for external network access.  These tests are configured to run as forked JVMs, and don't receive the system properties used to configure the proxy settings for Java.

Updating the SBT build to propagate the system properties that are related to proxying addresses the issue.  The tested patch checks for any system properties that starts with `http.` or `https.` and adds them to the `jvmOptions` of the forked process.
Bug: Utility to convert python types to spark types compares Python "type" object rather than user's "tpe" for categorical data types
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 22/Jun/23 12:05
Affects Version/s: 3.4.0

In the typehints utility that converts python types to spark types, the line:
{code:java}
    # categorical types
    elif isinstance(tpe, CategoricalDtype) or (isinstance(tpe, str) and type == "category"):
        return types.LongType() {code}
uses Python's 'type' keyword in the comparison. Hence, it will always be false. Here, the user's type is actually stored in the variable 'tpe'.

 

 

See line [here|https://github.com/apache/spark/blob/1b4048bf62dddae7d324c4b12aa409a1bd456dc5/python/pyspark/pandas/typedef/typehints.py#LL217C7-L217C7].
Bug: Support positional parameters in PySpark sql()
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 22/Jun/23 07:30
Affects Version/s: 3.5.0

As a follow-up to the parameterized query we added recently, we’d like to support positional parameters. This is part of the SQL standard and JDBC/ODBC protocol.

Example: update COFFEES set TOTAL = TOTAL + ? where COF_NAME = ?

Note that positional and named param marker cannot be used in the same query.
Bug: Support positional parameters in parameterized query
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 15/Jun/23 08:13
Affects Version/s: 3.5.0

As a follow-up to the parameterized query we added recently, we’d like to support positional parameters. This is part of the SQL standard and JDBC/ODBC protocol.

Example: update COFFEES set TOTAL = TOTAL + ? where COF_NAME = ?

Note that positional and named param marker cannot be used in the same query.
Bug: StateManager may get materialized in executor instead of driver in FlatMapGroupsWithStateExec
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 21/Jun/23 21:08
Affects Version/s: 3.3.0

StateManager may get materialized in executor instead of driver in FlatMapGroupsWithStateExec because of a previous change https://issues.apache.org/jira/browse/SPARK-40411
Bug: Improve error message when UDF execution fails
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 14/Jun/23 16:49
Affects Version/s: 3.1.1

If a user has multiple UDFs defined with the same method signature it is hard to figure out which one caused the issue from the function class alone. For example, in Spark 3.1.1:
{code}
Caused by: org.apache.spark.SparkException: Failed to execute user defined function(UDFRegistration$$Lambda$666/1969461119: (bigint, string) => string)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificPredicate.subExpr_0$(Unknown Source)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificPredicate.eval(Unknown Source)
	at org.apache.spark.sql.execution.FilterExec.$anonfun$doExecute$3(basicPhysicalOperators.scala:249)
	at org.apache.spark.sql.execution.FilterExec.$anonfun$doExecute$3$adapted(basicPhysicalOperators.scala:248)
	at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:513)
	at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:458)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.agg_doAggregateWithKeys_0$(Unknown Source)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
	at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
	at org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:755)
	at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:458)
	at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:131)
	at org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59)
	at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
	at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52)
	at org.apache.spark.scheduler.Task.run(Task.scala:131)
	at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$3(Executor.scala:523)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1535)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:526)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException

This is the end of the stack trace. I didn't truncate it.
{code}

If the SQL API is used the ScalaUDF will have a name. It should be part of the error to help debug.
Bug: Remove duplicate preferred locations of each RDD partition
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 20/Jun/23 15:08
Affects Version/s: 3.5.0

DAGScheduler will get the preferred locations for each RDD partition and try to allocate the task on the preferred locations.

We can remove the duplicate preferred locations to save memory.

For example. reduce 0 needs to fetch map0 output and map1 output in host-A, then the preferred locations can be Array("host-A").
Bug: SPIP: PySpark Test Framework
Status: Open | Priority: Major | Resolution: 
Created: 13/Jun/23 14:26
Affects Version/s: 3.5.0

Currently, there's no official PySpark test framework, but only various open-source repos and blog posts. Many of these open-source resources are very popular, which demonstrates user-demand for PySpark testing capabilities. [spark-testing-base|https://github.com/holdenk/spark-testing-base] has 1.4k stars, and [chispa|https://github.com/MrPowers/chispa] has 532k downloads/month. However, it can be confusing for users to piece together disparate resources to write their own PySpark tests (see [The Elephant in the Room: How to Write PySpark Tests|https://towardsdatascience.com/the-elephant-in-the-room-how-to-write-pyspark-unit-tests-a5073acabc34]). We can streamline and simplify the testing process by incorporating test features, such as a PySpark Test Base class (which allows tests to share Spark sessions) and test util functions (for example, asserting dataframe and schema equality). Please see the full SPIP document attached: [https://docs.google.com/document/d/1OkyBn3JbEHkkQgSQ45Lq82esXjr9rm2Vj7Ih_4zycRc/edit#heading=h.f5f0u2riv07v].
Bug: Assign name & improve error message for frequent LEGACY errors.
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 08/Jun/23 02:48
Affects Version/s: 3.5.0

This addresses _LEGACY_ERROR_TEMP_1333, _LEGACY_ERROR_TEMP_2331, _LEGACY_ERROR_TEMP_0023, _LEGACY_ERROR_TEMP_1157, _LEGACY_ERROR_TEMP_2308, _LEGACY_ERROR_TEMP_1051, _LEGACY_ERROR_TEMP_1029, _LEGACY_ERROR_TEMP_1318
Bug: Add date time functions to Scala and Python - part 1
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 01:41
Affects Version/s: 3.5.0

Add following functions:

* date_diff
* date_from_unix_date
* date_part
* dateadd
* datepart
* day

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Clear persistent objects before SQL analyzer golden file tests
Status: Open | Priority: Major | Resolution: 
Created: 20/Jun/23 21:19
Affects Version/s: 3.5.0

For example, SQL golden file test output in files like 
{code:java}
sql/core/src/test/resources/sql-tests/analyzer-results/hll.sql.out {code}
should not fail with "already exists" errors like this:

 
{code:java}
-- !query
CREATE TABLE t1 USING JSON AS VALUES (0), (1), (2), (2), (2), (3), (4) as tab(col)
-- !query analysisorg.apache.spark.sql.catalyst.analysis.TableAlreadyExistsException {code}
Bug: Cannot parse Type from german "umlaut"
Status: Open | Priority: Major | Resolution: 
Created: 20/Jun/23 14:52
Affects Version/s: 3.3.0

Hello all, 

 

I have a client that has a column named : bfzgtäeil

Spark cannot handle this. My test: 

 
{code:java}
import org.apache.spark.sql.catalyst.parser.CatalystSqlParser
import org.scalatest.funsuite.AnyFunSuite

class HiveTest extends AnyFunSuite {

  test("test that Spark does not cut columns with ä") {
    val data = "bfzugtäeil:string"
    CatalystSqlParser.parseDataType(data)
  }

} {code}
I debugged it and I'm deep on the  org.antlr.v4.runtime.Lexer class. 

Any ideas ? 

 
{code:java}
== SQL ==bfzugtäeil:string------^^^
	at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:306)	at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:143)	at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parseDataType(ParseDriver.scala:41)	at com.deutschebahn.zod.fvdl.commons.spark.app.captured.HiveTest2.$anonfun$new$1(HiveTest2.scala:13) {code}
Bug: Add try_* functions to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 05:32
Affects Version/s: 3.5.0

Add following functions:

* try_add
* try_avg
* try_divide
* try_element_at
* try_multiply
* try_subtract
* try_sum
* try_to_binary
* try_to_number
* try_to_timestamp

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Unable to create spark session when master URL set to k8s in spark 3.3.0
Status: Open | Priority: Major | Resolution: 
Created: 20/Jun/23 05:56
Affects Version/s: 3.3.0

Getting below error while creating Spark Session using JAVA 

 

Error in executing job: 
org.apache.spark.SparkException: Could not parse Master URL: 'k8s://[https://kubernetes.default.svc.cluster.local:443|https://kubernetes.default.svc.cluster.local/]'
    at org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2982)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:563)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2704)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:953)
    at scala.Option.getOrElse(Option.scala:189)

 

This was working fine with spark version 3.0.1, after upgrading spark version to 3.3.0. its starting throwing above error. 

 

Below are the Dependency version we used.

Spark Core 3.3.0

Spark Kubernetes Jar 3.3.0

io.fabrics dependency with version 5.12.2

 

We are not using spark-submit rather submitting spark application using java code
Bug: Add date time functions to Scala and Python - part 2
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 16/Jun/23 03:09
Affects Version/s: 3.5.0

Add following functions:

* weekday
* convert_timezone
* extract
* now
* timestamp_micros
* timestamp_millis

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add string functions to Scala and Python - part 1
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 05:46
Affects Version/s: 3.5.0

Add following functions:

* char
* btrim
* char_length
* character_length
* chr
* contains
* elt
* find_in_set
* like
* ilike
* lcase
* ucase
* len
* left
* right


to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add string functions to Scala and Python - part 2
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 06:14
Affects Version/s: 3.5.0

Add following functions:

* replace
* split_part
* substr
* parse_url
* printf
* url_decode
* url_encode
* position
* endswith
* startswith


to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add bit operations to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 01:37
Affects Version/s: 3.5.0

Add following functions:
* bit_and
* bit_count
* bit_get
* bit_or
* bit_xor
* getbit

to:
* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Define UnresolvedNode trait to reduce redundancy
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 15/Jun/23 18:46
Affects Version/s: 3.5.0

Looking at [unresolved.scala|https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/unresolved.scala], spark would benefit from an {{UnresolvedNode}} trait that various {{UnresolvedFoo}} classes could inherit from:
{code:java}
trait UnresolvedNode extends LogicalPlan {
  override def output: Seq[Attribute] = Nil
  override lazy val resolved = false
}{code}
Today, the code is duplicated in ~20 locations.
Bug: Upgrade ammonite to 2.5.9
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 13/Jun/23 14:03
Affects Version/s: 3.5.0

For support Scala 2.12.18 & 2.13.11

 

already has a tag : [https://github.com/com-lihaoyi/Ammonite/releases/tag/2.5.9]
Bug: Update the incorrect sql example of insert table documentation
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 16/Jun/23 02:15
Affects Version/s: 3.3.3

Latest docs of insert table has an incorrect sql example about 'Insert Using a Typed Date Literal for a Partition Column Value'.

It should be
{code:java}
INSERT OVERWRITE students PARTITION (birthday = date'2019-01-02') VALUES('Jason Wang', '908 Bird St, Saratoga'); {code}
Doc link: https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-table.html#insert-using-a-typed-date-literal-for-a-partition-column-value-1
Bug: Add ifnull,isnotnull,equal_null,nullif,nvl,nvl2 to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 04:09
Affects Version/s: 3.5.0

Add following functions:

* -not-
* -if-
* ifnull
* isnotnull
* equal_null
* nullif
* nvl
* nvl2

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add any_value, approx_percentile,count_if,first_value,histogram_numeric,last_value to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 05:43
Affects Version/s: 3.5.0

Add following functions:

* any_value
* approx_percentile
* count_if
* first_value
* histogram_numeric
* last_value
* reduce

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add make_* functions to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 01:46
Affects Version/s: 3.5.0

Add following functions:

* make_dt_interval
* make_interval
* make_timestamp
* make_timestamp_ltz
* make_timestamp_ntz
* make_ym_interval

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Add current_* functions to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 01:48
Affects Version/s: 3.5.0

Add following functions:

* curdate
* current_catalog
* current_database
* current_schema
* current_timezone
* current_user
* user

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Basic saving / loading implementation
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 06/Jun/23 12:31
Affects Version/s: 3.5.0

Support saving/loading  for estimator / transformer / evaluator / model.

We have some design goals:
 * The model format is decoupled from spark, i.e. we can run model inference without spark service.
 * We can save model to either local file system or cloud storage file system.
Bug: Add regexp_* functions to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 02:06
Affects Version/s: 3.5.0

Add following functions:

* rlike
* regexp
* regexp_count
* regexp_extract_all
* regexp_instr
* regexp_like
* regexp_substr

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Artifacts with name as an absolute path may overwrite other files 
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 09/Jun/23 12:23
Affects Version/s: 3.5.0

In `SparkConnectAddArtifactsHandler`, an artifact being moved to a staging location may overwrite another file when the `name`/`path` of the artifact is an `absolute` path. 

This happens when the [stagedPath|https://github.com/apache/spark/blob/master/connector/connect/server/src/main/scala/org/apache/spark/sql/connect/service/SparkConnectAddArtifactsHandler.scala#L172] is being computed with the help of the `.resolve(...)` method where the `resolve` method returns the `other` path (in this case, the name of the artifact) if the `other` path is an absolute path.
Bug: Add maxCharsPerRow option for CSV datasource
Status: Open | Priority: Major | Resolution: 
Created: 13/Jun/23 08:35
Affects Version/s: 3.4.0

CSV datasource supports maxColumns and maxCharsPerColumn options. But those two options do not allow limit row size properly.

For instance, if I want to limit the row size to be less than or equal to 100, and I set maxColumns to 10 and maxCharsPerColumn to 10, then
# User can not read column with size > 10 even if row size <= 100
# User can not read more than 10 columns even if row size <= 100

I suggest to add additional option maxCharsPerRow
Bug: Add to_* functions to Scala and Python
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 02/Jun/23 04:13
Affects Version/s: 3.5.0

Add following functions:

* str_to_map
* to_binary
* to_char
* to_number
* to_timestamp_ltz
* to_timestamp_ntz
* to_unix_timestamp

to:

* Scala API
* Python API
* Spark Connect Scala Client
* Spark Connect Python Client
Bug: Unresolved hint cause query failure
Status: Resolved | Priority: Major | Resolution: Won't Fix
Created: 08/Jun/23 09:19
Affects Version/s: 3.3.1

After the Resolve Hints Rules are completed, immediately remove unknown Hints to *avoid query errors caused by Unresolved Hints.*

Query error: 
{code:java}
// create t0,t1
CREATE TABLE t0(c0 bigint) USING PARQUET 
CREATE TABLE t1(c1 bigint) USING PARQUET

// query with unknown hint
 with w0 as (select * from t0),
 w1 as (select c0 from w0 group by c0),
 w2 as (select  /*+ userHint(t1) */  c1 from t1 ),
 w3 as (
 select w2.c1, w0.c0, w1.c0
 from w2 
 join w0 on w2.c1 = w0.c0
 join w1 on w2.c1 = w1.c0
 )
 select * from w3;

23/06/08 17:25:23 WARN HintErrorLogger: Unrecognized hint: userHint(t1)
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `w2`.`c1` cannot be resolved. Did you mean one of the following? [`w2`.`c1`, `w0`.`c0`].; line 8 pos 11;
'WithCTE
:- CTERelationDef 4, false
:  +- SubqueryAlias w0
:     +- Project [c0#0L]
:        +- SubqueryAlias spark_catalog.default.t0
:           +- Relation spark_catalog.default.t0[c0#0L] parquet
:- CTERelationDef 5, false
:  +- SubqueryAlias w1
:     +- Aggregate [c0#0L], [c0#0L]
:        +- SubqueryAlias w0
:           +- CTERelationRef 4, true, [c0#0L]
:- CTERelationDef 6, false
:  +- SubqueryAlias w2
:     +- Project [c1#1L]
:        +- SubqueryAlias spark_catalog.default.t1
:           +- Relation spark_catalog.default.t1[c1#1L] parquet
:- 'CTERelationDef 7, false
:  +- 'SubqueryAlias w3
:     +- 'Project ['w2.c1, 'w0.c0, 'w1.c0]
:        +- 'Join Inner, ('w2.c1 = 'w1.c0)
:           :- Join Inner, (c1#1L = c0#0L)
:           :  :- SubqueryAlias w2
:           :  :  +- CTERelationRef 6, true, [c1#1L]
:           :  +- SubqueryAlias w0
:           :     +- CTERelationRef 4, true, [c0#0L]
:           +- SubqueryAlias w1
:              +- CTERelationRef 5, true, [c0#0L]
+- 'Project [*]
   +- 'SubqueryAlias w3
      +- 'CTERelationRef 7, false


// query without unknown hint
 with w0 as (select * from t0),
 w1 as (select * from w0 group by c0),
 w2 as (select c1 from t1 ),
 w3 as (
 select w2.c1, w0.c0, w1.c0
 from w2 
 join w0 on w2.c1 = w0.c0
 join w1 on w2.c1 = w1.c0
 )
 select * from w3;  
Time taken: 12.666 seconds


{code}