Skip to content

date_bin cannot use a string origin parameter when the expression has a time zone. #7697

@mhilton

Description

@mhilton

Describe the bug

The optional third parameter to date_bin, which is the origin time, can normally be specified with a time constant in a string. If the input expression has a type that includes a time zone then datafusion returns the following error:

Error during planning: No function matches the given name and argument types 'date_bin(Utf8, Timestamp(Nanosecond, Some("+00:00")), Utf8)'. You might need to add explicit type casts.
	Candidate functions:
	date_bin(Interval(MonthDayNano), Timestamp(Nanosecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Nanosecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Nanosecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(DayTime), Timestamp(Nanosecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Nanosecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Nanosecond, None))
	date_bin(Interval(DayTime), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Microsecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Microsecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Microsecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(DayTime), Timestamp(Microsecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Microsecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Microsecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Microsecond, None))
	date_bin(Interval(DayTime), Timestamp(Microsecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Millisecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Millisecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Millisecond, None), Timestamp(Nanosecond, None))
	date_bin(Interval(DayTime), Timestamp(Millisecond, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Millisecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Millisecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Millisecond, None))
	date_bin(Interval(DayTime), Timestamp(Millisecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Second, None), Timestamp(Nanosecond, None))
	date_bin(Interval(MonthDayNano), Timestamp(Second, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Second, None), Timestamp(Nanosecond, None))
	date_bin(Interval(DayTime), Timestamp(Second, Some("+TZ")), Timestamp(Nanosecond, Some("+TZ")))
	date_bin(Interval(MonthDayNano), Timestamp(Second, None))
	date_bin(Interval(MonthDayNano), Timestamp(Second, Some("+TZ")))
	date_bin(Interval(DayTime), Timestamp(Second, None))
	date_bin(Interval(DayTime), Timestamp(Second, Some("+TZ")))

To Reproduce

To reproduce run the following script in datafusion-cli:

-- Create a table with some timestamps in it.
CREATE TABLE test (
  time TIMESTAMP WITH TIME ZONE
) AS VALUES
  ('2000-01-01T00:00:00Z'),
  ('2000-01-01T00:00:01Z');

-- Check that the column preserved the time zone.
SELECT arrow_typeof(time) FROM test;

-- Check that date_bin runs without an origin.
SELECT date_bin('1 minute', time) FROM test;

-- Check that date_bin runs with an origin.
SELECT date_bin('1 minute', time, '1970-01-01T00:00:00Z') FROM test;

Expected behavior

The SELECT date_bin('1 minute', time) FROM test; and SELECT date_bin('1 minute', time, '1970-01-01T00:00:00Z') FROM test; queries should produce identical results.

Additional context

The time zone support for date_bin doesn't seem to be in a released version yet. I was testing this with a datafusion-cli built from commit 4b2b7dcfc63abfc03b0279abe122c5bdfcca5275.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions