Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(types): support ns timestamp #19827

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open

Conversation

xxhZs
Copy link
Contributor

@xxhZs xxhZs commented Dec 17, 2024

I hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.

What's changed and what's your intention?

our timestamp only support ms, But our internal implementation is capable of ns, it's just that we automatically convert it to ms when we read it in, and this pr can read ns to support ns.

Checklist

  • I have written necessary rustdoc comments.
  • I have added necessary unit tests and integration tests.
  • I have added test labels as necessary.
  • I have added fuzzing tests or opened an issue to track them.
  • My PR contains breaking changes.
  • My PR changes performance-critical code, so I will run (micro) benchmarks and present the results.
  • My PR contains critical fixes that are necessary to be merged into the latest release.

Documentation

  • My PR needs documentation updates.
Release note

@xxhZs xxhZs requested a review from a team as a code owner December 17, 2024 08:37
@xxhZs xxhZs requested a review from xxchan December 17, 2024 08:37
@graphite-app graphite-app bot requested a review from a team December 17, 2024 09:25
@hzxa21 hzxa21 requested a review from wcy-fdu December 18, 2024 03:40
@wcy-fdu
Copy link
Contributor

wcy-fdu commented Dec 18, 2024

I tested whether I could read nanosecond in the parquet file on this branch, and it seemed to work.
image

@wcy-fdu wcy-fdu enabled auto-merge December 19, 2024 04:39
@wcy-fdu wcy-fdu disabled auto-merge December 19, 2024 04:40
@wcy-fdu
Copy link
Contributor

wcy-fdu commented Dec 19, 2024

sorry, mis clicked update branch

@wcy-fdu
Copy link
Contributor

wcy-fdu commented Dec 19, 2024

cc @xiangjinwu PTAL❤️

Copy link
Contributor

@xiangjinwu xiangjinwu left a comment

Choose a reason for hiding this comment

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

  • Could you also include the testing SQLs you have tried?
  • Is any caller of to_protobuf/from_protobuf assuming that Timestamp would be fixed 64-bit? This assumption is no longer true.

)
}
let dt = s
.parse::<jiff::civil::DateTime>()
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we need to introduce yet another dependency in addition to chrono and speedate?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Because chrono can't be parsed, and speedate is only parsed at the us level

src/common/src/types/datetime.rs Outdated Show resolved Hide resolved
src/common/src/types/datetime.rs Outdated Show resolved Hide resolved
@@ -495,7 +495,7 @@ impl HummockVersion {
.clone_from(&group_construct.table_ids);
self.levels.insert(*compaction_group_id, new_levels);
let member_table_ids = if group_construct.version
>= CompatibilityVersion::NoMemberTableIds as _
>= CompatibilityVersion::NoMemberTableIds as i32
Copy link
Contributor

Choose a reason for hiding this comment

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

avoid unrelated change

Copy link
Contributor

Choose a reason for hiding this comment

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

It seems we do need this as long as we use jiff in src/common/src/types/datetime.rs. Not sure why though ... maybe a rustc bug.

Btw it can be group_construct.version() >= CompatibilityVersion::NoMemberTableIds rather than if group_construct.version >= CompatibilityVersion::NoMemberTableIds as i32

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It doesn't seem to work because the type of CompatibilityVersion::NoMemberTableIds is not i32

Copy link
Contributor

Choose a reason for hiding this comment

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

group_construct.version() returns CompatibilityVersion, while group_construct.version is i32

@xxhZs
Copy link
Contributor Author

xxhZs commented Dec 23, 2024

  • Could you also include the testing SQLs you have tried?

added in ci

@xxhZs xxhZs requested a review from xiangjinwu December 23, 2024 07:35
src/common/src/types/datetime.rs Outdated Show resolved Hide resolved
@@ -495,7 +495,7 @@ impl HummockVersion {
.clone_from(&group_construct.table_ids);
self.levels.insert(*compaction_group_id, new_levels);
let member_table_ids = if group_construct.version
>= CompatibilityVersion::NoMemberTableIds as _
>= CompatibilityVersion::NoMemberTableIds as i32
Copy link
Contributor

Choose a reason for hiding this comment

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

It seems we do need this as long as we use jiff in src/common/src/types/datetime.rs. Not sure why though ... maybe a rustc bug.

Btw it can be group_construct.version() >= CompatibilityVersion::NoMemberTableIds rather than if group_construct.version >= CompatibilityVersion::NoMemberTableIds as i32

e2e_test/batch/types/timestamp_ns.slt.part Outdated Show resolved Hide resolved
@xiangjinwu
Copy link
Contributor

Btw you can fix the e2e test with rowsort.

https://www.sqlite.org/sqllogictest/doc/trunk/about.wiki

The default is "nosort". In nosort mode, the results appear in exactly the order in which they were received from the database engine. The nosort mode should only be used on queries that have an ORDER BY clause or which only have a single row of result, since otherwise the order of results is undefined and might vary from one database engine to another. The "rowsort" mode gathers all output from the database engine then sorts it by rows on the client side.

#6776

If there's rowsort, slt file will contain sorted results.

@xxhZs xxhZs force-pushed the xxh/support-timestamp-ns-1 branch from 26d9664 to 6b8af32 Compare December 26, 2024 07:49
@xiangjinwu
Copy link
Contributor

xiangjinwu commented Dec 26, 2024

FYI regarding your latest e2e failure, it is actually a bug in our existing to_char implementation #19944:

1 BC in PostgreSQL is year 0 in chrono. Although chrono also provides DateLike::year_ce method, its strftime module does not provide a specifier to use year_ce instead of year.

Given it is out of scope of this PR, let's just replace the case with one without BC.

fxi ci

fix ci

fix ci
@xxhZs xxhZs force-pushed the xxh/support-timestamp-ns-1 branch from 6b8af32 to 2c87c76 Compare December 26, 2024 09:54
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.

4 participants