funktion time_bucket

Gäller för:kryssa i ja Databricks SQL-kryss markerad ja Databricks Runtime 19 och uppåt

Returnerar början på den tidsbucket med fast bredd som en tidsstämpel tillhör, justerad mot ett ursprung.

Syntax

time_bucket(bucketSize, ts [, origin])

Arguments

  • bucketSize: Ett INTERVAL konstant uttryck som specificerar storleken på varje hink. Stöder dagtids- och års-månadsintervaller. Måste vara positiv och icke-noll.
  • ts: Ett TIMESTAMP eller TIMESTAMP_NTZ uttryck till hink.
  • origin: Ett valfritt TIMESTAMP eller TIMESTAMP_NTZ konstant uttryck som definierar justeringsankaret för hinknätet. Standardinställningen är 1970-01-01 00:00:00. Måste vara samma typ som ts.

Returns

Ett värde av samma typ som ts (TIMESTAMP eller TIMESTAMP_NTZ). Värdet är början på den halvöppna hinken [start, start + bucketSize) som innehåller ts. Startpunkten är alltid mindre än eller lika med ts, och nästa hinkgräns (start + bucketSize) är strikt större än ts.

Anteckningar

  • time_bucket delar tidsaxeln i på varandra följande, icke-överlappande intervall av storlek bucketSize, förankrade vid origin. Den returnerar början av intervallet som innehåller ts.
  • origin behöver inte föregå ts. Den definierar endast justeringen av hinknätet. Nätet sträcker sig oändligt i båda riktningarna från origin.
  • För TIMESTAMP_NTZ, time_bucket hinkar i UTC. För TIMESTAMP, år-månad-intervallhinkar och kalenderdagskomponenterna i dagtidsintervall-hinkar justeras mot sessionens tidszon.
  • Om något argument är NULL, blir resultatet NULL.
  • Använd date_trunc för kalenderanpassade gränser, såsom gruppering efter kalendermånad. Använd time_bucket när hinkbredden eller justeringen är användardefinierad.

Vanliga felvillkor

Examples

-- 15-minute buckets (default origin at epoch)
> SELECT time_bucket(INTERVAL '15' MINUTE, TIMESTAMP '2024-01-01 11:27:00');
 2024-01-01 11:15:00

-- 1-hour buckets
> SELECT time_bucket(INTERVAL '1' HOUR, TIMESTAMP '2024-01-01 11:27:00');
 2024-01-01 11:00:00

-- Custom origin shifts bucket alignment to :05 past the hour
> SELECT time_bucket(INTERVAL '1' HOUR, TIMESTAMP '2024-01-01 11:27:00', TIMESTAMP '1970-01-01 00:05:00');
 2024-01-01 11:05:00

-- TIMESTAMP_NTZ variant
> SELECT time_bucket(INTERVAL '15' MINUTE, TIMESTAMP_NTZ '2024-01-01 11:27:00');
 2024-01-01 11:15:00

-- ts exactly on a bucket boundary returns itself
> SELECT time_bucket(INTERVAL '15' MINUTE, TIMESTAMP '2024-01-01 11:15:00');
 2024-01-01 11:15:00

-- Origin after ts: grid extends backward
> SELECT time_bucket(INTERVAL '1' HOUR, TIMESTAMP '2024-01-01 11:27:00', TIMESTAMP '2025-01-01 00:30:00');
 2024-01-01 10:30:00

-- Monthly buckets (default epoch origin: 1st of month)
> SELECT time_bucket(INTERVAL '1' MONTH, TIMESTAMP '2024-03-15 11:27:00');
 2024-03-01 00:00:00

-- Quarterly buckets
> SELECT time_bucket(INTERVAL '3' MONTH, TIMESTAMP '2024-05-15 10:00:00');
 2024-04-01 00:00:00

-- Monthly buckets with origin on the 15th
> SELECT time_bucket(INTERVAL '1' MONTH, TIMESTAMP '2024-03-20 09:00:00', TIMESTAMP '1970-01-15 00:00:00');
 2024-03-15 00:00:00

-- Origin on 31st: day clamping in short months
> SELECT time_bucket(INTERVAL '1' MONTH, TIMESTAMP '2024-03-01 12:00:00', TIMESTAMP '1970-01-31 00:00:00');
 2024-02-29 00:00:00

-- Zero bucket width is rejected
> SELECT time_bucket(INTERVAL '0' SECOND, TIMESTAMP '2024-01-01 11:00:00');
 [DATATYPE_MISMATCH.VALUE_OUT_OF_RANGE] The bucketSize must be between (0, inf) (current value = INTERVAL '00' SECOND).