tensorflow_ops/timestamp_ops.py (112 lines of code) (raw):

# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Python wrapper for BQML timestamp custom ops.""" from bigquery_ml_utils.tensorflow_ops.load_module import load_module gen_timestamp_ops = load_module("_timestamp_ops.so") def extract_from_timestamp(part, timestamp, time_zone="UTC", name=None): """Returns the specified part from a supplied timestamp at a given timezone. Equivalent SQL: EXTRACT(part FROM timestamp AT TIME ZONE time_zone) Args: part: A string represents the datetime part. Can be MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAYOFWEEK, DAY, DAYOFYEAR, WEEK, WEEK(<WEEKDAY>), ISOWEEK, MONTH, QUARTER, YEAR, ISOYEAR. Case insensitive. timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.extract_from_timestamp( part=part, timestamp=timestamp, time_zone=time_zone, name=name ) def string_from_timestamp(timestamp, time_zone="UTC", name=None): """Returns a string from a timestamp at a given timezone. Equivalent SQL: STRING(timestamp_expression[, time_zone]) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.string_from_timestamp( timestamp=timestamp, time_zone=time_zone, name=name ) def timestamp_from_string(timestamp_string, time_zone=None, name=None): """Returns a timestamp from a string at a given timezone. Equivalent SQL: TIMESTAMP(string_expression[, time_zone]) Args: timestamp_string: tf.Tensor of type string. Must include a timestamp literal. If timestamp includes a time_zone in the string, do not include an explicit time_zone argument. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_from_string( timestamp_string=timestamp_string, time_zone="UTC" if time_zone is None else time_zone, allow_tz_in_str=time_zone is None, name=name, ) def timestamp_from_date(date, time_zone="UTC", name=None): """Returns a timestamp from a date at a given timezone. Equivalent SQL: TIMESTAMP(date_expression[, time_zone]) Args: date: tf.Tensor of type string. Date in "%F" format. Returned is the earliest timestamp that falls within the given date. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_from_date( date=date, time_zone=time_zone, name=name, ) def timestamp_from_datetime(datetime, time_zone="UTC", name=None): """Returns a timestamp from a datetime at a given timezone. Equivalent SQL: TIMESTAMP(datetime_expression[, time_zone]) Args: datetime: tf.Tensor of type string. Datetime in "%F %H:%M:%E6S" format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_from_datetime( datetime=datetime, time_zone=time_zone, name=name, ) def timestamp_add(timestamp, interval, part, name=None): """Returns a timestamp by adding interval to the timestamp. Equivalent SQL: TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. interval: tf.Tensor of type int64. Integer represents the unit of part. part: A string represents the datetime part. Can be MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY. Case insensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_add( timestamp=timestamp, interval=interval, part=part, name=name, ) def timestamp_sub(timestamp, interval, part, name=None): """Returns a timestamp by subtracting interval to the timestamp. Equivalent SQL: TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. interval: tf.Tensor of type int64. Integer represents the unit of part. part: A string represents the datetime part. Can be MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY. Case insensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_sub( timestamp=timestamp, interval=interval, part=part, name=name, ) def timestamp_diff(timestamp_a, timestamp_b, part, name=None): """Returns the whole number of specified date_part intervals between timestamp_a and timestamp_b. Equivalent SQL: TIMESTAMP_DIFF(timestamp_expression_a, timestamp_expression_b, date_part) Args: timestamp_a: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. timestamp_b: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. part: A string represents the datetime part. Can be MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY. Case insensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_diff( timestamp_a=timestamp_a, timestamp_b=timestamp_b, part=part, name=name, ) def timestamp_trunc(timestamp, part, time_zone="UTC", name=None): """Returns a timestamp which by truncating the original timestamp to the granularity of part. Equivalent SQL: TIMESTAMP_TRUNC(timestamp_expression, date_time_part[, time_zone]) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. part: A string represents the datetime part. Can be MICROSECOND, MILLISECOND, SECOND,MINUTE, HOUR, DAY, WEEK, WEEK_MONDAY, WEEK_TUESDAY, WEEK_WEDNESDAY, WEEK_THURSDAY, WEEK_FRIDAY, WEEK_SATURDAY, ISOWEEK, MONTH, QUARTER, YEAR, ISOYEAR. Case insensitive. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_trunc( timestamp=timestamp, part=part, time_zone=time_zone, name=name, ) def format_timestamp(format_string, timestamp, time_zone="UTC", name=None): """Returns a timestamp string based on format_string. Equivalent SQL: FORMAT_TIMESTAMP(format_string, timestamp[, time_zone]) Args: format_string: tf.Tensor of type string. Format of the output string. timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.format_timestamp( format_string=format_string, timestamp=timestamp, time_zone=time_zone, name=name, ) def parse_timestamp( format_string, timestamp_string, time_zone="UTC", name=None ): """Returns a timestamp by parsing a string. Equivalent SQL: PARSE_TIMESTAMP(format_string, timestamp_string[, time_zone]) Args: format_string: tf.Tensor of type string. Format of the string timestamp. timestamp_string: tf.Tensor of type string. Timestamp in any supported format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.parse_timestamp( format_string=format_string, timestamp_string=timestamp_string, time_zone=time_zone, name=name, ) def safe_parse_timestamp( format_string, timestamp_string, time_zone="UTC", name=None ): """Returns a timestamp by safely parsing a string. Equivalent SQL: SAFE.PARSE_TIMESTAMP(format_string, timestamp_string[, time_zone]). Returns '1970-01-01 00:00:00.0 +0000' for unsuccessful parsing. Args: format_string: tf.Tensor of type string. Format of the string timestamp. timestamp_string: tf.Tensor of type string. Timestamp in any supported format. time_zone: A string represents the timezone. Case sensitive. name: An optional name for the op. """ return gen_timestamp_ops.safe_parse_timestamp( format_string=format_string, timestamp_string=timestamp_string, time_zone=time_zone, name=name, ) def timestamp_micros(timestamp_micro, name=None): """Returns a timestamp by interpreting timestamp_micro as the number of microseconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: TIMESTAMP_MICROS(int64_expression) Args: timestamp_micro: tf.Tensor of type int64. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_micros( timestamp_micro=timestamp_micro, name=name, ) def timestamp_millis(timestamp_milli, name=None): """Returns a timestamp by interpreting timestamp_milli as the number of milliseconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: TIMESTAMP_MILLIS(int64_expression) Args: timestamp_milli: tf.Tensor of type int64. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_millis( timestamp_milli=timestamp_milli, name=name, ) def timestamp_seconds(timestamp_sec, name=None): """Returns a timestamp by interpreting timestamp_sec as the number of seconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: TIMESTAMP_SECONDS(int64_expression) Args: timestamp_sec: tf.Tensor of type int64. name: An optional name for the op. """ return gen_timestamp_ops.timestamp_seconds( timestamp_sec=timestamp_sec, name=name, ) def unix_micros(timestamp, name=None): """Returns the number of microseconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: UNIX_MICROS(timestamp_expression) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. name: An optional name for the op. """ return gen_timestamp_ops.unix_micros( timestamp=timestamp, name=name, ) def unix_millis(timestamp, name=None): """Returns number of milliseconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: UNIX_MILLIS(timestamp_expression) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. name: An optional name for the op. """ return gen_timestamp_ops.unix_millis( timestamp=timestamp, name=name, ) def unix_seconds(timestamp, name=None): """Returns number of seconds since 1970-01-01 00:00:00 UTC. Equivalent SQL: UNIX_SECONDS(timestamp_expression) Args: timestamp: tf.Tensor of type string. Timestamp in "%F %H:%M:%E1S %z" format. name: An optional name for the op. """ return gen_timestamp_ops.unix_seconds( timestamp=timestamp, name=name, )