Skip to content

[fix](be) Fix Parquet timestamp decoding and export defaults - #65446

Open
Gabriel39 wants to merge 5 commits into
apache:masterfrom
Gabriel39:agent/fix-format-v2-timestamp-decoding
Open

[fix](be) Fix Parquet timestamp decoding and export defaults#65446
Gabriel39 wants to merge 5 commits into
apache:masterfrom
Gabriel39:agent/fix-format-v2-timestamp-decoding

Conversation

@Gabriel39

@Gabriel39 Gabriel39 commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: None

Problem Summary:

Timestamp decoding had two correctness problems in scanner v2:

  1. Parquet INT96 does not carry a timezone annotation. Applying the Doris SQL session timezone shifted raw wall-clock fields written by Trino/UTC-style writers. The writer convention cannot be inferred reliably from Parquet metadata.
  2. ORC nanoseconds were truncated to microseconds, while row decoding, stripe statistics, and SARG predicates need the same half-up rounding boundary. Millisecond-precision stripe statistics also require operator-specific conservative bounds to avoid false-negative pruning.

This PR follows Trino's explicit connector-configuration model and adds hive.parquet.time-zone for scanner v2:

  • Unset or empty (default): preserve INT96 raw wall-clock fields and ignore the SQL session timezone.
  • Set to an IANA timezone or UTC offset in -12:00..+14:00: convert INT96 TIMESTAMP values with that configured timezone.
  • Supported shorthand such as 8:00 is canonicalized to +08:00; ambiguous short aliases such as CST are rejected.
  • HMS catalogs and external file TVFs can provide the property.
  • Hive and Hudi Parquet scans apply the property; Iceberg keeps its table-format timestamp semantics.
  • Scalar and nested scanner-v2 INT96 values use the same conversion.
  • Standard INT64 logical timestamps keep their existing behavior.
  • INT96 mapped to TIMESTAMPTZ keeps the same UTC instant and ignores this compatibility conversion.
  • Invalid values are rejected during analysis.

The legacy v1 Parquet reader is intentionally unchanged and can return different results. v1/v2 behavioral parity is outside this PR's scope, and switching to v1 is not the migration mechanism for this change.

Parquet Export and Outfile now write INT64 logical timestamps by default. Set enable_int96_timestamps=true only when a legacy downstream reader such as Hive 2 or Hive 3 requires INT96. Doris INT96 export normalizes timestamps using the export session timezone; when scanner v2 reads that file back, configure hive.parquet.time-zone with the export session timezone. An end-to-end regression exports under Asia/Shanghai, reads under an America/Los_Angeles session, and verifies that the compatibility property restores the original wall-clock values.

For existing Hive and Hudi catalogs, upgrading users should inspect representative INT96 files. If a legacy writer normalized timestamps using a known timezone, set the catalog property before relying on scanner-v2 results:

ALTER CATALOG hive_legacy SET PROPERTIES (
    "hive.parquet.time-zone" = "Asia/Shanghai"
);

For ORC, this PR rounds nanoseconds to microseconds with second carry for both DATETIMEV2 and TIMESTAMPTZ, applies the same rounding to statistics, and uses conservative millisecond SARG boundaries. Timestamp NE, NOT IN, and negated timestamp subtrees fall back to exact Doris row filtering because negating a widened statistics envelope is unsafe.

Release note

Parquet Export and Outfile now write INT64 logical timestamps by default. Set enable_int96_timestamps=true to request INT96 for legacy readers. Scanner v2 preserves raw Parquet INT96 wall-clock values by default; set hive.parquet.time-zone for Hive/Hudi files normalized by a known writer timezone. Existing Hive and Hudi catalogs containing normalized INT96 files should be checked during upgrade. FileScannerV1 remains unchanged. ORC timestamp nanoseconds are rounded consistently to microseconds and timestamp SARG pruning is conservative.

Check List (For Author)

  • Test: Unit Test / Regression Test
    • On gabriel@10.26.20.3:/mnt/disk3/gabriel/Workspace/dev2/doris:
      • ./build.sh --fe passed.
      • cd fe && mvn checkstyle:check -pl fe-core passed with 0 violations.
      • 39 targeted FE tests covering scan propagation, HMS/TVF timezone validation, Parquet properties, and export commands passed.
      • Targeted Parquet and ORC BE unit tests passed.
      • test_outfile_parquet, test_hive_read_parquet, test_hive_read_parquet_complex_type, test_hdfs_parquet_group0, and paimon_timestamp_types passed in their validated environments.
      • test_doris_int96_round_trip passed in generated-output and comparison modes. It verifies that the configured compatibility timezone, rather than a different read session timezone, restores explicitly exported INT96 values.
      • The three S3 outfile suites were attempted but were blocked before the changed assertions because the configured OSS credential returned InvalidAccessKeyId; no expected output was generated manually.
  • Behavior changed: Yes
    • Scanner v2 preserves raw INT96 wall-clock values by default and applies an explicit catalog or TVF timezone when configured.
    • Hive and Hudi scans apply the compatibility property; Iceberg is intentionally unaffected.
    • Parquet export defaults to INT64 logical timestamps; explicit INT96 remains available for legacy interoperability.
    • Ambiguous timezone aliases are rejected.
    • ORC nanoseconds are rounded to microseconds, and timestamp SARG pruning is conservative at millisecond statistic boundaries.
    • The legacy v1 Parquet reader is unchanged.
  • Does this need documentation: Yes. [doc](lakehouse) Document timestamp compatibility changes doris-website#3982

@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@Gabriel39
Gabriel39 marked this pull request as ready for review July 10, 2026 05:55
@Gabriel39
Gabriel39 requested a review from yiguolei as a code owner July 10, 2026 05:55
@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Automated review completed. I found one correctness issue that should be fixed before merge: plain ORC timestamp SARG pruning is not using the same session-timezone semantics as row decoding and aggregate min/max.

Critical checkpoint conclusions: the PR is focused on format v2 timestamp decoding and pruning; row decode, ORC statistics rounding, and Parquet INT96 row materialization were reviewed. No new concurrency, lifecycle, persistence, protocol-compatibility, or observability risk was found. The main gap is a parallel-path inconsistency in ORC timestamp SARG pruning, and the tests do not cover non-UTC plain ORC timestamp SARG behavior. git diff --check passed; build/unit tests were not run in this checkout because .worktree_initialized, thirdparty/installed, and thirdparty/installed/bin/protoc are missing.

Subagent conclusions: TSC-001 was accepted as MAIN-001 and submitted inline. OPT-001 was dismissed with evidence from the ORC C++ public statistics/writer shape. Convergence round 2 ended with both optimizer-rewrite and tests-session-config reporting NO_NEW_VALUABLE_FINDINGS for the same current ledger/comment set.

User focus: no additional user-provided focus was present.

Comment thread be/src/format_v2/orc/orc_search_argument.cpp Outdated
@Gabriel39
Gabriel39 force-pushed the agent/fix-format-v2-timestamp-decoding branch 2 times, most recently from e8f9938 to 4f5fa22 Compare July 10, 2026 08:07
@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Review step was skipped (possibly timeout or cancelled)
Workflow run: https://github.com/apache/doris/actions/runs/29079325644

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 77.39% (1896/2450)
Line Coverage 64.42% (34053/52862)
Region Coverage 64.81% (17520/27032)
Branch Coverage 54.01% (9392/17390)

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review result: request changes.

I reviewed the changed FE/thrift wiring, Parquet/ORC format-v2 reader paths, timestamp decoding/rounding behavior, and the added BE/FE tests. Validation was static because this runner is a shallow checkout and thirdparty/installed/bin/protoc is missing; I did verify the live PR head, GitHub file scope, existing inline comments, and git diff --check for the GitHub-listed changed files against the fetched base.

Critical checkpoints:

  • Goal/test coverage: The PR mostly covers top-level Parquet INT96 timezone behavior and ORC nanosecond rounding, but it misses nested INT96 materialization and shorthand timezone propagation.
  • Scope/focus: The implementation is mostly focused, but the new timezone contract is not applied uniformly across all Parquet INT96 value materialization paths.
  • Concurrency/lifecycle: No new concurrent mutable state or lifecycle hazard found in the reviewed paths.
  • Config/session propagation: Found one FE/BE normalization mismatch for hive.parquet.time-zone shorthand offsets.
  • Compatibility: The thrift field is optional, so old senders remain compatible; BE still validates invalid values. The accepted shorthand case is the compatibility gap.
  • Parallel paths: Top-level INT96 and nested INT96 paths diverge; this is covered by an inline comment.
  • Test results: I did not run builds/tests in this runner due missing thirdparty/protoc prerequisites. Static changed-file whitespace check passed.
  • Observability/performance/persistence: No additional blocking issue found.

Subagent conclusions:

  • optimizer-rewrite proposed the nested Parquet INT96 timezone gap; it was accepted as M1.
  • tests-session-config proposed the FE/BE shorthand timezone normalization gap; it was accepted as M2.
  • The existing ORC timestamp SARG timezone concern is already covered by discussion_r3556745988 and was not resubmitted.
  • Convergence round C2 ended with both live subagents replying NO_NEW_VALUABLE_FINDINGS for the final M1/M2 comment set.

User focus: no additional user-provided review focus was supplied.

Comment thread be/src/format_v2/parquet/reader/parquet_leaf_reader.cpp Outdated
Comment thread fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalCatalog.java Outdated
@Gabriel39
Gabriel39 force-pushed the agent/fix-format-v2-timestamp-decoding branch from 4f5fa22 to 05da9fa Compare July 10, 2026 09:32
@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 81.25% (13/16) 🎉
Increment coverage report
Complete coverage report

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at 10:57 AM.
Workflow run: https://github.com/apache/doris/actions/runs/29083832746

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 93.75% (15/16) 🎉
Increment coverage report
Complete coverage report

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review result: request changes.

I found one additional non-duplicate correctness issue: the new HMS Parquet INT96 timezone property is honored by scanner v2, but the legacy FileScanner path is still reachable and ignores the new scan parameter. Existing inline threads already cover the ORC plain TIMESTAMP SARG timezone issue, nested INT96 forwarding, and shorthand timezone canonicalization, so I did not duplicate those comments.

Critical checkpoint conclusions:

  • Goal/test: the PR addresses format v2 Parquet INT96 and ORC timestamp rounding, with targeted BE/FE tests, but the new catalog property is not proven across the legacy scanner path.
  • Scope/focus: the change is mostly focused, but it misses a parallel read path that users can still select.
  • Concurrency/lifecycle: no new shared-state or lifecycle issue found in the reviewed changes.
  • Config/session propagation: FE-to-BE propagation is present for scanner v2, but not for legacy scanner fallback/disablement.
  • Compatibility/protocol: the new thrift field is optional and absence is handled; mixed-version field absence did not show a separate issue.
  • Parallel paths: legacy Hive Parquet scanning remains inconsistent with scanner v2 for INT96 timezone semantics.
  • Tests: new tests cover scanner v2 behavior, nested INT96, canonicalized timezone params, and ORC rounding; missing coverage for enable_file_scanner_v2=false. Existing review context already requests non-UTC ORC TIMESTAMP SARG coverage.
  • Performance/observability: no additional issue found.
  • Transaction/persistence/data writes: not applicable to this PR.

Subagent conclusions: OPT-1 became the inline comment below. OPT-2 and TSC-1 were verified as duplicates of existing GitHub thread discussion_r3556745988 and were not resubmitted. Convergence round 1 ended with both live subagents replying NO_NEW_VALUABLE_FINDINGS for the same ledger/comment set after the accepted candidate update.

User focus: no additional user-provided review focus.

Validation: static review only. This checkout is shallow/grafted and is missing .worktree_initialized, thirdparty/installed, and thirdparty/installed/bin/protoc, so I did not run BE/FE tests or style checks.

Comment thread be/src/format_v2/table_reader.cpp
@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 29435 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 05da9fa5db564bcf716ffd22b449b1e8f15f3998, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17636	4056	4018	4018
q2	2019	339	212	212
q3	10592	1456	828	828
q4	4773	474	339	339
q5	8356	868	588	588
q6	350	173	137	137
q7	830	848	616	616
q8	10614	1483	1465	1465
q9	5901	4436	4422	4422
q10	6866	1808	1507	1507
q11	501	345	309	309
q12	717	554	428	428
q13	18130	3383	2765	2765
q14	267	269	234	234
q15	q16	783	775	710	710
q17	919	931	987	931
q18	7107	5630	5553	5553
q19	1152	1213	1029	1029
q20	745	637	557	557
q21	5583	2597	2492	2492
q22	433	351	295	295
Total cold run time: 104274 ms
Total hot run time: 29435 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4357	4268	4287	4268
q2	290	317	222	222
q3	4588	4964	4453	4453
q4	2043	2168	1372	1372
q5	4417	4398	4322	4322
q6	222	172	128	128
q7	2182	1992	1667	1667
q8	2555	2189	2153	2153
q9	8198	7863	7887	7863
q10	4739	4683	4296	4296
q11	561	434	377	377
q12	748	759	540	540
q13	3227	3646	2949	2949
q14	289	315	270	270
q15	q16	735	734	638	638
q17	1333	1311	1460	1311
q18	7934	7290	7190	7190
q19	1160	1057	1017	1017
q20	2211	2197	1932	1932
q21	5189	4511	4406	4406
q22	527	444	403	403
Total cold run time: 57505 ms
Total hot run time: 51777 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 179312 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 05da9fa5db564bcf716ffd22b449b1e8f15f3998, data reload: false

query5	4309	649	484	484
query6	456	219	192	192
query7	4879	620	345	345
query8	349	187	178	178
query9	8783	4057	3974	3974
query10	459	369	301	301
query11	5839	2376	2116	2116
query12	159	102	99	99
query13	1289	599	437	437
query14	6284	5314	4954	4954
query14_1	4280	4298	4284	4284
query15	221	202	192	192
query16	1014	471	460	460
query17	1132	750	595	595
query18	2559	488	386	386
query19	196	181	142	142
query20	110	108	102	102
query21	233	151	136	136
query22	13651	13548	13320	13320
query23	17421	16505	16158	16158
query23_1	16325	16233	16286	16233
query24	7468	1768	1289	1289
query24_1	1307	1298	1285	1285
query25	529	452	363	363
query26	1326	333	207	207
query27	2622	558	347	347
query28	4472	2001	1989	1989
query29	1068	615	488	488
query30	340	264	227	227
query31	1108	1089	986	986
query32	112	61	60	60
query33	514	308	245	245
query34	1155	1135	619	619
query35	765	775	674	674
query36	1385	1397	1206	1206
query37	152	105	91	91
query38	1875	1714	1641	1641
query39	918	918	900	900
query39_1	876	888	905	888
query40	247	167	141	141
query41	70	62	63	62
query42	94	96	91	91
query43	317	316	278	278
query44	1438	789	767	767
query45	208	191	188	188
query46	1042	1176	735	735
query47	2390	2293	2223	2223
query48	403	448	296	296
query49	573	424	321	321
query50	1007	413	339	339
query51	10669	10802	10902	10802
query52	83	92	72	72
query53	272	276	204	204
query54	282	222	236	222
query55	75	69	63	63
query56	290	294	270	270
query57	1407	1411	1312	1312
query58	281	260	252	252
query59	1606	1624	1440	1440
query60	303	270	246	246
query61	155	151	147	147
query62	678	646	586	586
query63	241	204	208	204
query64	2813	1030	822	822
query65	4846	4736	4756	4736
query66	1805	550	390	390
query67	29617	29520	29333	29333
query68	3318	1530	993	993
query69	405	305	269	269
query70	1079	934	977	934
query71	357	344	304	304
query72	3072	2705	2479	2479
query73	827	771	430	430
query74	5064	4953	4750	4750
query75	2601	2568	2207	2207
query76	2306	1192	793	793
query77	359	378	289	289
query78	12313	12264	11728	11728
query79	1169	1101	727	727
query80	578	564	453	453
query81	459	325	281	281
query82	236	155	121	121
query83	309	321	295	295
query84	284	156	131	131
query85	882	610	517	517
query86	325	301	282	282
query87	1817	1807	1727	1727
query88	3621	2769	2767	2767
query89	422	396	362	362
query90	2175	195	193	193
query91	203	189	161	161
query92	63	60	55	55
query93	1574	1643	1006	1006
query94	548	357	325	325
query95	785	496	480	480
query96	1050	833	361	361
query97	2695	2709	2566	2566
query98	230	209	202	202
query99	1149	1181	1042	1042
Total cold run time: 263947 ms
Total hot run time: 179312 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 24.77 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 05da9fa5db564bcf716ffd22b449b1e8f15f3998, data reload: false

query1	0.00	0.00	0.00
query2	0.09	0.05	0.05
query3	0.26	0.14	0.13
query4	1.63	0.13	0.15
query5	0.26	0.22	0.21
query6	1.25	1.04	1.03
query7	0.04	0.01	0.00
query8	0.06	0.04	0.03
query9	0.38	0.31	0.30
query10	0.56	0.57	0.55
query11	0.18	0.14	0.14
query12	0.17	0.14	0.14
query13	0.46	0.46	0.47
query14	1.02	1.01	1.00
query15	0.61	0.60	0.59
query16	0.32	0.33	0.30
query17	1.05	1.10	1.05
query18	0.23	0.21	0.21
query19	2.05	1.96	1.95
query20	0.02	0.01	0.01
query21	15.43	0.22	0.13
query22	4.88	0.06	0.05
query23	16.10	0.32	0.11
query24	3.02	0.43	0.32
query25	0.12	0.04	0.04
query26	0.74	0.20	0.14
query27	0.05	0.04	0.04
query28	3.52	0.95	0.53
query29	12.50	3.99	3.24
query30	0.27	0.15	0.15
query31	2.77	0.59	0.31
query32	3.22	0.59	0.47
query33	3.11	3.19	3.30
query34	15.57	4.26	3.51
query35	3.50	3.48	3.52
query36	0.56	0.44	0.41
query37	0.10	0.06	0.07
query38	0.06	0.04	0.04
query39	0.05	0.03	0.03
query40	0.19	0.16	0.15
query41	0.09	0.04	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.57 s
Total hot run time: 24.77 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 25.81% (8/31) 🎉
Increment coverage report
Complete coverage report

@Gabriel39
Gabriel39 force-pushed the agent/fix-format-v2-timestamp-decoding branch from 05da9fa to 5c21eda Compare July 11, 2026 12:51
@Gabriel39 Gabriel39 changed the title [fix](be) Fix format v2 timestamp decoding [fix](be) Fix Parquet INT96 timezone decoding Jul 11, 2026
@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Automated review completed for the current PR head.

No additional non-duplicate, diff-scoped blocking issues were found beyond the existing inline review context. I am not adding new inline comments in this review.

User focus: no additional user-provided review focus.

Critical checkpoint conclusions:

  • Goal and tests: the patch focuses on Parquet INT96 timezone decoding and ORC timestamp rounding/SARG behavior; current head includes targeted FE and BE tests for catalog timezone canonicalization/propagation, scanner-v2 and legacy scanner paths, nested INT96 decode, ORC timestamp rounding, and conservative SARG behavior.
  • Scope: reviewed changed FE scan parameter plumbing, thrift field addition, BE Parquet legacy/v2 readers, ORC decode/stat/SARG paths, and related tests.
  • Parallel paths: scanner-v2 and legacy Parquet paths both propagate hive.parquet.time-zone; nested INT96 decode also receives the configured timezone.
  • Config/protocol compatibility: the new scan parameter is an optional thrift field; FE canonicalizes shorthand timezone values before sending them and BE validates/uses the configured zone when present.
  • Concurrency/lifecycle: no new shared concurrency or lifecycle risk was identified; timezone state is carried on per-reader state and used within reader lifetimes.
  • Data correctness: ORC timestamp rounding and SARG bounds appear conservative in the reviewed paths, and Parquet INT96 decode uses the catalog timezone in the covered scalar/nested paths.
  • Transactions/persistence/writes: not applicable to this read-path change.
  • Observability/performance: no new logging/metric requirement was identified; pruning remains conservative for the timestamp edge cases reviewed.
  • Validation: static review only. I did not run BE/FE builds or tests because this checkout is missing thirdparty/installed and thirdparty/installed/bin/protoc.

Subagent conclusions:

  • optimizer-rewrite: no candidates; convergence round returned NO_NEW_VALUABLE_FINDINGS.
  • tests-session-config: no candidates; convergence round returned NO_NEW_VALUABLE_FINDINGS.

Existing review threads were treated as already-submitted context and were not duplicated.

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 66.18% (45/68) 🎉
Increment coverage report
Complete coverage report

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

Issue Number: None

Related PR: apache#65446

Problem Summary: Timestamp decoding had two correctness problems in scanner v2. Parquet INT96 does not carry a timezone annotation, so applying the Doris SQL session timezone shifted raw wall-clock fields written by Trino/UTC-style writers. ORC nanoseconds were truncated inconsistently across row decoding, statistics, and SARG predicates, which could also produce unsafe pruning at millisecond statistic boundaries.

Add an explicit `hive.parquet.time-zone` property for scanner-v2 Parquet INT96 reads. By default scanner v2 preserves raw INT96 wall-clock fields; when configured, it interprets them with the requested unambiguous IANA timezone or valid UTC offset. Reject ambiguous short aliases such as `CST`, share timezone parsing across HMS catalogs and file TVFs, and propagate the setting through generic external-table and TVF interfaces for Hive and Hudi while leaving Iceberg semantics unchanged.

Change Parquet export to write INT64 logical timestamps by default and require `enable_int96_timestamps` to be exactly `true` or `false`. Update export regressions to exercise the new default directly while retaining explicit INT96 only for legacy Hive interoperability coverage. Add an end-to-end regression that exports INT96 in one session timezone and reads it through scanner v2 in another session timezone with `hive.parquet.time-zone` configured.

Apply half-up nanosecond rounding consistently to ORC rows and statistics, use conservative SARG bounds, and fall back to exact row filtering where negating a widened timestamp envelope would be unsafe. The legacy v1 reader remains unchanged by design.

Parquet export now writes INT64 logical timestamps by default. Set `enable_int96_timestamps=true` to request INT96. When scanner v2 reads legacy INT96 files that were normalized by a writer timezone, set `hive.parquet.time-zone` to that timezone. The property accepts unambiguous IANA timezone IDs or valid UTC offsets; ambiguous short aliases such as `CST` are rejected. Existing Hive and Hudi catalogs containing normalized INT96 files should be checked during upgrade.

- Test:
    - Build: `./build.sh --fe` passed on the designated remote host.
    - Checkstyle: `cd fe && mvn checkstyle:check -pl fe-core` passed on the designated remote host with 0 violations.
    - Unit Test: 39 targeted FE tests covering scan propagation, HMS/TVF timezone validation, Parquet properties, and export commands passed on the designated remote host.
    - Unit Test: targeted Parquet and ORC BE unit tests passed on the designated remote host.
    - Regression test: `test_outfile_parquet` passed on an isolated scanner-v2 cluster on the designated remote host and verified default Parquet export/stream-load round-trip results.
    - Regression test: `test_hive_read_parquet` and `test_hive_read_parquet_complex_type` passed on the designated remote host.
    - Regression test: `test_doris_int96_round_trip` passed in generated-output and comparison modes on the designated remote host, verifying that the configured compatibility timezone overrides a different read session timezone.
    - Regression test: `test_hdfs_parquet_group0` passed completely on an isolated scanner-v2 cluster on the designated remote host.
    - Regression test: `paimon_timestamp_types` passed completely for JNI and native readers on the isolated cluster on the designated remote host.
    - Regression test: TeamCity builds 994160 and 994162 produced matching millisecond-precision real results for the updated ARRAY, MAP, and STRUCT expectations.
    - Regression test: the three S3 outfile suites were attempted on the designated remote host but were blocked before the changed assertions because the configured OSS credential returned `InvalidAccessKeyId`.
- Behavior changed: Yes. Scanner v2 preserves raw INT96 wall-clock values by default, Parquet export defaults to INT64 timestamps, timezone aliases are rejected, and ORC timestamp rounding and pruning are consistent and conservative.
- Does this need documentation: Yes. apache/doris-website#3982
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Review context preparation failed before Codex ran; inspect the 'Prepare authoritative PR context and required AGENTS guides' step.
Workflow run: https://github.com/apache/doris/actions/runs/30796789291

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@Gabriel39
Gabriel39 force-pushed the agent/fix-format-v2-timestamp-decoding branch from a9258d3 to ae911c1 Compare August 3, 2026 08:35
@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Codex completed, but no new pull request review was submitted for the current head SHA.
Workflow run: https://github.com/apache/doris/actions/runs/30797983555

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@hello-stephen

Copy link
Copy Markdown
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 77.57% (1912/2465)
Line Coverage 64.52% (34210/53024)
Region Coverage 64.42% (17271/26809)
Branch Coverage 53.94% (9249/17148)

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Requesting changes for two correctness gaps introduced by the current patch:

  • ORC DATETIMEV2 decoding now applies the UTC 0001-9999 bound before session-timezone conversion, rejecting valid local endpoint values in nonzero-offset zones.
  • hive.parquet.time-zone is validated on catalog creation but not on the detached ALTER CATALOG candidate, so an invalid built-in HMS/Hudi value can be journaled and fail later scan planning.

I did not duplicate the live threads covering the ORC year-10000 carry, the unversioned old-FE/new-BE INT96 semantics, or the custom-provider property-routing gap.

Critical checkpoint conclusions

  1. Goal and proof: The PR aims to preserve Parquet/ORC timestamp semantics across Paimon schema history, catalog/TVF scan configuration, and Parquet export. The current-version Paimon and scan/export propagation largely accomplish that goal, but the two inline correctness gaps mean it is not complete. Existing tests cover creation, propagation, nested/current/historical Paimon schemas, ORC rounding/SARG behavior, and export output; they do not cover non-UTC Doris endpoint decoding or invalid ALTER CATALOG updates.
  2. Scope and clarity: The FE, Thrift, BE reader, writer-option, and test changes are cross-cutting but generally follow the required end-to-end data flow. I found no unrelated source change. The two duplicated validation/domain rules called out inline should be unified with their owning lifecycle/type boundary.
  3. Concurrency: No new thread, lock, atomic, or shared mutable cache protocol is introduced. Parquet schema/type mutations are made on request/reader-owned copies, and no new lock-order or race issue was substantiated.
  4. Lifecycle and static initialization: New C++ constants are function-local constexpr; there is no cross-TU initialization dependency or new ownership cycle. Provider classloader context, reader schema copies, and export-job lifecycle were traced. The catalog update lifecycle defect is the second inline issue.
  5. Configuration behavior: hive.parquet.time-zone is a catalog/TVF property rather than a process-dynamic config. Create and TVF parsing reject invalid values, and catalog reset exposes accepted updates, but detached ALTER validation bypasses the parser. Custom-provider ownership/routing is already covered by a live thread.
  6. Compatibility: The new optional Thrift fields are wired for current FE/BE versions. Missing versus explicit raw INT96 semantics are not rolling-upgrade safe, but that exact mixed-version defect is already covered by the live parquet_scan.cpp:1165 thread. Old persisted export jobs deserialize the absent boolean as false; no separate replay incompatibility was found.
  7. Parallel paths: Catalog scans, plugin-driven scans, TVFs, Paimon current/history mappings, native Parquet row/statistics readers, ORC row/SARG/aggregate paths, direct export, and replayed export jobs were checked. No additional path-specific defect survived beyond the ALTER issue and existing live custom-provider thread.
  8. Conditional checks and error handling: Status/exception results in the changed paths are propagated. The ORC widened carry arithmetic is appropriate, but its UTC-domain conditional is applied too early for local DATETIMEV2. Invalid property parsing fails loudly where it runs; the ALTER path currently omits it.
  9. Test coverage: Coverage is broad, including BE/FE unit tests and regression suites, but the two inline cases need targeted negative/boundary tests. No concurrency test is needed because the patch adds no concurrent protocol.
  10. Expected results: The changed regression outputs consistently reflect the new default Parquet INT64 timestamp representation, and ordering/oracles inspected were deterministic. I did not find an internally inconsistent .out change. This was a static-only review; no build or test command was run, as required by the review contract.
  11. Observability: The patch adds no long-running distributed state requiring new metrics. Existing failures propagate explicit status/exception text; no distinct logging or metric gap was substantiated.
  12. Persistence and replay: ExportJob persists the explicit writer option and preserves the absent-field default for older jobs. Catalog property updates are edit-logged/replayed through the existing path, but that makes the missing pre-journal ALTER validation user-visible and persistent, as called out inline.
  13. Data writes and atomicity: The write-side behavior change is Parquet timestamp physical encoding for OUTFILE/EXPORT. Writer option propagation and replay were consistent, and no new transaction, crash-recovery, leak, or atomicity problem was found.
  14. FE-BE variables: timestamp_is_adjusted_to_utc and hive_parquet_time_zone reach the relevant current-version producers and consumers, including nested Paimon mapping and native reader construction. The remaining mixed-version problem is the existing rolling-upgrade thread, not a new duplicate.
  15. Performance: The added parsing occurs during validation/reader setup, schema transformations are request-scoped and bounded by projected schema size, and widened timestamp arithmetic is constant-time. No material CPU, allocation, or hot-loop regression was substantiated.
  16. Other correctness: Nullable/nested projection handling, COW/schema-copy ownership, ORC negative/DST/SARG fallbacks, aggregate fallback, and Paimon alias/history semantics were checked without another distinct issue. ExportCommand is a Nereids command path, but this patch adds no optimizer/plan rewrite requiring a plan-tree finding.

The user focus file contained no additional guidance, so the whole PR was reviewed without a narrower focus.

const __int128 epoch_microseconds =
static_cast<__int128>(seconds) * MICROS_PER_SECOND + rounded_microseconds;
if (epoch_microseconds < MIN_DORIS_TIMESTAMP_MICROS ||
epoch_microseconds > MAX_DORIS_TIMESTAMP_MICROS) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Validate DATETIMEV2 after timezone conversion

This precheck uses the UTC 0001..9999 interval before the caller converts the instant to the session timezone. For example, epoch second 253402329599 with 999999000ns is outside the UTC maximum, but in a -08:00 session it is the valid local value 9999-12-31 23:59:59.999999; this helper now returns DataQualityError before the later target-local is_valid_date() check. The lower boundary is symmetric in +14:00, and the new boundary tests use UTC only. Please retain the widened overflow/carry guard, but validate DATETIMEV2 against the converted local value (while TIMESTAMPTZ can keep UTC-domain validation), with nonzero-offset endpoint tests. This is distinct from the existing carry thread: that case admitted an invalid year-10000 result, while this one rejects a valid target-local endpoint.

super.checkProperties();
String catalogType = getType();
if ("hms".equalsIgnoreCase(catalogType) || "hudi".equalsIgnoreCase(catalogType)) {
String hiveParquetTimeZone = catalogProperty.getOrDefault(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Apply this validation to ALTER CATALOG too

This parser runs during checkProperties(), but PluginDrivenExternalCatalog.validatePropertiesBeforeUpdate() builds the detached candidate and returns true after only the base checks plus ConnectorFactory.validatePropertiesForUpdate(). The Hive provider does not validate this key, so CatalogMgr skips the legacy checkProperties() branch and an ALTER such as hive.parquet.time-zone=CST can be journaled successfully; the next scan then throws when getConfiguredHiveParquetTimeZone() parses it. Please reuse this validation for the candidate update path (ideally in the owning provider so create and alter share it) and add an ALTER regression. This is distinct from the existing custom-provider routing thread: it affects invalid built-in HMS updates rather than dropping a valid custom-provider value.

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 28891 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit ef61f017a0b3ab216ad2680e100e493e06695678, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17782	3949	3912	3912
q2	2015	336	199	199
q3	10271	1458	808	808
q4	4742	473	339	339
q5	8009	832	555	555
q6	287	171	135	135
q7	801	787	603	603
q8	10644	1597	1517	1517
q9	5696	4061	4048	4048
q10	6822	1648	1350	1350
q11	504	344	315	315
q12	737	562	459	459
q13	18126	3256	2756	2756
q14	257	253	244	244
q15	q16	740	728	664	664
q17	947	976	917	917
q18	6858	5608	5697	5608
q19	1173	1270	1073	1073
q20	821	673	566	566
q21	5567	2581	2516	2516
q22	437	362	307	307
Total cold run time: 103236 ms
Total hot run time: 28891 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4239	4170	4156	4156
q2	285	315	210	210
q3	4529	4944	4360	4360
q4	2139	2240	1420	1420
q5	4232	4089	4127	4089
q6	225	174	124	124
q7	1684	1582	1931	1582
q8	2515	2093	2085	2085
q9	7408	7592	7204	7204
q10	4296	4419	3873	3873
q11	563	393	365	365
q12	702	774	538	538
q13	3167	3454	2915	2915
q14	287	307	264	264
q15	q16	694	737	637	637
q17	1306	1267	1264	1264
q18	7887	7237	7135	7135
q19	1147	1106	1119	1106
q20	2214	2206	1914	1914
q21	5291	4584	4394	4394
q22	503	479	386	386
Total cold run time: 55313 ms
Total hot run time: 50021 ms

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@Gabriel39

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 168751 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit ef61f017a0b3ab216ad2680e100e493e06695678, data reload: false

query5	4315	609	457	457
query6	461	225	206	206
query7	4957	618	360	360
query8	329	178	191	178
query9	8756	4060	4043	4043
query10	473	371	280	280
query11	5795	2201	2021	2021
query12	151	96	94	94
query13	1250	609	458	458
query14	6154	4684	4397	4397
query14_1	3773	3790	3760	3760
query15	205	197	180	180
query16	1025	469	495	469
query17	1116	668	524	524
query18	2453	438	325	325
query19	195	185	139	139
query20	105	101	99	99
query21	226	152	132	132
query22	13062	12960	12765	12765
query23	17376	16377	15943	15943
query23_1	16110	16078	16119	16078
query24	7551	1689	1228	1228
query24_1	1245	1267	1210	1210
query25	547	437	347	347
query26	1337	343	204	204
query27	2589	590	340	340
query28	4458	2076	2007	2007
query29	1037	596	460	460
query30	343	261	226	226
query31	1114	1074	956	956
query32	101	63	56	56
query33	511	306	230	230
query34	1179	1106	635	635
query35	734	746	635	635
query36	790	774	710	710
query37	148	98	89	89
query38	1828	1679	1586	1586
query39	838	814	810	810
query39_1	796	782	769	769
query40	248	164	143	143
query41	64	64	63	63
query42	96	92	91	91
query43	318	318	276	276
query44	1436	784	768	768
query45	187	176	166	166
query46	1041	1155	733	733
query47	1562	1550	1471	1471
query48	409	411	308	308
query49	585	406	289	289
query50	1075	421	345	345
query51	10385	10846	10173	10173
query52	85	89	74	74
query53	275	272	203	203
query54	292	253	230	230
query55	74	71	68	68
query56	302	305	312	305
query57	1009	1014	944	944
query58	309	265	269	265
query59	1555	1606	1415	1415
query60	314	285	263	263
query61	177	169	170	169
query62	399	328	272	272
query63	238	205	197	197
query64	2914	1154	950	950
query65	3896	3828	3812	3812
query66	1836	482	374	374
query67	28249	28144	27990	27990
query68	3366	1533	1003	1003
query69	421	305	263	263
query70	865	813	765	765
query71	377	349	317	317
query72	3068	2616	2268	2268
query73	807	770	455	455
query74	4646	4484	4285	4285
query75	2394	2347	2002	2002
query76	2349	1155	770	770
query77	349	372	275	275
query78	11288	11167	10641	10641
query79	1371	1116	770	770
query80	1314	534	468	468
query81	520	327	289	289
query82	641	149	114	114
query83	395	323	297	297
query84	308	157	131	131
query85	995	600	508	508
query86	407	231	229	229
query87	1795	1787	1733	1733
query88	3782	2836	2822	2822
query89	392	325	294	294
query90	1969	200	202	200
query91	197	193	158	158
query92	61	60	54	54
query93	1701	1533	991	991
query94	714	358	298	298
query95	807	581	482	482
query96	1063	786	343	343
query97	2465	2478	2359	2359
query98	207	204	189	189
query99	717	729	613	613
Total cold run time: 256670 ms
Total hot run time: 168751 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 23.96 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit ef61f017a0b3ab216ad2680e100e493e06695678, data reload: false

query1	0.02	0.01	0.01
query2	0.09	0.05	0.05
query3	0.25	0.14	0.13
query4	1.61	0.15	0.14
query5	0.23	0.22	0.22
query6	1.16	0.80	0.81
query7	0.05	0.01	0.00
query8	0.06	0.03	0.04
query9	0.37	0.32	0.30
query10	0.55	0.56	0.57
query11	0.19	0.14	0.14
query12	0.19	0.14	0.14
query13	0.47	0.46	0.46
query14	1.00	0.99	1.00
query15	0.61	0.57	0.58
query16	0.32	0.33	0.33
query17	1.13	1.09	1.09
query18	0.22	0.19	0.19
query19	2.07	1.97	1.97
query20	0.02	0.01	0.01
query21	15.42	0.22	0.13
query22	4.93	0.05	0.06
query23	16.13	0.32	0.13
query24	2.96	0.42	0.32
query25	0.11	0.05	0.05
query26	0.74	0.20	0.16
query27	0.04	0.03	0.04
query28	3.52	0.83	0.34
query29	12.50	4.05	3.21
query30	0.28	0.14	0.17
query31	2.77	0.54	0.33
query32	3.21	0.58	0.49
query33	3.14	3.14	3.19
query34	15.60	3.93	3.29
query35	3.24	3.23	3.24
query36	0.54	0.44	0.42
query37	0.08	0.07	0.07
query38	0.05	0.03	0.04
query39	0.04	0.03	0.03
query40	0.18	0.16	0.15
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.05	0.03	0.03
Total cold run time: 96.26 s
Total hot run time: 23.96 s

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Automated static review completed at head 17a35689d143c0d6edc3db1413c64ad4039df6b7.

I found no new non-duplicate inline issue. Three existing unresolved discussions remain substantively blocking, so I am not duplicating them:

The custom-provider routing discussion remains unresolved in the GitHub UI, but current-head provider-based routing appears to address it. The scanner-v1 divergence was previously raised in a discussion that is now marked resolved, so this review does not reopen it.

Critical checkpoint conclusions:

  • Goal and proof: Current-version Parquet INT96 raw/configured decoding, recursive Paimon timestamp provenance, ORC half-up rounding and conservative pruning, provider/TVF propagation, and Parquet writer defaults were traced end to end. The three existing blockers above mean the compatibility and boundary-validation goal is not yet complete.
  • Scope and focus: The change is broad across FE, Thrift, BE readers, writer options, and tests, but remains focused on timestamp semantics and export defaults. review_focus.txt adds no narrower guidance.
  • Concurrency, lifecycle, and memory: Reader-local schema/native-field copies preserve cache ownership and pointer lifetimes; FE provider state is safely published. No new race, lock-order, static-initialization, cleanup, nullable-shape, or memory-safety defect was found.
  • Configuration, compatibility, and parallel paths: CREATE and TVF parsing are fail-fast and canonicalized, while ALTER validation and old-FE/mixed-BE semantics remain covered by the existing blockers. Catalog, provider, TVF, Paimon current/history, scanner-v2, scanner-v1, row/dictionary/statistics, OUTFILE, EXPORT, and replay paths were all checked.
  • Correctness and error handling: Status/exception propagation is explicit. ORC widened rounding, statistics, aggregate, SARG, negative/epoch, DST, and negated-predicate paths are conservative outside the already-reported local-endpoint defect. No additional wrong-result path survived duplicate suppression.
  • Tests and expected results: The changed unit/regression tests directly cover ordinary rounding, configured/raw/nested INT96, Paimon semantics, strict properties, and default/explicit writer output. Missing old-wire, non-UTC endpoint, and invalid-ALTER cases correspond to the existing blockers. Expected-output changes were consistent and deterministically ordered where applicable.
  • Observability and performance: No new attribution, diagnostic, retry, unbounded-work, or material hot-path allocation issue was found; parsing and recursive schema work occur at bounded validation/reader-setup boundaries.
  • Persistence, transactions, and writes: The export option is persisted and reconstructed, and unfinished replayed jobs are canceled before registration. No additional journal, partial-write, commit, rollback, crash-recovery, cloud-mode, or merge-on-write issue was found.

Validation was static only, as required by the review contract; no build, format check, or test command was run.

@hello-stephen

Copy link
Copy Markdown
Contributor

Cloud UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 77.57% (1912/2465)
Line Coverage 64.52% (34211/53024)
Region Coverage 64.43% (17273/26809)
Branch Coverage 53.94% (9249/17148)

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 28612 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 17a35689d143c0d6edc3db1413c64ad4039df6b7, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17590	3923	3888	3888
q2	2015	321	198	198
q3	10175	1417	776	776
q4	4680	465	340	340
q5	7532	829	541	541
q6	186	180	144	144
q7	755	816	586	586
q8	9348	1712	1565	1565
q9	5221	4007	3998	3998
q10	6759	1617	1365	1365
q11	502	350	322	322
q12	730	563	456	456
q13	18116	3290	2746	2746
q14	257	270	258	258
q15	q16	735	721	653	653
q17	1001	1063	968	968
q18	6700	5675	5569	5569
q19	1282	1295	1049	1049
q20	793	714	584	584
q21	5849	2626	2309	2309
q22	438	353	297	297
Total cold run time: 100664 ms
Total hot run time: 28612 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4385	4191	4246	4191
q2	277	316	207	207
q3	4674	4895	4373	4373
q4	2148	2214	1403	1403
q5	4220	4129	4300	4129
q6	235	170	129	129
q7	1684	1588	1402	1402
q8	2763	2143	2050	2050
q9	7247	7276	7181	7181
q10	4323	4226	3847	3847
q11	563	407	371	371
q12	715	708	515	515
q13	3193	3521	3130	3130
q14	307	310	266	266
q15	q16	735	699	623	623
q17	1283	1305	1300	1300
q18	8059	7448	7217	7217
q19	1088	1089	1043	1043
q20	2198	2193	1913	1913
q21	5218	4558	4412	4412
q22	514	449	395	395
Total cold run time: 55829 ms
Total hot run time: 50097 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 169193 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 17a35689d143c0d6edc3db1413c64ad4039df6b7, data reload: false

query5	4338	606	477	477
query6	461	246	225	225
query7	4844	603	347	347
query8	343	187	165	165
query9	8800	4045	4049	4045
query10	477	338	289	289
query11	5799	2177	1968	1968
query12	144	97	95	95
query13	1265	616	419	419
query14	6097	4709	4388	4388
query14_1	3820	3886	3780	3780
query15	211	197	177	177
query16	1026	473	463	463
query17	1120	709	575	575
query18	2456	488	341	341
query19	220	195	150	150
query20	107	100	106	100
query21	229	164	135	135
query22	13138	13025	12798	12798
query23	17196	16359	16002	16002
query23_1	16112	16091	16081	16081
query24	7399	1714	1229	1229
query24_1	1245	1235	1278	1235
query25	563	448	379	379
query26	1337	379	218	218
query27	2583	598	385	385
query28	4461	2062	2026	2026
query29	1067	610	488	488
query30	342	259	227	227
query31	1120	1086	963	963
query32	110	64	60	60
query33	543	344	260	260
query34	1176	1124	654	654
query35	741	737	636	636
query36	784	761	703	703
query37	152	114	103	103
query38	1838	1655	1604	1604
query39	821	829	800	800
query39_1	781	784	779	779
query40	262	168	148	148
query41	73	70	70	70
query42	100	96	97	96
query43	318	317	284	284
query44	1443	793	767	767
query45	195	183	170	170
query46	1045	1211	767	767
query47	1517	1513	1428	1428
query48	407	393	288	288
query49	591	411	302	302
query50	1087	424	344	344
query51	10418	10725	10486	10486
query52	82	85	74	74
query53	267	280	194	194
query54	284	229	218	218
query55	77	71	67	67
query56	308	289	290	289
query57	1000	1003	932	932
query58	287	303	260	260
query59	1530	1552	1390	1390
query60	296	268	254	254
query61	151	147	148	147
query62	403	315	269	269
query63	244	199	194	194
query64	2803	1011	885	885
query65	3850	3831	3771	3771
query66	1812	471	354	354
query67	28100	28078	27982	27982
query68	3311	1552	921	921
query69	408	297	264	264
query70	907	769	793	769
query71	380	345	328	328
query72	3009	2620	2306	2306
query73	835	784	426	426
query74	4657	4474	4307	4307
query75	2385	2336	1982	1982
query76	2278	1118	725	725
query77	348	378	276	276
query78	11175	11126	10681	10681
query79	1419	1176	787	787
query80	1280	535	466	466
query81	527	332	277	277
query82	598	149	120	120
query83	373	332	298	298
query84	280	164	131	131
query85	980	608	562	562
query86	411	229	218	218
query87	1785	1790	1773	1773
query88	3818	2833	2821	2821
query89	406	315	284	284
query90	1913	216	201	201
query91	203	189	159	159
query92	60	61	56	56
query93	1759	1494	957	957
query94	756	366	320	320
query95	779	605	460	460
query96	1062	784	350	350
query97	2482	2444	2337	2337
query98	203	195	186	186
query99	725	727	606	606
Total cold run time: 255897 ms
Total hot run time: 169193 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 25.19 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 17a35689d143c0d6edc3db1413c64ad4039df6b7, data reload: false

query1	0.01	0.01	0.00
query2	0.15	0.08	0.09
query3	0.37	0.24	0.25
query4	1.61	0.24	0.24
query5	0.33	0.31	0.32
query6	1.16	0.67	0.66
query7	0.04	0.00	0.01
query8	0.09	0.07	0.07
query9	0.51	0.38	0.39
query10	0.57	0.57	0.56
query11	0.30	0.17	0.17
query12	0.31	0.18	0.18
query13	0.52	0.53	0.53
query14	0.92	0.91	0.91
query15	0.68	0.58	0.59
query16	0.39	0.39	0.39
query17	1.00	1.02	0.99
query18	0.30	0.28	0.29
query19	1.91	1.83	1.79
query20	0.02	0.02	0.01
query21	15.44	0.36	0.32
query22	4.83	0.14	0.14
query23	15.82	0.49	0.31
query24	2.43	0.61	0.44
query25	0.15	0.11	0.10
query26	0.74	0.27	0.22
query27	0.10	0.11	0.10
query28	3.43	0.88	0.44
query29	12.44	4.22	3.24
query30	0.37	0.26	0.25
query31	2.77	0.59	0.34
query32	3.22	0.62	0.47
query33	2.87	2.93	2.98
query34	15.64	3.92	3.30
query35	3.16	3.16	3.15
query36	0.66	0.53	0.50
query37	0.16	0.08	0.09
query38	0.08	0.06	0.06
query39	0.07	0.06	0.06
query40	0.20	0.19	0.17
query41	0.12	0.08	0.08
query42	0.09	0.06	0.06
query43	0.07	0.06	0.06
Total cold run time: 96.05 s
Total hot run time: 25.19 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 67.57% (50/74) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 83.01% (425/512) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 74.40% (31489/42324)
Line Coverage 58.61% (346977/591972)
Region Coverage 54.73% (288116/526470)
Branch Coverage 55.80% (129234/231587)

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 40.54% (30/74) 🎉
Increment coverage report
Complete coverage report

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.

5 participants