Skip to content

[Enhancement] Expression-driven on-demand lazy column loading for parquet scanner#74886

Merged
dirtysalt merged 8 commits into
StarRocks:mainfrom
dirtysalt:parquet-latmat-phase678-v2
Jun 18, 2026
Merged

[Enhancement] Expression-driven on-demand lazy column loading for parquet scanner#74886
dirtysalt merged 8 commits into
StarRocks:mainfrom
dirtysalt:parquet-latmat-phase678-v2

Conversation

@dirtysalt

@dirtysalt dirtysalt commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Why I'm doing:

For multi-branch OR queries with count(*), StarRocks reads far more IO than Trino:

SELECT count(*) FROM iceberg.zya.lineitem_latemat WHERE
   (l_shipdate BETWEEN '1998-01-01' AND '1998-01-31' AND (l_discount       > 0.09                 OR l_tax             > 0.07))
OR (l_shipdate BETWEEN '1997-11-01' AND '1997-11-30' AND (l_quantity       < 10                   OR l_extendedprice   > 90000))
OR (l_shipdate BETWEEN '1997-09-01' AND '1997-09-30' AND (l_returnflag     = 'R'                  OR l_linestatus      = 'O'))
OR (l_shipdate BETWEEN '1997-07-01' AND '1997-07-31' AND (l_shipmode       = 'AIR'                OR l_comment         LIKE '%URGENT%'))
OR (l_shipdate BETWEEN '1997-05-01' AND '1997-05-31' AND (l_shipinstruct   = 'DELIVER IN PERSON'  OR l_partkey         < 50000))
OR (l_shipdate BETWEEN '1997-03-01' AND '1997-03-31' AND (l_commitdate     > '1998-06-01'         OR l_receiptdate     > '1998-06-01'))
OR (l_shipdate BETWEEN '1997-01-01' AND '1997-01-31' AND (l_discount       < 0.02                 OR l_extendedprice   < 5000))
OR (l_shipdate BETWEEN '1996-11-01' AND '1996-11-30' AND (l_quantity       > 45                   OR l_suppkey         < 10000))
OR (l_shipdate BETWEEN '1996-09-01' AND '1996-09-30' AND (l_shipmode       = 'SHIP'               OR l_linestatus      = 'F'))
OR (l_shipdate BETWEEN '1996-07-01' AND '1996-07-31' AND (l_tax            < 0.01                 OR l_comment         LIKE '%SPECIAL%'));


CREATE TABLE iceberg.zya.lineitem_latemat
(
    l_orderkey      BIGINT,
    l_partkey       BIGINT,
    l_suppkey       BIGINT,
    l_linenumber    INT,
    l_quantity      DECIMAL(15,2),
    l_extendedprice DECIMAL(15,2),
    l_discount      DECIMAL(15,2),
    l_tax           DECIMAL(15,2),
    l_returnflag    STRING,
    l_linestatus    STRING,
    l_shipdate      DATE,
    l_commitdate    DATE,
    l_receiptdate   DATE,
    l_shipinstruct  STRING,
    l_shipmode      STRING,
    l_comment       STRING
)
USING iceberg
PARTITIONED BY (bucket(128, l_orderkey))
TBLPROPERTIES (
      'format-version' = '3',
    'write.parquet.compression-codec' = 'zstd',
    'write.target-file-size-bytes' = '134217728'
);

INSERT INTO iceberg.zya.lineitem_latemat
SELECT
    l_orderkey, l_partkey, l_suppkey, l_linenumber,
    l_quantity, l_extendedprice, l_discount, l_tax,
    l_returnflag, l_linestatus,
    l_shipdate, l_commitdate, l_receiptdate,
    l_shipinstruct, l_shipmode, l_comment
FROM iceberg.zz_iceberg_tpch_sf1000_iceberg_parquet_lz4.lineitem;
Engine BAD 10br narrow ScanBytes
StarRocks (baseline) 149.1 GB
Trino 89.4 GB
StarRocks (this PR) 78.1 GB

The root cause: compound conjuncts are evaluated at the scanner level after all lazy columns have been backfilled, so expression short-circuit never prevents IO. And predicate-only columns are forced into the output chunk schema, so read_lazy_columns() must backfill them regardless of whether expression evaluation ever reached them.

What I'm doing:

Two changes:

1. Evaluate compound conjuncts inside GroupReader

Previously scanner_ctxs (multi-slot OR expressions) were evaluated at the scanner level after GroupReader::get_next() returned a fully-materialized chunk. Now they are evaluated inside get_next() while LazyMaterializationContext is still attached as MissingColumnProvider.

This allows ColumnRef to trigger materialize_slot() on-demand when the expression evaluator reaches a branch whose date-guard matches the current batch. Branches whose date-guard is all-false are short-circuited at the AND level — their payload columns are never loaded.

GroupReader::get_next():
  1. read active columns (l_shipdate)
  2. evaluate per-slot conjuncts (guard predicate) → filter
  2b. [NEW] evaluate scanner_ctxs (compound OR) with lazy_ctx attached
      → ColumnRef triggers materialize_slot() only for reached branches
  3. read_lazy_columns: backfill output columns, null-fill predicate-only columns

2. Skip physical IO for predicate-only untriggered columns

FE already distinguishes output columns from predicate columns via the isOutputColumn flag. In read_lazy_columns(), predicate-only columns that were never triggered during expression evaluation are null-filled instead of read from disk — they cost zero IO and their values are never accessed by downstream operators.

For count(*), all lazy columns are predicate-only, so only the 1-2 branches per batch that are actually reached incur physical IO.

3. Separate active/lazy IO ranges when lazy loading is active

SharedBufferedInputStream supports two modes: merged (active+lazy ranges coalesced into one buffer) and separated (independent buffers). In merged mode, reading the active column would fetch the entire merged range — including all lazy column data — defeating the physical IO savings. This PR forces separated mode when parquet_late_materialization_enable is on and lazy columns exist, so that untriggered lazy columns' data is never physically fetched.

Compromise

Predicate-only untriggered columns are null-filled rather than removed from the output chunk. The output chunk schema (_tuple_desc) includes all referenced columns, and reorder_chunk() downstream requires all slots to exist. The null-fill costs trivial memory but zero IO.

A follow-up PR will introduce an output_tuple_desc (filtered to is_output_column() slots) for output chunk creation, eliminating the null-fill entirely.

What type of PR is this:

  • BugFix
  • Feature
  • Enhancement
  • Refactor
  • UT
  • Doc
  • Tool

Does this PR entail a change in behavior?

  • No, this PR will not result in a change in behavior. Produces identical results; IO reduction only.
  • Yes, this PR will result in a change in behavior.

Checklist:

  • I have added test cases for my bug fix or my new feature
  • This pr needs user documentation (for new or modified features or behaviors)
  • This pr needs auto generate documentation
  • This is a backport pr

Bugfix cherry-pick branch check:

  • I have checked the version labels which the pr will be auto-backported to the target branch
    • 4.1
    • 4.0
    • 3.5

@dirtysalt dirtysalt changed the title lat on be side [Enhancement] Expression-driven on-demand lazy column loading for Parquet scanner Jun 16, 2026
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@github-actions github-actions Bot requested review from stdpain and trueeyu June 16, 2026 08:01

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 05b7e36091

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/formats/parquet/group_reader.cpp Outdated
Comment thread be/src/formats/parquet/variant_projection.cpp Outdated
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b6c7b91e35

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/exec/hdfs_scanner/hdfs_scanner_context.cpp Outdated
@dirtysalt dirtysalt changed the title [Enhancement] Expression-driven on-demand lazy column loading for Parquet scanner [Enhancement] Expression-driven on-demand lazy column loading for parquet scanner Jun 16, 2026
@dirtysalt dirtysalt force-pushed the parquet-latmat-phase678-v2 branch from 47a52c8 to 42cc009 Compare June 16, 2026 21:19
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 42cc009dc4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/exec/hdfs_scanner/hdfs_scanner_context.cpp Outdated
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6f9bf5bc0c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/exec/hdfs_scanner/hdfs_scanner.cpp
Comment thread be/src/formats/parquet/read_range_planner.cpp
@dirtysalt dirtysalt force-pushed the parquet-latmat-phase678-v2 branch from 6f9bf5b to c414f36 Compare June 17, 2026 06:51
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9e4f0f8005

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/formats/parquet/group_reader.cpp Outdated
Comment thread be/src/formats/parquet/group_reader.cpp
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0871e538c5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/formats/parquet/group_reader.cpp Outdated
@dirtysalt

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@dirtysalt

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 62218c1203

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@dirtysalt dirtysalt force-pushed the parquet-latmat-phase678-v2 branch from 62218c1 to 6225939 Compare June 17, 2026 21:41
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 6225939105

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@dirtysalt dirtysalt enabled auto-merge (squash) June 18, 2026 00:00
dirtysalt and others added 7 commits June 18, 2026 14:58
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Signed-off-by: tqqq <dirtysalt1987@gmail.com>
@dirtysalt dirtysalt dismissed stale reviews from trueeyu and kevincai via 558d693 June 18, 2026 07:44
@dirtysalt dirtysalt force-pushed the parquet-latmat-phase678-v2 branch from 6225939 to 558d693 Compare June 18, 2026 07:44
@CelerData-Reviewer

Copy link
Copy Markdown

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 558d693a1b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread be/src/formats/parquet/read_range_planner.cpp
@github-actions

Copy link
Copy Markdown
Contributor

[Java-Extensions Incremental Coverage Report]

pass : 0 / 0 (0%)

@github-actions

Copy link
Copy Markdown
Contributor

[FE Incremental Coverage Report]

pass : 2 / 2 (100.00%)

file detail

path covered_line new_line coverage not_covered_line_detail
🔵 com/starrocks/sql/plan/PlanFragmentBuilder.java 2 2 100.00% []

@github-actions

Copy link
Copy Markdown
Contributor

[BE Incremental Coverage Report]

pass : 464 / 526 (88.21%)

file detail

path covered_line new_line coverage not_covered_line_detail
🔵 be/src/column/chunk.h 4 16 25.00% [377, 378, 379, 380, 382, 383, 392, 393, 394, 395, 397, 398]
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_orc.cpp 2 3 66.67% [704]
🔵 be/src/formats/parquet/scalar_column_reader.cpp 64 91 70.33% [660, 661, 663, 664, 665, 666, 667, 668, 669, 680, 683, 792, 793, 794, 795, 796, 797, 798, 799, 923, 924, 925, 926, 927, 928, 929, 930]
🔵 be/src/formats/parquet/lazy_materialization_context.cpp 38 48 79.17% [38, 39, 52, 74, 75, 77, 93, 101, 102, 104]
🔵 be/src/formats/parquet/file_reader.cpp 4 5 80.00% [430]
🔵 be/src/formats/parquet/scalar_column_reader.h 4 5 80.00% [149]
🔵 be/src/formats/parquet/group_reader.cpp 110 116 94.83% [309, 310, 311, 312, 315, 378]
🔵 be/src/formats/parquet/column_materializer.cpp 81 85 95.29% [343, 345, 346, 477]
🔵 be/src/formats/parquet/complex_column_reader.cpp 26 26 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_parquet.cpp 5 5 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_avro.cpp 2 2 100.00% []
🔵 be/src/exec/hdfs_scanner/jni_scanner.cpp 2 2 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_text.cpp 2 2 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_json.cpp 2 2 100.00% []
🔵 be/src/formats/parquet/read_range_planner.cpp 33 33 100.00% []
🔵 be/src/exprs/column_ref.cpp 4 4 100.00% []
🔵 be/src/formats/parquet/complex_column_reader.h 1 1 100.00% []
🔵 be/src/formats/parquet/read_range_planner.h 1 1 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_context.cpp 47 47 100.00% []
🔵 be/src/formats/parquet/column_materializer.h 4 4 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_partition.cpp 1 1 100.00% []
🔵 be/src/connector/hive_connector.cpp 9 9 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner.cpp 8 8 100.00% []
🔵 be/src/exec/hdfs_scanner/hdfs_scanner_context.h 1 1 100.00% []
🔵 be/src/formats/parquet/lazy_materialization_context.h 8 8 100.00% []
🔵 be/src/formats/parquet/column_reader.h 1 1 100.00% []

@dirtysalt dirtysalt merged commit b083761 into StarRocks:main Jun 18, 2026
72 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

@Mergifyio backport branch-4.1

@github-actions github-actions Bot removed the 4.1 label Jun 18, 2026
@dirtysalt

Copy link
Copy Markdown
Contributor Author

@mergify backport branch-4.1

@dirtysalt dirtysalt deleted the parquet-latmat-phase678-v2 branch June 18, 2026 09:21
@dirtysalt

Copy link
Copy Markdown
Contributor Author

@mergify backport branch-4.1

@mergify

mergify Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

backport branch-4.1

✅ Backports have been created

Details

Cherry-pick of b083761 has failed:

On branch mergify/bp/branch-4.1/pr-74886
Your branch is up to date with 'origin/branch-4.1'.

You are currently cherry-picking commit b083761f5f.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Changes to be committed:
	modified:   be/src/column/chunk.h
	modified:   be/src/connector/hive_connector.cpp
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_avro.cpp
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_json.cpp
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_orc.cpp
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_orc.h
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_parquet.h
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_partition.cpp
	modified:   be/src/exec/hdfs_scanner/hdfs_scanner_text.cpp
	modified:   be/src/exec/hdfs_scanner/jni_scanner.cpp
	modified:   be/src/exec/hdfs_scanner/jni_scanner.h
	modified:   be/src/exprs/column_ref.cpp
	modified:   be/src/formats/CMakeLists.txt
	modified:   be/src/formats/parquet/column_materializer.h
	modified:   be/src/formats/parquet/complex_column_reader.cpp
	new file:   be/src/formats/parquet/lazy_materialization_context.cpp
	modified:   be/src/formats/parquet/lazy_materialization_context.h
	new file:   be/src/formats/parquet/read_range_planner.cpp
	new file:   be/src/formats/parquet/read_range_planner.h
	modified:   be/test/formats/parquet/file_reader_test.cpp
	modified:   fe/fe-core/src/main/java/com/starrocks/sql/plan/PlanFragmentBuilder.java
	new file:   test/sql/test_iceberg/R/test_parquet_lazy_materialization
	new file:   test/sql/test_iceberg/T/test_parquet_lazy_materialization

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)
	both modified:   be/src/exec/hdfs_scanner/hdfs_scanner.cpp
	both modified:   be/src/exec/hdfs_scanner/hdfs_scanner.h
	deleted by us:   be/src/exec/hdfs_scanner/hdfs_scanner_context.cpp
	deleted by us:   be/src/exec/hdfs_scanner/hdfs_scanner_context.h
	both modified:   be/src/exec/hdfs_scanner/hdfs_scanner_parquet.cpp
	both modified:   be/src/formats/parquet/column_materializer.cpp
	both modified:   be/src/formats/parquet/column_reader.h
	both modified:   be/src/formats/parquet/complex_column_reader.h
	both modified:   be/src/formats/parquet/file_reader.cpp
	both modified:   be/src/formats/parquet/group_reader.cpp
	both modified:   be/src/formats/parquet/group_reader.h
	both modified:   be/src/formats/parquet/scalar_column_reader.cpp
	both modified:   be/src/formats/parquet/scalar_column_reader.h
	deleted by us:   be/src/formats/parquet/variant_projection.cpp
	deleted by us:   be/src/formats/parquet/variant_projection.h
	deleted by us:   be/src/formats/scan_context.h
	deleted by us:   be/test/formats/parquet/complex_column_reader_test.cpp
	both modified:   be/test/formats/parquet/group_reader_test.cpp

To fix up this pull request, you can check it out locally. See documentation: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally

@mergify

mergify Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

backport branch-4.1

☑️ Command backport branch-4.1 ignored because it is already running from a previous command.

1 similar comment
@mergify

mergify Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

backport branch-4.1

☑️ Command backport branch-4.1 ignored because it is already running from a previous command.

wanpengfei-git added a commit that referenced this pull request Jun 18, 2026
…quet scanner (backport #74886) (#75003)

Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Co-authored-by: tqqq <dirtysalt1987@gmail.com>
Co-authored-by: wanpengfei-git <wanpengfei91@163.com>
OliLay pushed a commit to OliLay/starrocks that referenced this pull request Jun 30, 2026
…quet scanner (StarRocks#74886)

Signed-off-by: tqqq <dirtysalt1987@gmail.com>
Co-authored-by: wanpengfei-git <wanpengfei91@163.com>
Signed-off-by: Oliver Layer <o.layer@celonis.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants