This is an automated email from the ASF dual-hosted git repository.

zkaoudi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/wayang-website.git


The following commit(s) were added to refs/heads/main by this push:
     new c6ee441c docs: add GSoC 2026 datalake blog (#129)
c6ee441c is described below

commit c6ee441c1aee27fcb976c31c7b81ef8df4fca841
Author: JunWang222 <[email protected]>
AuthorDate: Fri Aug 21 14:40:17 2026 +0800

    docs: add GSoC 2026 datalake blog (#129)
    
    * docs: add GSoC 2026 datalake blog
    
    * docs: update datalake blog hero image
    
    ---------
    
    Co-authored-by: 冰糖小葫芦 <[email protected]>
---
 ...026-08-20-gsoc-2026-datalake-friendly-wayang.md | 136 +++++++++++++++++++++
 blog/authors.yml                                   |   5 +
 static/img/blog/wayang-datalake/hero_image.png     | Bin 0 -> 168500 bytes
 3 files changed, 141 insertions(+)

diff --git a/blog/2026-08-20-gsoc-2026-datalake-friendly-wayang.md 
b/blog/2026-08-20-gsoc-2026-datalake-friendly-wayang.md
new file mode 100644
index 00000000..341eee6d
--- /dev/null
+++ b/blog/2026-08-20-gsoc-2026-datalake-friendly-wayang.md
@@ -0,0 +1,136 @@
+---
+slug: gsoc-2026-datalake-friendly-wayang
+title: "GSoC 2026: Making Apache Wayang More Datalake-Friendly"
+authors: [jun.wang]
+tags: [wayang, gsoc, trino, presto, bigquery, duckdb, parquet]
+---
+
+# GSoC 2026: Making Apache Wayang More Datalake-Friendly
+
+This blog post summarizes my Google Summer of Code 2026 project for Apache 
Wayang. The original goal, "Make Wayang More Datalake-Friendly", was to 
integrate modern analytical SQL engines and Parquet-based data sources into 
Wayang's optimization and execution framework.
+
+Apache Wayang lets users describe a data-processing pipeline once and then 
either choose an execution platform or let Wayang's optimizer decide where the 
pipeline should run. This matters for modern analytical workloads because data 
is often no longer stored inside a single database. It may live as Parquet 
files in object storage, in federated catalogs queried by Trino or Presto, in a 
serverless warehouse such as BigQuery, or in local analytical files processed 
by DuckDB. The project foc [...]
+
+<div style={{textAlign: 'center'}}>
+  <img width="90%" alt="Apache Wayang data lake execution platforms project 
overview" src="/img/blog/wayang-datalake/hero_image.png" />
+</div>
+
+<!--truncate-->
+
+## Project Goals
+
+The project had four main goals:
+
+- Add SQL-backed execution platforms as alternatives that Wayang's optimizer 
can evaluate.
+- Push relational operators such as filter, projection, join, aggregation, 
sort, and table sink into those engines.
+- Execute logical `ParquetSource` inputs on SQL platforms.
+- Provide integration tests and profiling workflows needed for reliable 
execution and cost-based platform selection.
+
+## SQL Platform Architecture
+
+The implementation builds on Wayang's reusable JDBC platform structure. Each 
SQL engine follows the same architecture:
+
+- A `Platform` class identifies the backend, provides the JDBC driver class, 
and defines the configuration prefix used by that engine, such as 
`wayang.trino.*`, `wayang.bigquery.*`, or `wayang.duckdb.*`.
+- A `Plugin` registers the platform, mappings, and channel conversions so the 
optimizer can use the engine.
+- `Mapping` classes replace logical Wayang operators with engine-specific 
execution operators.
+- Execution operators implement `JdbcExecutionOperator` and generate SQL 
fragments.
+- `JdbcExecutor` collects compatible operators in an execution stage and 
assembles one SQL statement for the target engine.
+
+For example, a logical `FilterOperator` with a SQL implementation can be 
transformed into `TrinoFilterOperator`, `PrestoFilterOperator`, 
`BigQueryFilterOperator`, or `DuckDBFilterOperator`. A source contributes the 
`FROM` relation; filters add `WHERE` predicates; joins add `JOIN ... ON ...`; 
reduce and reduce-by operators contribute aggregation expressions and, where 
needed, `GROUP BY`; and sorts add `ORDER BY`.
+
+The executor then assembles a query of the following form:
+
+```sql
+SELECT ...
+FROM ...
+JOIN ...
+WHERE ...
+GROUP BY ...
+ORDER BY ...
+```
+
+The goal is to keep as much work as possible inside the SQL engine. When a 
plan segment ends with a table sink, Wayang writes the result directly through 
SQL. Otherwise, the generated query is passed through Wayang's SQL channel 
abstraction so later operators can continue from it. This keeps engine-specific 
modules small while reusing Wayang's optimizer, channels, and JDBC execution 
path.
+
+## Platform Implementations
+
+I implemented support for four SQL engines: Trino, Presto, BigQuery, and 
DuckDB. They build on a common architecture while targeting different runtime 
models.
+
+| Platform | Runtime model | Integration focus |
+|---|---|---|
+| Trino | Distributed/federated SQL engine | Catalog/schema configuration, 
cluster execution, and SQL pushdown |
+| Presto | Distributed/federated SQL engine | Operator pushdown, table-sink 
execution, and engine-only integration coverage |
+| BigQuery | Serverless cloud data warehouse | JDBC authentication, qualified 
table names, and large analytical scans |
+| DuckDB | Embedded analytical database | Local execution, simple setup, and 
Parquet-oriented workflows |
+
+Trino and Presto implement table source, filter, projection, join, global 
reduce, reduce-by, sort, and table sink support. Their tests register only the 
target platform plugin, create self-contained fixtures, run the Wayang plan in 
the SQL engine, and verify results through JDBC. This prevents unsupported 
operators from being hidden by a Java fallback.
+
+BigQuery reuses the JDBC execution path but needs platform-specific behavior 
for driver configuration, backtick-quoted table names, and cloud execution. Its 
cost profile is also different: BigQuery has relatively high query-startup 
overhead, so reliable platform selection depends on calibrating its fixed and 
per-record costs for the target deployment.
+
+DuckDB represents the embedded analytical side of the project. Unlike Trino, 
Presto, or BigQuery, it does not require a remote service, coordinator, or 
worker cluster. The implementation follows the shared JDBC platform pattern 
while targeting local execution through `jdbc:duckdb:` or a DuckDB database 
file. It supports the same relational operator set and adds DuckDB-specific 
Parquet handling through relations or `read_parquet(...)` views. This makes 
DuckDB particularly useful for light [...]
+
+## SQL Parquet Source Support
+
+Parquet support is the main file-source part of the project. Wayang already 
has a logical `ParquetSource`, but SQL engines cannot always execute a file URI 
directly. They usually need a relation: for example, a Hive or Iceberg table in 
Trino, an external table in BigQuery, or a `read_parquet(...)` view in DuckDB.
+
+In the `feature/parquet-sql-independent-platforms-clean` branch, I implemented 
an independent platform approach for SQL Parquet execution. The shared base is 
`JdbcParquetSource`, and each platform adds a small concrete source such as 
`TrinoParquetSource`, `PrestoParquetSource`, or `BigQueryParquetSource`. A 
`ParquetSourceMapping` then turns a logical `ParquetSource` into the 
platform-specific source alternative.
+
+This also introduced a shared source abstraction in the JDBC layer. 
`JdbcSourceOperator` marks operators that can start a SQL stage and provide a 
relation for the `FROM` clause, so both table sources and Parquet sources can 
be handled through the same executor path.
+
+`JdbcParquetSource` supports two ways to expose a Parquet URI as a SQL 
relation. A user can map the URI to an existing relation with configuration 
such as `wayang.trino.parquetsource.mappings`. Alternatively, if auto-creation 
is enabled, Wayang generates a stable relation name and creates the relation 
from a platform-specific SQL template. If neither option is configured, the 
source uses the original URI as its relation reference. The implementation also 
escapes URI values used in SQL te [...]
+
+## Cost Profiling
+
+Wayang's optimizer compares alternative execution plans through load and cost 
estimates. For a new SQL platform, this means the platform needs default 
parameters for operators such as source, filter, projection, join, reduce, 
sort, and sink. Without these parameters, the platform remains executable, but 
the optimizer lacks calibrated estimates for comparing it with alternative 
execution platforms.
+
+The profiling work adds pilot workloads for Trino, Presto, BigQuery, and 
DuckDB. Each pilot runs representative Wayang plans over several row counts, 
records execution and cardinality logs, and writes profiling artifacts that can 
be consumed by Wayang's existing profiler. The calibrated values are then 
translated back into platform default properties, such as 
`wayang.trino.*.load`, `wayang.bigquery.*.load`, or `wayang.duckdb.*.load`.
+
+These defaults are only starting points. They capture one measured environment 
and give users a repeatable workflow for recalibrating the cost model on their 
own cluster, cloud region, connector, or storage system.
+
+## Validation
+
+Validation focused on end-to-end usability through Wayang rather than 
compilation alone.
+
+The test coverage includes:
+
+- Engine-only integration tests for Trino, Presto, BigQuery, and DuckDB, where 
only the target platform plugin is registered.
+- JavaPlanBuilder tests that exercise user-facing plans such as table scan, 
filter, projection, aggregation, join, sort, and table sink.
+- SQL pushdown checks that verify generated queries contain the expected 
`WHERE`, `JOIN`, `GROUP BY`, `ORDER BY`, and sink shapes.
+- Parquet source, Parquet join, and multi-platform alternative tests from the 
clean Parquet branch.
+- Setup guides and profiling smoke tests so the experiments can be repeated 
locally.
+
+This matters because Wayang can combine multiple execution platforms in one 
plan. If a test accidentally allows another platform to handle part of the 
work, it may pass even though the intended SQL platform is incomplete.
+
+## Work Product Summary
+
+The main code contributions are listed below. The status reflects the public 
upstream state as of August 19, 2026.
+
+| Area | Link | Status |
+|---|---|---|
+| Trino platform | 
[apache/wayang#772](https://github.com/apache/wayang/pull/772) | Merged |
+| Presto platform | 
[apache/wayang#773](https://github.com/apache/wayang/pull/773) | Merged |
+| BigQuery platform | 
[apache/wayang#774](https://github.com/apache/wayang/pull/774) | Merged |
+| Trino cost profiling | 
[apache/wayang#787](https://github.com/apache/wayang/pull/787) | Merged |
+| BigQuery cost profiling | 
[apache/wayang#788](https://github.com/apache/wayang/pull/788) | Merged |
+| Presto cost profiling | 
[apache/wayang#789](https://github.com/apache/wayang/pull/789) | Merged |
+| SQL Parquet source support | 
[apache/wayang#793](https://github.com/apache/wayang/pull/793) | Merged |
+| DuckDB platform | 
[apache/wayang#794](https://github.com/apache/wayang/pull/794) | Merged |
+
+## Lessons and Changes
+
+The project evolved from a broad engine-integration plan into a more focused 
implementation around Trino, Presto, BigQuery, DuckDB, SQL Parquet support, and 
cost profiling. The main lessons were:
+
+- **Shared abstractions matter**. Reusing the JDBC template kept the new 
platform modules small and made the implementations easier to compare and 
maintain.
+- **SQL engines still need platform-specific handling**. Even with JDBC, each 
engine has different table naming rules, driver settings, SQL behavior, startup 
overhead, and file-access mechanisms.
+- **Engine-only tests are necessary**. A Wayang plan can be valid while still 
relying on another platform for part of the work, so the tests need to prove 
that the intended SQL engine can execute the relevant plan segment.
+- **Cost models need measurements**. Initial defaults are useful, but 
optimizer decisions should eventually be calibrated with profiling data from 
realistic deployments.
+- **Depth was more valuable than breadth**. As the project evolved, the focus 
shifted from adding more engines to strengthening the existing integrations 
with tests, documentation, Parquet support, and profiling workflows.
+
+## Future Work
+
+Future work should focus on evaluating and extending these platforms in more 
realistic analytical environments:
+
+- **Cloud and object-storage experiments**. Run controlled experiments across 
data sizes, data locations, and cost profiles to check whether Wayang's 
optimizer chooses the expected platform. For example, BigQuery may fit large 
cloud scans, DuckDB may fit local Parquet workloads, and Trino or Presto may 
fit federated SQL queries.
+- **Connector-aware cost models**. Refine costs for engines such as Trino and 
Presto based on the underlying connector and storage system.
+- **Broader SQL file-source support**. Extend the Parquet approach to more 
file formats or table formats used in datalake workloads.
+- **More JDBC-template engines**. Use the shared structure to add additional 
analytical SQL engines with less duplicated code.
+- **Hybrid execution plans**. Explore plans that combine SQL engines with 
Wayang's Java, Spark, or Flink platforms.
diff --git a/blog/authors.yml b/blog/authors.yml
index 52653ceb..21a4179d 100644
--- a/blog/authors.yml
+++ b/blog/authors.yml
@@ -42,3 +42,8 @@ makarandhinge:
   name: Makarand Hinge
   title: GSoC 2026 Contributor
   url: https://github.com/makarandhinge
+jun.wang:
+  name: Jun Wang
+  title: GSoC 2026 Contributor
+  url: https://github.com/JunWang222
+  image_url: https://github.com/JunWang222.png
diff --git a/static/img/blog/wayang-datalake/hero_image.png 
b/static/img/blog/wayang-datalake/hero_image.png
new file mode 100644
index 00000000..1130531b
Binary files /dev/null and b/static/img/blog/wayang-datalake/hero_image.png 
differ

Reply via email to