Skip to content

Support for extract(x from time) / date_part from time types - #8693

Merged
alamb merged 3 commits into
apache:mainfrom
Jefffrey:extract_from_time
Mar 21, 2024
Merged

Support for extract(x from time) / date_part from time types#8693
alamb merged 3 commits into
apache:mainfrom
Jefffrey:extract_from_time

Conversation

@Jefffrey

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Closes#8692

Rationale for this change

What changes are included in this PR?

Extend support for extract and date_part to Time32 and Time64 types, for relevant precisions (hours, minutes, seconds, etc.)

Are these changes tested?

Are there any user-facing changes?

@github-actionsgithub-actionsBot added logical-expr Logical plan and expressions physical-expr Changes to the physical-expr crates core Core DataFusion crate labels Dec 31, 2023
@Jefffrey

Copy link
Copy Markdown
ContributorAuthor

Depends on apache/arrow-rs#5262

Will keep this in draft until arrow-rs support is merged and available to Datafusion

(Also need to update docs)

@alamb

Copy link
Copy Markdown
Contributor

Release of arrow is tracked by apache/arrow-rs#5234

@Jefffrey

Copy link
Copy Markdown
ContributorAuthor

Pending apache/arrow-rs#5337 which will come as part of arrow-rs v51.0.0 (next release)

@Jefffrey
Jefffrey marked this pull request as ready for review March 19, 2024 21:20
@github-actionsgithub-actionsBot added sqllogictest SQL Logic Tests (.slt) and removed logical-expr Logical plan and expressions physical-expr Changes to the physical-expr crates core Core DataFusion crate labels Mar 19, 2024
Comment on lines -155 to -157
///
/// # Panics
/// If `array` is not a temporal type such as Timestamp or Date32

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Realized my previous comment #9613 (comment) was incorrect about panics since it'll just return an error, so correcting here

query R
SELECT date_part('microsecond', arrow_cast('23:32:50.123456789'::time, 'Time64(Nanosecond)'))
----
50123456.789000005

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Just floating point stuff

Not sure if want to look into it further or not

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.

I think this is fine

@alambalamb 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.

Thank you @Jefffrey -- this looks great to me. Thank you for sticking with this.

}
Date32 => as_date32_array(array)?.unary(|x| x as f64 * SECONDS_IN_A_DAY),
Date64 => as_date64_array(array)?.unary(|x| x as f64 / 1_000_f64),
Time32(Second) => as_time32_second_array(array)?.unary(|x| x as f64),

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.

👨‍🍳 👌 -- very nice

----
12123456780

# test_date_part_time

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.

Is it also worth testing the EXTRACT (...) syntax too ?

like EXTRACT( hour from arrow_cast('23:32:50'::time, 'Time32(Second)')))?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Good point, added 👍

query R
SELECT date_part('microsecond', arrow_cast('23:32:50.123456789'::time, 'Time64(Nanosecond)'))
----
50123456.789000005

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.

I think this is fine

@alambalamb changed the title Initial support for extract(x from time)Support for extract(x from time) / date_part from time typesMar 20, 2024

@alambalamb 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.

Thanks again @Jefffrey

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

sqllogictestSQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support extract(x from time) for Time32 and Time64 types

2 participants

@Jefffrey@alamb