You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ro...@apache.org on 2020/07/10 00:58:08 UTC

[beam] branch master updated: [BEAM-10438] Sync ZetaSQL function allowlist with full list from ZetaSQL (#12214)

This is an automated email from the ASF dual-hosted git repository.

robinyqiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 12d7d7a  [BEAM-10438] Sync ZetaSQL function allowlist with full list from ZetaSQL (#12214)
12d7d7a is described below

commit 12d7d7a2cc18f74f5b0eb15c5d2b709de0b3e976
Author: Yueyang Qiu <ro...@google.com>
AuthorDate: Thu Jul 9 17:57:51 2020 -0700

    [BEAM-10438] Sync ZetaSQL function allowlist with full list from ZetaSQL (#12214)
---
 .../sql/zetasql/SqlStdOperatorMappingTable.java    | 835 ++++++++++++++-------
 1 file changed, 579 insertions(+), 256 deletions(-)

diff --git a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
index 42a81cd..86ee389 100644
--- a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
+++ b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
@@ -29,127 +29,600 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
 /** SqlStdOperatorMappingTable. */
 @Internal
 public class SqlStdOperatorMappingTable {
+
+  /**
+   * Keep this list in sync with
+   * https://github.com/google/zetasql/blob/master/zetasql/public/builtin_function.proto. Uncomment
+   * the corresponding entries to enable parser support to the operators/functions.
+   *
+   * <p>Last synced ZetaSQL release: 2020.06.01
+   */
   static final List<FunctionSignatureId> ZETASQL_BUILTIN_FUNCTION_ALLOWLIST =
       ImmutableList.of(
-          FunctionSignatureId.FN_AND,
-          FunctionSignatureId.FN_ANY_VALUE,
-          FunctionSignatureId.FN_STRING_AGG_STRING,
-          FunctionSignatureId.FN_BIT_OR_INT64,
-          // JIRA link: https://issues.apache.org/jira/browse/BEAM-10379
-          // FunctionSignatureId.FN_BIT_AND_INT64,
-          FunctionSignatureId.FN_OR,
-          FunctionSignatureId.FN_NOT,
-          FunctionSignatureId.FN_MULTIPLY_DOUBLE,
-          FunctionSignatureId.FN_MULTIPLY_INT64,
-          FunctionSignatureId.FN_MULTIPLY_NUMERIC,
-          FunctionSignatureId.FN_DIVIDE_DOUBLE,
-          FunctionSignatureId.FN_DIVIDE_NUMERIC,
-          FunctionSignatureId.FN_ADD_DOUBLE,
-          FunctionSignatureId.FN_ADD_INT64,
-          FunctionSignatureId.FN_ADD_NUMERIC,
-          FunctionSignatureId.FN_SUBTRACT_DOUBLE,
-          FunctionSignatureId.FN_SUBTRACT_INT64,
-          FunctionSignatureId.FN_SUBTRACT_NUMERIC,
-          FunctionSignatureId.FN_UNARY_MINUS_INT64,
-          FunctionSignatureId.FN_UNARY_MINUS_DOUBLE,
-          FunctionSignatureId.FN_UNARY_MINUS_NUMERIC,
-          FunctionSignatureId.FN_GREATER,
-          FunctionSignatureId.FN_GREATER_OR_EQUAL,
-          FunctionSignatureId.FN_LESS,
-          FunctionSignatureId.FN_LESS_OR_EQUAL,
-          FunctionSignatureId.FN_EQUAL,
-          FunctionSignatureId.FN_NOT_EQUAL,
-          FunctionSignatureId.FN_IS_NULL,
-          FunctionSignatureId.FN_IS_TRUE,
-          FunctionSignatureId.FN_IS_FALSE,
-          FunctionSignatureId.FN_STARTS_WITH_STRING,
-          FunctionSignatureId.FN_SUBSTR_STRING,
-          FunctionSignatureId.FN_TRIM_STRING,
-          FunctionSignatureId.FN_LTRIM_STRING,
-          FunctionSignatureId.FN_RTRIM_STRING,
-          FunctionSignatureId.FN_REPLACE_STRING,
-          FunctionSignatureId.FN_CONCAT_STRING,
-          FunctionSignatureId.FN_COUNT_STAR,
-          FunctionSignatureId.FN_COUNT,
-          FunctionSignatureId.FN_MAX,
-          FunctionSignatureId.FN_MIN,
-          FunctionSignatureId.FN_AVG_DOUBLE,
-          FunctionSignatureId.FN_AVG_INT64,
-          FunctionSignatureId.FN_AVG_NUMERIC,
-          FunctionSignatureId.FN_SUM_DOUBLE,
-          FunctionSignatureId.FN_SUM_INT64,
-          FunctionSignatureId.FN_SUM_NUMERIC,
-          FunctionSignatureId.FN_MOD_INT64,
-          FunctionSignatureId.FN_MOD_NUMERIC,
-          FunctionSignatureId.FN_CASE_NO_VALUE,
-          FunctionSignatureId.FN_CASE_WITH_VALUE,
-          FunctionSignatureId.FN_FLOOR_DOUBLE,
-          FunctionSignatureId.FN_FLOOR_NUMERIC,
-          FunctionSignatureId.FN_CEIL_DOUBLE,
-          FunctionSignatureId.FN_CEIL_NUMERIC,
-          FunctionSignatureId.FN_REVERSE_STRING,
-          FunctionSignatureId.FN_CHAR_LENGTH_STRING,
-          FunctionSignatureId.FN_ENDS_WITH_STRING,
-          FunctionSignatureId.FN_STRING_LIKE,
-          FunctionSignatureId.FN_BYTE_LIKE,
-          FunctionSignatureId.FN_COALESCE,
-          FunctionSignatureId.FN_IF,
-          FunctionSignatureId.FN_IFNULL,
-          FunctionSignatureId.FN_NULLIF,
-
-          // Date functions
-          FunctionSignatureId.FN_CURRENT_DATE, // current_date
-          FunctionSignatureId.FN_EXTRACT_FROM_DATE, // $extract
-          FunctionSignatureId.FN_DATE_FROM_YEAR_MONTH_DAY, // date
-          FunctionSignatureId.FN_DATE_FROM_TIMESTAMP, // date
-          // FunctionSignatureId.FN_DATE_FROM_DATETIME, // date
-          FunctionSignatureId.FN_DATE_ADD_DATE, // date_add
-          FunctionSignatureId.FN_DATE_SUB_DATE, // date_sub
-          FunctionSignatureId.FN_DATE_DIFF_DATE, // date_diff
-          FunctionSignatureId.FN_DATE_TRUNC_DATE, // date_trunc
-          FunctionSignatureId.FN_FORMAT_DATE, // format_date
-          FunctionSignatureId.FN_PARSE_DATE, // parse_date
-          FunctionSignatureId.FN_UNIX_DATE, // unix_date
-          FunctionSignatureId.FN_DATE_FROM_UNIX_DATE, // date_from_unix_date
+          FunctionSignatureId.FN_ADD_DOUBLE, // $add
+          FunctionSignatureId.FN_ADD_INT64, // $add
+          FunctionSignatureId.FN_ADD_NUMERIC, // $add
+          // FunctionSignatureId.FN_ADD_BIGNUMERIC, // $add
+          FunctionSignatureId.FN_AND, // $and
+          FunctionSignatureId.FN_CASE_NO_VALUE, // $case_no_value
+          FunctionSignatureId.FN_CASE_WITH_VALUE, // $case_with_value
+          FunctionSignatureId.FN_DIVIDE_DOUBLE, // $divide
+          FunctionSignatureId.FN_DIVIDE_NUMERIC, // $divide
+          // FunctionSignatureId.FN_DIVIDE_BIGNUMERIC, // $divide
+          FunctionSignatureId.FN_GREATER, // $greater
+          FunctionSignatureId.FN_GREATER_OR_EQUAL, // $greater_or_equal
+          FunctionSignatureId.FN_LESS, // $less
+          FunctionSignatureId.FN_LESS_OR_EQUAL, // $less_or_equal
+          FunctionSignatureId.FN_EQUAL, // $equal
+          FunctionSignatureId.FN_STRING_LIKE, // $like
+          FunctionSignatureId.FN_BYTE_LIKE, // $like
+          // FunctionSignatureId.FN_IN, // $in
+          // FunctionSignatureId.FN_IN_ARRAY, // $in_array
+          // FunctionSignatureId.FN_BETWEEN, // $between
+          FunctionSignatureId.FN_IS_NULL, // $is_null
+          FunctionSignatureId.FN_IS_TRUE, // $is_true
+          FunctionSignatureId.FN_IS_FALSE, // $is_false
+          FunctionSignatureId.FN_MULTIPLY_DOUBLE, // $multiply
+          FunctionSignatureId.FN_MULTIPLY_INT64, // $multiply
+          FunctionSignatureId.FN_MULTIPLY_NUMERIC, // $multiply
+          // FunctionSignatureId.FN_MULTIPLY_BIGNUMERIC, // $multiply
+          FunctionSignatureId.FN_NOT, // $not
+          FunctionSignatureId.FN_NOT_EQUAL, // $not_equal
+          FunctionSignatureId.FN_OR, // $or
+          FunctionSignatureId.FN_SUBTRACT_DOUBLE, // $subtract
+          FunctionSignatureId.FN_SUBTRACT_INT64, // $subtract
+          FunctionSignatureId.FN_SUBTRACT_NUMERIC, // $subtract
+          // FunctionSignatureId.FN_SUBTRACT_BIGNUMERIC, // $subtract
+          FunctionSignatureId.FN_UNARY_MINUS_INT64, // $unary_minus
+          FunctionSignatureId.FN_UNARY_MINUS_DOUBLE, // $unary_minus
+          FunctionSignatureId.FN_UNARY_MINUS_NUMERIC, // $unary_minus
+          // FunctionSignatureId.FN_UNARY_MINUS_BIGNUMERIC, // $unary_minus
+
+          // Bitwise unary operators.
+          // FunctionSignatureId.FN_BITWISE_NOT_INT64, // $bitwise_not
+          // FunctionSignatureId.FN_BITWISE_NOT_BYTES, // $bitwise_not
+          // Bitwise binary operators.
+          // FunctionSignatureId.FN_BITWISE_OR_INT64, // $bitwise_or
+          // FunctionSignatureId.FN_BITWISE_OR_BYTES, // $bitwise_or
+          // FunctionSignatureId.FN_BITWISE_XOR_INT64, // $bitwise_xor
+          // FunctionSignatureId.FN_BITWISE_XOR_BYTES, // $bitwise_xor
+          // FunctionSignatureId.FN_BITWISE_AND_INT64, // $bitwise_and
+          // FunctionSignatureId.FN_BITWISE_AND_BYTES, // $bitwise_and
+          // FunctionSignatureId.FN_BITWISE_LEFT_SHIFT_INT64, // $bitwise_left_shift
+          // FunctionSignatureId.FN_BITWISE_LEFT_SHIFT_BYTES, // $bitwise_left_shift
+          // FunctionSignatureId.FN_BITWISE_RIGHT_SHIFT_INT64, // $bitwise_right_shift
+          // FunctionSignatureId.FN_BITWISE_RIGHT_SHIFT_BYTES, // $bitwise_right_shift
+
+          // BIT_COUNT functions.
+          // FunctionSignatureId.FN_BIT_COUNT_INT64, // bit_count(int64) -> int64
+          // FunctionSignatureId.FN_BIT_COUNT_BYTES, // bit_count(bytes) -> int64
+
+          // FunctionSignatureId.FN_ERROR,// error(string) -> {unused result, coercible to any type}
+
+          FunctionSignatureId.FN_COUNT_STAR, // $count_star
+
+          //
+          // The following functions use standard function call syntax.
+          //
+
+          // String functions
+          FunctionSignatureId.FN_CONCAT_STRING, // concat(repeated string) -> string
+          // FunctionSignatureId.FN_CONCAT_BYTES, // concat(repeated bytes) -> bytes
+          // FunctionSignatureId.FN_CONCAT_OP_STRING, // concat(string, string) -> string
+          // FunctionSignatureId.FN_CONCAT_OP_BYTES, // concat(bytes, bytes) -> bytes
+          // FunctionSignatureId.FN_STRPOS_STRING, // strpos(string, string) -> int64
+          // FunctionSignatureId.FN_STRPOS_BYTES, // strpos(bytes, bytes) -> int64
+
+          // FunctionSignatureId.FN_INSTR_STRING,// instr(string, string[, int64[, int64]]) -> int64
+          // FunctionSignatureId.FN_INSTR_BYTES, // instr(bytes, bytes[, int64[, int64]]) -> int64
+          // FunctionSignatureId.FN_LOWER_STRING, // lower(string) -> string
+          // FunctionSignatureId.FN_LOWER_BYTES, // lower(bytes) -> bytes
+          // FunctionSignatureId.FN_UPPER_STRING, // upper(string) -> string
+          // FunctionSignatureId.FN_UPPER_BYTES, // upper(bytes) -> bytes
+          // FunctionSignatureId.FN_LENGTH_STRING, // length(string) -> int64
+          // FunctionSignatureId.FN_LENGTH_BYTES, // length(bytes) -> int64
+          FunctionSignatureId.FN_STARTS_WITH_STRING, // starts_with(string, string) -> string
+          // FunctionSignatureId.FN_STARTS_WITH_BYTES, // starts_with(bytes, bytes) -> bytes
+          FunctionSignatureId.FN_ENDS_WITH_STRING, // ends_with(string, string) -> string
+          // FunctionSignatureId.FN_ENDS_WITH_BYTES, // ends_with(bytes, bytes) -> bytes
+          FunctionSignatureId.FN_SUBSTR_STRING, // substr(string, int64[, int64]) -> string
+          // FunctionSignatureId.FN_SUBSTR_BYTES, // substr(bytes, int64[, int64]) -> bytes
+          FunctionSignatureId.FN_TRIM_STRING, // trim(string[, string]) -> string
+          // FunctionSignatureId.FN_TRIM_BYTES, // trim(bytes, bytes) -> bytes
+          FunctionSignatureId.FN_LTRIM_STRING, // ltrim(string[, string]) -> string
+          // FunctionSignatureId.FN_LTRIM_BYTES, // ltrim(bytes, bytes) -> bytes
+          FunctionSignatureId.FN_RTRIM_STRING, // rtrim(string[, string]) -> string
+          // FunctionSignatureId.FN_RTRIM_BYTES, // rtrim(bytes, bytes) -> bytes
+          FunctionSignatureId.FN_REPLACE_STRING, // replace(string, string, string) -> string
+          // FunctionSignatureId.FN_REPLACE_BYTES, // replace(bytes, bytes, bytes) -> bytes
+          // FunctionSignatureId.FN_REGEXP_MATCH_STRING, // regexp_match(string, string) -> bool
+          // FunctionSignatureId.FN_REGEXP_MATCH_BYTES, // regexp_match(bytes, bytes) -> bool
+          // FunctionSignatureId.FN_REGEXP_EXTRACT_STRING,//regexp_extract(string, string) -> string
+          // FunctionSignatureId.FN_REGEXP_EXTRACT_BYTES, // regexp_extract(bytes, bytes) -> bytes
+          // FunctionSignatureId.FN_REGEXP_REPLACE_STRING,
+          // regexp_replace(string, string, string) -> string
+          // FunctionSignatureId.FN_REGEXP_REPLACE_BYTES,
+          // regexp_replace(bytes, bytes, bytes) -> bytes
+          // FunctionSignatureId.FN_REGEXP_EXTRACT_ALL_STRING,
+          // regexp_extract_all(string, string) -> array of string
+          // FunctionSignatureId.FN_REGEXP_EXTRACT_ALL_BYTES,
+          // regexp_extract_all(bytes, bytes) -> array of bytes
+          // FunctionSignatureId.FN_BYTE_LENGTH_STRING, // byte_length(string) -> int64
+          // FunctionSignatureId.FN_BYTE_LENGTH_BYTES, // byte_length(bytes) -> int64
+          // semantically identical to FN_LENGTH_BYTES
+          FunctionSignatureId.FN_CHAR_LENGTH_STRING, // char_length(string) -> int64
+          // semantically identical to FN_LENGTH_STRING
+          // FunctionSignatureId.FN_SPLIT_STRING, // split(string, string) -> array of string
+          // FunctionSignatureId.FN_SPLIT_BYTES, // split(bytes, bytes) -> array of bytes
+          // FunctionSignatureId.FN_REGEXP_CONTAINS_STRING,//regexp_contains(string, string) -> bool
+          // FunctionSignatureId.FN_REGEXP_CONTAINS_BYTES, // regexp_contains(bytes, bytes) -> bool
+          // Converts bytes to string by replacing invalid UTF-8 characters with
+          // replacement char U+FFFD.
+          // FunctionSignatureId.FN_SAFE_CONVERT_BYTES_TO_STRING,
+          // Unicode normalization and casefolding functions.
+          // FunctionSignatureId.FN_NORMALIZE_STRING, // normalize(string [, mode]) -> string
+          // normalize_and_casefold(string [, mode]) -> string
+          // FunctionSignatureId.FN_NORMALIZE_AND_CASEFOLD_STRING,
+          // FunctionSignatureId.FN_TO_BASE64, // to_base64(bytes) -> string
+          // FunctionSignatureId.FN_FROM_BASE64, // from_base64(string) -> bytes
+          // FunctionSignatureId.FN_TO_HEX, // to_hex(bytes) -> string
+          // FunctionSignatureId.FN_FROM_HEX, // from_hex(string) -> bytes
+          // FunctionSignatureId.FN_TO_BASE32, // to_base32(bytes) -> string
+          // FunctionSignatureId.FN_FROM_BASE32, // from_base32(string) -> bytes
+          // to_code_points(string) -> array<int64>
+          // FunctionSignatureId.FN_TO_CODE_POINTS_STRING,
+          // to_code_points(bytes) -> array<int64>
+          // FunctionSignatureId.FN_TO_CODE_POINTS_BYTES,
+          // code_points_to_string(array<int64>) -> string
+          // FunctionSignatureId.FN_CODE_POINTS_TO_STRING,
+          // code_points_to_bytes(array<int64>) -> bytes
+          // FunctionSignatureId.FN_CODE_POINTS_TO_BYTES,
+          // FunctionSignatureId.FN_LPAD_BYTES, // lpad(bytes, int64[, bytes]) -> bytes
+          // FunctionSignatureId.FN_LPAD_STRING, // lpad(string, int64[, string]) -> string
+          // FunctionSignatureId.FN_RPAD_BYTES, // rpad(bytes, int64[, bytes]) -> bytes
+          // FunctionSignatureId.FN_RPAD_STRING, // rpad(string, int64[, string]) -> string
+          // FunctionSignatureId.FN_LEFT_STRING, // left(string, int64) -> string
+          // FunctionSignatureId.FN_LEFT_BYTES, // left(bytes, int64) -> bytes
+          // FunctionSignatureId.FN_RIGHT_STRING, // right(string, int64) -> string
+          // FunctionSignatureId.FN_RIGHT_BYTES, // right(bytes, int64) -> bytes
+          // FunctionSignatureId.FN_REPEAT_BYTES, // repeat(bytes, int64) -> bytes
+          // FunctionSignatureId.FN_REPEAT_STRING, // repeat(string, int64) -> string
+          FunctionSignatureId.FN_REVERSE_STRING, // reverse(string) -> string
+          // FunctionSignatureId.FN_REVERSE_BYTES, // reverse(bytes) -> bytes
+          // FunctionSignatureId.FN_SOUNDEX_STRING, // soundex(string) -> string
+          // FunctionSignatureId.FN_ASCII_STRING, // ASCII(string) -> int64
+          // FunctionSignatureId.FN_ASCII_BYTES, // ASCII(bytes) -> int64
+          // FunctionSignatureId.FN_TRANSLATE_STRING, // translate(string, string, string) -> string
+          // FunctionSignatureId.FN_TRANSLATE_BYTES, // soundex(bytes, bytes, bytes) -> bytes
+          // FunctionSignatureId.FN_INITCAP_STRING, // initcap(string[, string]) -> string
+
+          // Control flow functions
+          FunctionSignatureId.FN_IF, // if
+          // Coalesce is used to express the output join column in FULL JOIN.
+          FunctionSignatureId.FN_COALESCE, // coalesce
+          FunctionSignatureId.FN_IFNULL, // ifnull
+          FunctionSignatureId.FN_NULLIF, // nullif
 
           // Time functions
+          FunctionSignatureId.FN_CURRENT_DATE, // current_date
+          // FunctionSignatureId.FN_CURRENT_DATETIME, // current_datetime
           FunctionSignatureId.FN_CURRENT_TIME, // current_time
-          FunctionSignatureId.FN_EXTRACT_FROM_TIME, // $extract
-          FunctionSignatureId.FN_TIME_FROM_HOUR_MINUTE_SECOND, // time
-          FunctionSignatureId.FN_TIME_FROM_TIMESTAMP, // time
-          // FunctionSignatureId.FN_TIME_FROM_DATETIME, // time
-          FunctionSignatureId.FN_TIME_ADD, // time_add
-          FunctionSignatureId.FN_TIME_SUB, // time_sub
-          FunctionSignatureId.FN_TIME_DIFF, // time_diff
-          FunctionSignatureId.FN_TIME_TRUNC, // time_trunc
-          FunctionSignatureId.FN_FORMAT_TIME, // format_time
-          FunctionSignatureId.FN_PARSE_TIME, // parse_time
-
-          // Timestamp functions
           FunctionSignatureId.FN_CURRENT_TIMESTAMP, // current_timestamp
-          FunctionSignatureId.FN_EXTRACT_FROM_TIMESTAMP, // $extract
-          FunctionSignatureId.FN_STRING_FROM_TIMESTAMP, // string
-          FunctionSignatureId.FN_TIMESTAMP_FROM_STRING, // timestamp
-          FunctionSignatureId.FN_TIMESTAMP_FROM_DATE, // timestamp
-          // FunctionSignatureId.FN_TIMESTAMP_FROM_DATETIME, // timestamp
+          FunctionSignatureId.FN_DATE_ADD_DATE, // date_add
+          // FunctionSignatureId.FN_DATETIME_ADD, // datetime_add
+          FunctionSignatureId.FN_TIME_ADD, // time_add
           FunctionSignatureId.FN_TIMESTAMP_ADD, // timestamp_add
-          FunctionSignatureId.FN_TIMESTAMP_SUB, // timestamp_sub
+          FunctionSignatureId.FN_DATE_DIFF_DATE, // date_diff
+          // FunctionSignatureId.FN_DATETIME_DIFF, // datetime_diff
+          FunctionSignatureId.FN_TIME_DIFF, // time_diff
           FunctionSignatureId.FN_TIMESTAMP_DIFF, // timestamp_diff
+          FunctionSignatureId.FN_DATE_SUB_DATE, // date_sub
+          // FunctionSignatureId.FN_DATETIME_SUB, // datetime_sub
+          FunctionSignatureId.FN_TIME_SUB, // time_sub
+          FunctionSignatureId.FN_TIMESTAMP_SUB, // timestamp_sub
+          FunctionSignatureId.FN_DATE_TRUNC_DATE, // date_trunc
+          // FunctionSignatureId.FN_DATETIME_TRUNC, // datetime_trunc
+          FunctionSignatureId.FN_TIME_TRUNC, // time_trunc
           FunctionSignatureId.FN_TIMESTAMP_TRUNC, // timestamp_trunc
-          FunctionSignatureId.FN_FORMAT_TIMESTAMP, // format_timestamp
-          FunctionSignatureId.FN_PARSE_TIMESTAMP, // parse_timestamp
+          FunctionSignatureId.FN_DATE_FROM_UNIX_DATE, // date_from_unix_date
           FunctionSignatureId.FN_TIMESTAMP_FROM_INT64_SECONDS, // timestamp_seconds
           FunctionSignatureId.FN_TIMESTAMP_FROM_INT64_MILLIS, // timestamp_millis
           // FunctionSignatureId.FN_TIMESTAMP_FROM_INT64_MICROS, // timestamp_micros
-          FunctionSignatureId.FN_UNIX_SECONDS_FROM_TIMESTAMP, // unix_seconds
-          FunctionSignatureId.FN_UNIX_MILLIS_FROM_TIMESTAMP, // unix_millis
-          // FunctionSignatureId.FN_UNIX_MICROS_FROM_TIMESTAMP, // unix_micros
           FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_SECONDS_INT64, // timestamp_from_unix_seconds
+          // timestamp_from_unix_seconds
+          // FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_SECONDS_TIMESTAMP,
           FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_MILLIS_INT64, // timestamp_from_unix_millis
+          // timestamp_from_unix_millis
+          // FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_MILLIS_TIMESTAMP,
           // FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_MICROS_INT64, // timestamp_from_unix_micros
+          // timestamp_from_unix_micros
+          // FunctionSignatureId.FN_TIMESTAMP_FROM_UNIX_MICROS_TIMESTAMP,
+          FunctionSignatureId.FN_UNIX_DATE, // unix_date
+          FunctionSignatureId.FN_UNIX_SECONDS_FROM_TIMESTAMP,
+          FunctionSignatureId.FN_UNIX_MILLIS_FROM_TIMESTAMP,
+          // FunctionSignatureId.FN_UNIX_MICROS_FROM_TIMESTAMP,
+          FunctionSignatureId.FN_DATE_FROM_TIMESTAMP, // date
+          // FunctionSignatureId.FN_DATE_FROM_DATETIME, // date
+          FunctionSignatureId.FN_DATE_FROM_YEAR_MONTH_DAY, // date
+          FunctionSignatureId.FN_TIMESTAMP_FROM_STRING, // timestamp
+          FunctionSignatureId.FN_TIMESTAMP_FROM_DATE, // timestamp
+          // FunctionSignatureId.FN_TIMESTAMP_FROM_DATETIME, // timestamp
+          FunctionSignatureId.FN_TIME_FROM_HOUR_MINUTE_SECOND, // time
+          FunctionSignatureId.FN_TIME_FROM_TIMESTAMP, // time
+          // FunctionSignatureId.FN_TIME_FROM_DATETIME, // time
+          // FunctionSignatureId.FN_DATETIME_FROM_DATE_AND_TIME, // datetime
+          // FunctionSignatureId.FN_DATETIME_FROM_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, // datetime
+          // FunctionSignatureId.FN_DATETIME_FROM_TIMESTAMP, // datetime
+          // FunctionSignatureId.FN_DATETIME_FROM_DATE, // datetime
+
+          FunctionSignatureId.FN_STRING_FROM_TIMESTAMP, // string
+
+          // Signatures for extracting date parts, taking a date/timestamp
+          // and the target date part as arguments.
+          FunctionSignatureId.FN_EXTRACT_FROM_DATE, // $extract
+          FunctionSignatureId.FN_EXTRACT_FROM_DATETIME, // $extract
+          FunctionSignatureId.FN_EXTRACT_FROM_TIME, // $extract
+          FunctionSignatureId.FN_EXTRACT_FROM_TIMESTAMP, // $extract
 
-          // Datetime functions
-          FunctionSignatureId.FN_EXTRACT_FROM_DATETIME);
+          // Signatures specific to extracting the DATE date part from a DATETIME or a
+          // TIMESTAMP.
+          // FunctionSignatureId.FN_EXTRACT_DATE_FROM_DATETIME, // $extract_date
+          // FunctionSignatureId.FN_EXTRACT_DATE_FROM_TIMESTAMP, // $extract_date
+
+          // Signatures specific to extracting the TIME date part from a DATETIME or a
+          // TIMESTAMP.
+          // FunctionSignatureId.FN_EXTRACT_TIME_FROM_DATETIME, // $extract_time
+          // FunctionSignatureId.FN_EXTRACT_TIME_FROM_TIMESTAMP, // $extract_time
+
+          // Signature specific to extracting the DATETIME date part from a TIMESTAMP.
+          // FunctionSignatureId.FN_EXTRACT_DATETIME_FROM_TIMESTAMP, // $extract_datetime
+
+          FunctionSignatureId.FN_FORMAT_DATE, // format_date
+          // FunctionSignatureId.FN_FORMAT_DATETIME, // format_datetime
+          FunctionSignatureId.FN_FORMAT_TIME, // format_time
+          FunctionSignatureId.FN_FORMAT_TIMESTAMP, // format_timestamp
+          FunctionSignatureId.FN_PARSE_DATE, // parse_date
+          // FunctionSignatureId.FN_PARSE_DATETIME, // parse_datetime
+          FunctionSignatureId.FN_PARSE_TIME, // parse_time
+          FunctionSignatureId.FN_PARSE_TIMESTAMP, // parse_timestamp
+
+          // Math functions
+          // FunctionSignatureId.FN_ABS_INT64, // abs
+          // FunctionSignatureId.FN_ABS_DOUBLE, // abs
+          // FunctionSignatureId.FN_ABS_NUMERIC, // abs
+          // FunctionSignatureId.FN_ABS_BIGNUMERIC, // abs
+          // FunctionSignatureId.FN_SIGN_INT64, // sign
+          // FunctionSignatureId.FN_SIGN_DOUBLE, // sign
+          // FunctionSignatureId.FN_SIGN_NUMERIC, // sign
+          // FunctionSignatureId.FN_SIGN_BIGNUMERIC, // sign
+
+          // FunctionSignatureId.FN_ROUND_DOUBLE, // round(double) -> double
+          // FunctionSignatureId.FN_ROUND_NUMERIC, // round(numeric) -> numeric
+          // FunctionSignatureId.FN_ROUND_BIGNUMERIC, // round(bignumeric) -> bignumeric
+          // FunctionSignatureId.FN_ROUND_WITH_DIGITS_DOUBLE, // round(double, int64) -> double
+          // FunctionSignatureId.FN_ROUND_WITH_DIGITS_NUMERIC, // round(numeric, int64) -> numeric
+          // round(bignumeric, int64) -> bignumeric
+          // FunctionSignatureId.FN_ROUND_WITH_DIGITS_BIGNUMERIC,
+          // FunctionSignatureId.FN_TRUNC_DOUBLE, // trunc(double) -> double
+          // FunctionSignatureId.FN_TRUNC_NUMERIC, // trunc(numeric) -> numeric
+          // FunctionSignatureId.FN_TRUNC_BIGNUMERIC, // trunc(bignumeric) -> bignumeric
+          // FunctionSignatureId.FN_TRUNC_WITH_DIGITS_DOUBLE, // trunc(double, int64) -> double
+          // FunctionSignatureId.FN_TRUNC_WITH_DIGITS_NUMERIC, // trunc(numeric, int64) -> numeric
+          // trunc(bignumeric, int64) -> bignumeric
+          // FunctionSignatureId.FN_TRUNC_WITH_DIGITS_BIGNUMERIC,
+          FunctionSignatureId.FN_CEIL_DOUBLE, // ceil(double) -> double
+          FunctionSignatureId.FN_CEIL_NUMERIC, // ceil(numeric) -> numeric
+          // FunctionSignatureId.FN_CEIL_BIGNUMERIC, // ceil(bignumeric) -> bignumeric
+          FunctionSignatureId.FN_FLOOR_DOUBLE, // floor(double) -> double
+          FunctionSignatureId.FN_FLOOR_NUMERIC, // floor(numeric) -> numeric
+          // FunctionSignatureId.FN_FLOOR_BIGNUMERIC, // floor(bignumeric) -> bignumeric
+
+          FunctionSignatureId.FN_MOD_INT64, // mod(int64, int64) -> int64
+          FunctionSignatureId.FN_MOD_NUMERIC, // mod(numeric, numeric) -> numeric
+          // FunctionSignatureId.FN_MOD_BIGNUMERIC, // mod(bignumeric, bignumeric) -> bignumeric
+          // FunctionSignatureId.FN_DIV_INT64, // div(int64, int64) -> int64
+          // FunctionSignatureId.FN_DIV_NUMERIC, // div(numeric, numeric) -> numeric
+          // FunctionSignatureId.FN_DIV_BIGNUMERIC, // div(bignumeric, bignumeric) -> bignumeric
+
+          // FunctionSignatureId.FN_IS_INF, // is_inf
+          // FunctionSignatureId.FN_IS_NAN, // is_nan
+          // FunctionSignatureId.FN_IEEE_DIVIDE_DOUBLE, // ieee_divide
+          // FunctionSignatureId.FN_SAFE_DIVIDE_DOUBLE, // safe_divide
+          // FunctionSignatureId.FN_SAFE_DIVIDE_NUMERIC, // safe_divide
+          // FunctionSignatureId.FN_SAFE_DIVIDE_BIGNUMERIC, // safe_divide
+          // FunctionSignatureId.FN_SAFE_ADD_INT64, // safe_add
+          // FunctionSignatureId.FN_SAFE_ADD_DOUBLE, // safe_add
+          // FunctionSignatureId.FN_SAFE_ADD_NUMERIC, // safe_add
+          // FunctionSignatureId.FN_SAFE_ADD_BIGNUMERIC, // safe_add
+          // FunctionSignatureId.FN_SAFE_SUBTRACT_INT64, // safe_subtract
+          // FunctionSignatureId.FN_SAFE_SUBTRACT_DOUBLE, // safe_subtract
+          // FunctionSignatureId.FN_SAFE_SUBTRACT_NUMERIC, // safe_subtract
+          // FunctionSignatureId.FN_SAFE_SUBTRACT_BIGNUMERIC, // safe_subtract
+          // FunctionSignatureId.FN_SAFE_MULTIPLY_INT64, // safe_multiply
+          // FunctionSignatureId.FN_SAFE_MULTIPLY_DOUBLE, // safe_multiply
+          // FunctionSignatureId.FN_SAFE_MULTIPLY_NUMERIC, // safe_multiply
+          // FunctionSignatureId.FN_SAFE_MULTIPLY_BIGNUMERIC, // safe_multiply
+          // FunctionSignatureId.FN_SAFE_UNARY_MINUS_INT64, // safe_negate
+          // FunctionSignatureId.FN_SAFE_UNARY_MINUS_DOUBLE, // safe_negate
+          // FunctionSignatureId.FN_SAFE_UNARY_MINUS_NUMERIC, // safe_negate
+          // FunctionSignatureId.FN_SAFE_UNARY_MINUS_BIGNUMERIC, // safe_negate
+
+          // FunctionSignatureId.FN_GREATEST, // greatest
+          // FunctionSignatureId.FN_LEAST, // least
+
+          // FunctionSignatureId.FN_SQRT_DOUBLE, // sqrt
+          // FunctionSignatureId.FN_POW_DOUBLE, // pow
+          // FunctionSignatureId.FN_POW_NUMERIC, // pow(numeric, numeric) -> numeric
+          // FunctionSignatureId.FN_POW_BIGNUMERIC, // pow(bignumeric, bignumeric) -> bignumeric
+          // FunctionSignatureId.FN_EXP_DOUBLE, // exp
+          // FunctionSignatureId.FN_NATURAL_LOGARITHM_DOUBLE, // ln and log
+          // FunctionSignatureId.FN_DECIMAL_LOGARITHM_DOUBLE, // log10
+          // FunctionSignatureId.FN_LOGARITHM_DOUBLE, // log
+
+          // FunctionSignatureId.FN_COS_DOUBLE, // cos
+          // FunctionSignatureId.FN_COSH_DOUBLE, // cosh
+          // FunctionSignatureId.FN_ACOS_DOUBLE, // acos
+          // FunctionSignatureId.FN_ACOSH_DOUBLE, // acosh
+          // FunctionSignatureId.FN_SIN_DOUBLE, // sin
+          // FunctionSignatureId.FN_SINH_DOUBLE, // sinh
+          // FunctionSignatureId.FN_ASIN_DOUBLE, // asin
+          // FunctionSignatureId.FN_ASINH_DOUBLE, // asinh
+          // FunctionSignatureId.FN_TAN_DOUBLE, // tan
+          // FunctionSignatureId.FN_TANH_DOUBLE, // tanh
+          // FunctionSignatureId.FN_ATAN_DOUBLE, // atan
+          // FunctionSignatureId.FN_ATANH_DOUBLE, // atanh
+          // FunctionSignatureId.FN_ATAN2_DOUBLE, // atan2
+
+          // Aggregate functions.
+          FunctionSignatureId.FN_ANY_VALUE, // any_value
+          // FunctionSignatureId.FN_ARRAY_AGG, // array_agg
+          // FunctionSignatureId.FN_ARRAY_CONCAT_AGG, // array_concat_agg
+          FunctionSignatureId.FN_AVG_INT64, // avg
+          FunctionSignatureId.FN_AVG_DOUBLE, // avg
+          FunctionSignatureId.FN_AVG_NUMERIC, // avg
+          // FunctionSignatureId.FN_AVG_BIGNUMERIC, // avg
+          FunctionSignatureId.FN_COUNT, // count
+          FunctionSignatureId.FN_MAX, // max
+          FunctionSignatureId.FN_MIN, // min
+          FunctionSignatureId.FN_STRING_AGG_STRING, // string_agg(s)
+          // FunctionSignatureId.FN_STRING_AGG_DELIM_STRING, // string_agg(s, delim_s)
+          // FunctionSignatureId.FN_STRING_AGG_BYTES, // string_agg(b)
+          // FunctionSignatureId.FN_STRING_AGG_DELIM_BYTES, // string_agg(b, delim_b)
+          FunctionSignatureId.FN_SUM_INT64, // sum
+          FunctionSignatureId.FN_SUM_DOUBLE, // sum
+          FunctionSignatureId.FN_SUM_NUMERIC, // sum
+          // FunctionSignatureId.FN_SUM_BIGNUMERIC, // sum
+          // JIRA link: https://issues.apache.org/jira/browse/BEAM-10379
+          // FunctionSignatureId.FN_BIT_AND_INT64, // bit_and
+          FunctionSignatureId.FN_BIT_OR_INT64 // bit_or
+          // FunctionSignatureId.FN_BIT_XOR_INT64, // bit_xor
+          // FunctionSignatureId.FN_LOGICAL_AND, // logical_and
+          // FunctionSignatureId.FN_LOGICAL_OR, // logical_or
+          // Approximate aggregate functions.
+          // FunctionSignatureId.FN_APPROX_COUNT_DISTINCT, // approx_count_distinct
+          // FunctionSignatureId.FN_APPROX_QUANTILES, // approx_quantiles
+          // FunctionSignatureId.FN_APPROX_TOP_COUNT, // approx_top_count
+          // FunctionSignatureId.FN_APPROX_TOP_SUM_INT64, // approx_top_sum
+          // FunctionSignatureId.FN_APPROX_TOP_SUM_DOUBLE, // approx_top_sum
+          // FunctionSignatureId.FN_APPROX_TOP_SUM_NUMERIC, // approx_top_sum
+          // FunctionSignatureId.FN_APPROX_TOP_SUM_BIGNUMERIC, // approx_top_sum
+
+          // Approximate count functions that expose the intermediate sketch.
+          // These are all found in the "hll_count.*" namespace.
+          // FunctionSignatureId.FN_HLL_COUNT_MERGE, // hll_count.merge(bytes)
+          // FunctionSignatureId.FN_HLL_COUNT_EXTRACT, // hll_count.extract(bytes), scalar
+          // FunctionSignatureId.FN_HLL_COUNT_INIT_INT64, // hll_count.init(int64)
+          // FunctionSignatureId.FN_HLL_COUNT_INIT_NUMERIC, // hll_count.init(numeric)
+          // FunctionSignatureId.FN_HLL_COUNT_INIT_BIGNUMERIC, // hll_count.init(bignumeric)
+          // FunctionSignatureId.FN_HLL_COUNT_INIT_STRING, // hll_count.init(string)
+          // FunctionSignatureId.FN_HLL_COUNT_INIT_BYTES, // hll_count.init(bytes)
+          // FunctionSignatureId.FN_HLL_COUNT_MERGE_PARTIAL, // hll_count.merge_partial(bytes)
+
+          // Statistical aggregate functions.
+          // FunctionSignatureId.FN_CORR, // corr
+          // FunctionSignatureId.FN_CORR_NUMERIC, // corr
+          // FunctionSignatureId.FN_COVAR_POP, // covar_pop
+          // FunctionSignatureId.FN_COVAR_POP_NUMERIC, // covar_pop
+          // FunctionSignatureId.FN_COVAR_SAMP, // covar_samp
+          // FunctionSignatureId.FN_COVAR_SAMP_NUMERIC, // covar_samp
+          // FunctionSignatureId.FN_STDDEV_POP, // stddev_pop
+          // FunctionSignatureId.FN_STDDEV_POP_NUMERIC, // stddev_pop
+          // FunctionSignatureId.FN_STDDEV_SAMP, // stddev_samp
+          // FunctionSignatureId.FN_STDDEV_SAMP_NUMERIC, // stddev_samp
+          // FunctionSignatureId.FN_VAR_POP, // var_pop
+          // FunctionSignatureId.FN_VAR_POP_NUMERIC, // var_pop
+          // FunctionSignatureId.FN_VAR_SAMP, // var_samp
+          // FunctionSignatureId.FN_VAR_SAMP_NUMERIC, // var_samp
+
+          // FunctionSignatureId.FN_COUNTIF, // countif
+
+          // Approximate quantiles functions that produce or consume intermediate
+          // sketches. All found in the "kll_quantiles.*" namespace.
+          // FunctionSignatureId.FN_KLL_QUANTILES_INIT_INT64,
+          // FunctionSignatureId.FN_KLL_QUANTILES_INIT_DOUBLE,
+          // FunctionSignatureId.FN_KLL_QUANTILES_MERGE_PARTIAL,
+          // FunctionSignatureId.FN_KLL_QUANTILES_MERGE_INT64,
+          // FunctionSignatureId.FN_KLL_QUANTILES_MERGE_DOUBLE,
+          // FunctionSignatureId.FN_KLL_QUANTILES_EXTRACT_INT64, // scalar
+          // FunctionSignatureId.FN_KLL_QUANTILES_EXTRACT_DOUBLE, // scalar
+          // FunctionSignatureId.FN_KLL_QUANTILES_MERGE_POINT_INT64,
+          // FunctionSignatureId.FN_KLL_QUANTILES_MERGE_POINT_DOUBLE,
+          // FunctionSignatureId.FN_KLL_QUANTILES_EXTRACT_POINT_INT64, // scalar
+          // FunctionSignatureId.FN_KLL_QUANTILES_EXTRACT_POINT_DOUBLE, // scalar
+
+          // Analytic functions.
+          // FunctionSignatureId.FN_DENSE_RANK, // dense_rank
+          // FunctionSignatureId.FN_RANK, // rank
+          // FunctionSignatureId.FN_ROW_NUMBER, // row_number
+          // FunctionSignatureId.FN_PERCENT_RANK, // percent_rank
+          // FunctionSignatureId.FN_CUME_DIST, // cume_dist
+          // FunctionSignatureId.FN_NTILE, // ntile
+          // FunctionSignatureId.FN_LEAD, // lead
+          // FunctionSignatureId.FN_LAG, // lag
+          // FunctionSignatureId.FN_FIRST_VALUE, // first_value
+          // FunctionSignatureId.FN_LAST_VALUE, // last_value
+          // FunctionSignatureId.FN_NTH_VALUE, // nth_value
+          // FunctionSignatureId.FN_PERCENTILE_CONT, // percentile_cont
+          // FunctionSignatureId.FN_PERCENTILE_CONT_NUMERIC, // percentile_cont
+          // FunctionSignatureId.FN_PERCENTILE_DISC, // percentile_disc
+          // FunctionSignatureId.FN_PERCENTILE_DISC_NUMERIC, // percentile_disc
+
+          // Misc functions.
+          // FunctionSignatureId.FN_BIT_CAST_INT64_TO_INT64, // bit_cast_to_int64(int64)
+
+          // FunctionSignatureId.FN_SESSION_USER, // session_user
+
+          // FunctionSignatureId.FN_GENERATE_ARRAY_INT64, // generate_array(int64)
+          // FunctionSignatureId.FN_GENERATE_ARRAY_NUMERIC, // generate_array(numeric)
+          // FunctionSignatureId.FN_GENERATE_ARRAY_BIGNUMERIC, // generate_array(bignumeric)
+          // FunctionSignatureId.FN_GENERATE_ARRAY_DOUBLE, // generate_array(double)
+          // FunctionSignatureId.FN_GENERATE_DATE_ARRAY, // generate_date_array(date)
+          // FunctionSignatureId.FN_GENERATE_TIMESTAMP_ARRAY, // generate_timestamp_array(timestamp)
+
+          // FunctionSignatureId.FN_ARRAY_REVERSE, // array_reverse(array) -> array
+
+          // FunctionSignatureId.FN_RANGE_BUCKET, //  range_bucket(T, array<T>) -> int64
+
+          // FunctionSignatureId.FN_RAND, // rand() -> double
+          // FunctionSignatureId.FN_GENERATE_UUID, // generate_uuid() -> string
+
+          // FunctionSignatureId.FN_JSON_EXTRACT, // json_extract(string, string)
+          // FunctionSignatureId.FN_JSON_EXTRACT_SCALAR, // json_extract_scalar(string, string)
+          // json_extract_array(string[, string]) -> array
+          // FunctionSignatureId.FN_JSON_EXTRACT_ARRAY,
+
+          // FunctionSignatureId.FN_TO_JSON_STRING, // to_json_string(any[, bool]) -> string
+          // FunctionSignatureId.FN_JSON_QUERY, // json_query(string, string)
+          // FunctionSignatureId.FN_JSON_VALUE, // json_value(string, string)
+
+          // Net functions. These are all found in the "net.*" namespace.
+          // FunctionSignatureId.FN_NET_FORMAT_IP,
+          // FunctionSignatureId.FN_NET_PARSE_IP,
+          // FunctionSignatureId.FN_NET_FORMAT_PACKED_IP,
+          // FunctionSignatureId.FN_NET_PARSE_PACKED_IP,
+          // FunctionSignatureId.FN_NET_IP_IN_NET,
+          // FunctionSignatureId.FN_NET_MAKE_NET,
+          // FunctionSignatureId.FN_NET_HOST, // net.host(string)
+          // FunctionSignatureId.FN_NET_REG_DOMAIN, // net.reg_domain(string)
+          // FunctionSignatureId.FN_NET_PUBLIC_SUFFIX, // net.public_suffix(string)
+          // FunctionSignatureId.FN_NET_IP_FROM_STRING, // net.ip_from_string(string)
+          // FunctionSignatureId.FN_NET_SAFE_IP_FROM_STRING, // net.safe_ip_from_string(string)
+          // FunctionSignatureId.FN_NET_IP_TO_STRING, // net.ip_to_string(bytes)
+          // FunctionSignatureId.FN_NET_IP_NET_MASK, // net.ip_net_mask(int64, int64)
+          // FunctionSignatureId.FN_NET_IP_TRUNC, // net.ip_net_mask(bytes, int64)
+          // FunctionSignatureId.FN_NET_IPV4_FROM_INT64, // net.ipv4_from_int64(int64)
+          // FunctionSignatureId.FN_NET_IPV4_TO_INT64, // net.ipv4_to_int64(bytes)
+
+          // Hashing functions.
+          // FunctionSignatureId.FN_MD5_BYTES, // md5(bytes)
+          // FunctionSignatureId.FN_MD5_STRING, // md5(string)
+          // FunctionSignatureId.FN_SHA1_BYTES, // sha1(bytes)
+          // FunctionSignatureId.FN_SHA1_STRING, // sha1(string)
+          // FunctionSignatureId.FN_SHA256_BYTES, // sha256(bytes)
+          // FunctionSignatureId.FN_SHA256_STRING, // sha256(string)
+          // FunctionSignatureId.FN_SHA512_BYTES, // sha512(bytes)
+          // FunctionSignatureId.FN_SHA512_STRING, // sha512(string)
+
+          // Fingerprinting functions
+          // FunctionSignatureId.FN_FARM_FINGERPRINT_BYTES, // farm_fingerprint(bytes) -> int64
+          // FunctionSignatureId.FN_FARM_FINGERPRINT_STRING, // farm_fingerprint(string) -> int64
+
+          // Keyset management, encryption, and decryption functions
+          // Requires that FEATURE_ENCRYPTION is enabled.
+          // FunctionSignatureId.FN_KEYS_NEW_KEYSET, // keys.new_keyset(string)
+          // keys.add_key_from_raw_bytes(bytes, string, bytes)
+          // FunctionSignatureId.FN_KEYS_ADD_KEY_FROM_RAW_BYTES,
+          // FunctionSignatureId.FN_KEYS_ROTATE_KEYSET, // keys.rotate_keyset(bytes, string)
+          // FunctionSignatureId.FN_KEYS_KEYSET_LENGTH, // keys.keyset_length(bytes)
+          // FunctionSignatureId.FN_KEYS_KEYSET_TO_JSON, // keys.keyset_to_json(bytes)
+          // FunctionSignatureId.FN_KEYS_KEYSET_FROM_JSON, // keys.keyset_from_json(string)
+          // FunctionSignatureId.FN_AEAD_ENCRYPT_STRING, // aead.encrypt(bytes, string, string)
+          // FunctionSignatureId.FN_AEAD_ENCRYPT_BYTES, // aead.encrypt(bytes, bytes, bytes)
+          // FunctionSignatureId.FN_AEAD_DECRYPT_STRING,// aead.decrypt_string(bytes, bytes, string)
+          // FunctionSignatureId.FN_AEAD_DECRYPT_BYTES, // aead.decrypt_bytes(bytes, bytes, bytes)
+          // FunctionSignatureId.FN_KMS_ENCRYPT_STRING, // kms.encrypt(string, string)
+          // FunctionSignatureId.FN_KMS_ENCRYPT_BYTES, // kms.encrypt(string, bytes)
+          // FunctionSignatureId.FN_KMS_DECRYPT_STRING, // kms.decrypt_string(string, bytes)
+          // FunctionSignatureId.FN_KMS_DECRYPT_BYTES, // kms.decrypt_bytes(string, bytes)
+
+          // ST_ family of functions (Geography related)
+          // Constructors
+          // FunctionSignatureId.FN_ST_GEOG_POINT,
+          // FunctionSignatureId.FN_ST_MAKE_LINE,
+          // FunctionSignatureId.FN_ST_MAKE_LINE_ARRAY,
+          // FunctionSignatureId.FN_ST_MAKE_POLYGON,
+          // FunctionSignatureId.FN_ST_MAKE_POLYGON_ORIENTED,
+          // Transformations
+          // FunctionSignatureId.FN_ST_INTERSECTION,
+          // FunctionSignatureId.FN_ST_UNION,
+          // FunctionSignatureId.FN_ST_UNION_ARRAY,
+          // FunctionSignatureId.FN_ST_DIFFERENCE,
+          // FunctionSignatureId.FN_ST_UNARY_UNION,
+          // FunctionSignatureId.FN_ST_CENTROID,
+          // FunctionSignatureId.FN_ST_BUFFER,
+          // FunctionSignatureId.FN_ST_BUFFER_WITH_TOLERANCE,
+          // FunctionSignatureId.FN_ST_SIMPLIFY,
+          // FunctionSignatureId.FN_ST_SNAP_TO_GRID,
+          // FunctionSignatureId.FN_ST_CLOSEST_POINT,
+          // FunctionSignatureId.FN_ST_BOUNDARY,
+          // FunctionSignatureId.FN_ST_CONVEXHULL,
+          // Predicates
+          // FunctionSignatureId.FN_ST_EQUALS,
+          // FunctionSignatureId.FN_ST_INTERSECTS,
+          // FunctionSignatureId.FN_ST_CONTAINS,
+          // FunctionSignatureId.FN_ST_COVERS,
+          // FunctionSignatureId.FN_ST_DISJOINT,
+          // FunctionSignatureId.FN_ST_INTERSECTS_BOX,
+          // FunctionSignatureId.FN_ST_DWITHIN,
+          // FunctionSignatureId.FN_ST_WITHIN,
+          // FunctionSignatureId.FN_ST_COVEREDBY,
+          // FunctionSignatureId.FN_ST_TOUCHES,
+          // Accessors
+          // FunctionSignatureId.FN_ST_IS_EMPTY,
+          // FunctionSignatureId.FN_ST_IS_COLLECTION,
+          // FunctionSignatureId.FN_ST_DIMENSION,
+          // FunctionSignatureId.FN_ST_NUM_POINTS,
+          // FunctionSignatureId.FN_ST_DUMP,
+          // Measures
+          // FunctionSignatureId.FN_ST_LENGTH,
+          // FunctionSignatureId.FN_ST_PERIMETER,
+          // FunctionSignatureId.FN_ST_AREA,
+          // FunctionSignatureId.FN_ST_DISTANCE,
+          // FunctionSignatureId.FN_ST_MAX_DISTANCE,
+          // Parsers/formatters
+          // FunctionSignatureId.FN_ST_GEOG_FROM_TEXT,
+          // FunctionSignatureId.FN_ST_GEOG_FROM_KML,
+          // FunctionSignatureId.FN_ST_GEOG_FROM_GEO_JSON,
+          // FunctionSignatureId.FN_ST_GEOG_FROM_WKB,
+          // FunctionSignatureId.FN_ST_AS_TEXT,
+          // FunctionSignatureId.FN_ST_AS_KML,
+          // FunctionSignatureId.FN_ST_AS_GEO_JSON,
+          // FunctionSignatureId.FN_ST_AS_BINARY,
+          // FunctionSignatureId.FN_ST_GEOHASH,
+          // FunctionSignatureId.FN_ST_GEOG_POINT_FROM_GEOHASH,
+          // Aggregate functions
+          // FunctionSignatureId.FN_ST_UNION_AGG,
+          // FunctionSignatureId.FN_ST_ACCUM,
+          // FunctionSignatureId.FN_ST_CENTROID_AGG,
+          // Other geography functions
+          // FunctionSignatureId.FN_ST_X,
+          // FunctionSignatureId.FN_ST_Y,
+
+          // Array functions.
+          // FunctionSignatureId.FN_FLATTEN, // flatten(array path) -> array
+          // FunctionSignatureId.FN_ARRAY_AT_OFFSET, // $array_at_offset
+          // FunctionSignatureId.FN_ARRAY_AT_ORDINAL, // $array_at_ordinal
+          // FunctionSignatureId.FN_ARRAY_CONCAT, // array_concat(repeated array) -> array
+          // FunctionSignatureId.FN_ARRAY_CONCAT_OP, // array_concat(array, array) -> array
+          // FunctionSignatureId.FN_ARRAY_LENGTH, // array_length(array) -> int64
+          // array_to_string(array, bytes[, bytes]) -> bytes
+          // FunctionSignatureId.FN_ARRAY_TO_BYTES,
+          // array_to_string(array, string[, string]) -> string
+          // FunctionSignatureId.FN_ARRAY_TO_STRING,
+          // FunctionSignatureId.FN_MAKE_ARRAY, // $make_array
+          // FunctionSignatureId.FN_SAFE_ARRAY_AT_OFFSET, // $safe_array_at_offset
+          // FunctionSignatureId.FN_SAFE_ARRAY_AT_ORDINAL, // $safe_array_at_ordinal
+          );
 
   // todo: Some of operators defined here are later overridden in ZetaSQLPlannerImpl.
   // We should remove them from this table and add generic way to provide custom
@@ -161,12 +634,10 @@ public class SqlStdOperatorMappingTable {
           .put("HOP", SqlStdOperatorTable.HOP)
           .put("SESSION", SqlStdOperatorTable.SESSION)
 
-          // built-in logical operator
+          // ZetaSQL functions
           .put("$and", SqlStdOperatorTable.AND)
           .put("$or", SqlStdOperatorTable.OR)
           .put("$not", SqlStdOperatorTable.NOT)
-
-          // built-in comparison operator
           .put("$equal", SqlStdOperatorTable.EQUALS)
           .put("$not_equal", SqlStdOperatorTable.NOT_EQUALS)
           .put("$greater", SqlStdOperatorTable.GREATER_THAN)
@@ -174,188 +645,40 @@ public class SqlStdOperatorMappingTable {
           .put("$less", SqlStdOperatorTable.LESS_THAN)
           .put("$less_or_equal", SqlStdOperatorTable.LESS_THAN_OR_EQUAL)
           .put("$like", SqlOperators.LIKE)
-          // .put("$in", SqlStdOperatorTable.IN)
-          // .put("$between", SqlStdOperatorTable.BETWEEN)
           .put("$is_null", SqlStdOperatorTable.IS_NULL)
           .put("$is_true", SqlStdOperatorTable.IS_TRUE)
           .put("$is_false", SqlStdOperatorTable.IS_FALSE)
-
-          // +, -, *, /
           .put("$add", SqlStdOperatorTable.PLUS)
           .put("$subtract", SqlStdOperatorTable.MINUS)
           .put("$multiply", SqlStdOperatorTable.MULTIPLY)
           .put("$unary_minus", SqlStdOperatorTable.UNARY_MINUS)
           .put("$divide", SqlStdOperatorTable.DIVIDE)
-
-          // built-in string function
           .put("concat", SqlOperators.CONCAT)
-          // .put("lower", SqlStdOperatorTable.LOWER)
-          // .put("upper", SqlStdOperatorTable.UPPER)
           .put("substr", SqlOperators.SUBSTR)
           .put("trim", SqlOperators.TRIM)
           .put("replace", SqlOperators.REPLACE)
           .put("char_length", SqlOperators.CHAR_LENGTH)
-
-          // string function UDFs
-          // .put("strpos", )
-          // .put("length", )
-          // tells Calcite codegen that starts_with function is a udf.
           .put("starts_with", SqlOperators.START_WITHS)
           .put("ends_with", SqlOperators.ENDS_WITH)
           .put("ltrim", SqlOperators.LTRIM)
           .put("rtrim", SqlOperators.RTRIM)
-          // .put("regexp_match",)
-          // .put("regexp_extract",)
-          // .put("regexp_replace",)
-          // .put("regexp_extract_all",)
-          // .put("byte_length",)
-          // .put("format",)
-          // .put("split",)
-          // .put("regexp_contains", )
-          // .put("normalize",)
-          // .put("to_base32",)
-          // .put("to_base64",)
-          // .put("to_hex",)
-          // .put("from_base64",)
-          // .put("from_base32",)
-          // .put("from_hex",)
-          // .put("to_code_points")
-          // .put("code_points_to_string")
-          // .put("lpad", )
-          // .put("rpad", )
-          // .put("repeat", )
           .put("reverse", SqlOperators.REVERSE)
-
-          // built-in aggregate function
           .put("$count_star", SqlStdOperatorTable.COUNT)
-          // TODO: add support to all aggregate functions.
           .put("max", SqlStdOperatorTable.MAX)
           .put("min", SqlStdOperatorTable.MIN)
           .put("avg", SqlStdOperatorTable.AVG)
           .put("sum", SqlStdOperatorTable.SUM)
           .put("any_value", SqlStdOperatorTable.ANY_VALUE)
           .put("count", SqlStdOperatorTable.COUNT)
-
           // .put("bit_and", SqlStdOperatorTable.BIT_AND) //JIRA link:
           // https://issues.apache.org/jira/browse/BEAM-10379
-
-          // aggregate UDF
-          // .put("array_agg", )
-          // .put("array_concat_agg")
           .put("string_agg", SqlOperators.STRING_AGG_STRING_FN) // NULL values not supported
-          // .put("bit_xor")
-          // .put("logical_and")
-          // .put("logical_or")
           .put("bit_or", SqlStdOperatorTable.BIT_OR)
-          // built-in statistical aggregate function
-          // .put("covar_pop", SqlStdOperatorTable.COVAR_POP)
-          // .put("covar_samp", SqlStdOperatorTable.COVAR_SAMP)
-          // .put("stddev_pop", SqlStdOperatorTable.STDDEV_POP)
-          // .put("stddev_samp", SqlStdOperatorTable.STDDEV_SAMP)
-          // .put("var_pop", SqlStdOperatorTable.VAR_POP)
-          // .put("var_samp", SqlStdOperatorTable.VAR_SAMP)
-
-          // statistical aggregate UDF
-          // .put("corr", )
-
-          // built-in approximate aggregate function
-          // .put("approx_count_distinct", SqlStdOperatorTable.APPROX_COUNT_DISTINCT)
-
-          // approximate aggregate UDF
-          // .put("approx_quantiles", )
-          // .put("approx_top_sum")
-
-          // HLL++ UDF
-          // hll_count.merge
-          // hll_count.extract
-          // hll_count.init
-          // hll_count.merge_partial
-
-          // CAST
-          // CAST operator does not go through lookup table.
-          // .put("cast", SqlStdOperatorTable.CAST)
-
-          // built-in math functions
-          // .put("math", SqlStdOperatorTable.ABS)
-          // .put("sign", SqlStdOperatorTable.SIGN)
-          // .put("round", SqlStdOperatorTable.ROUND)
           .put("ceil", SqlStdOperatorTable.CEIL)
           .put("floor", SqlStdOperatorTable.FLOOR)
           .put("mod", SqlStdOperatorTable.MOD)
-          // .put("sqrt", SqlStdOperatorTable.SQRT)
-          // .put("exp", SqlStdOperatorTable.EXP)
-          // .put("ln and log", SqlStdOperatorTable.LN)
-          // .put("log10", SqlStdOperatorTable.LOG10)
-          // .put("cos", SqlStdOperatorTable.COS)
-          // .put("acos", SqlStdOperatorTable.ACOS)
-          // .put("sin", SqlStdOperatorTable.SIN)
-          // .put("asin", SqlStdOperatorTable.ASIN)
-          // .put("tan", SqlStdOperatorTable.TAN)
-          // .put("atan", SqlStdOperatorTable.ATAN)
-          // .put("atan2", SqlStdOperatorTable.ATAN2)
-          // .put("abs", SqlStdOperatorTable.ABS)
-          // .put("pow", SqlStdOperatorTable.POWER)
-          // .put("div", SqlStdOperatorTable.DIVIDE)
-          // .put("trunc", SqlStdOperatorTable.TRUNCATE)
-
-          // math UDF
-          // .put("is_inf",)
-          // .put("is_nan",)
-          // .put("ieee_divide")
-          // .put("safe_add")
-          // .put("safe_divide")
-          // .put("safe_subtract")
-          // .put("safe_multiply")
-          // .put("safe_negate")
-          // .put("greatest")
-          // .put("least")
-          // .put("log")
-          // .put("cosh")
-          // .put("acosh")
-          // .put("sinh")
-          // .put("asinh")
-          // .put("tanh")
-          // .put("atanh")
-
-          // Analytic functions
-          // .put("dense_rank", SqlStdOperatorTable.DENSE_RANK)
-          // .put("rank", SqlStdOperatorTable.RANK)
-          // .put("row_number", SqlStdOperatorTable.ROW_NUMBER)
-          // .put("percent_rank", SqlStdOperatorTable.PERCENT_RANK)
-          // .put("cume_dist", SqlStdOperatorTable.CUME_DIST)
-          // .put("ntile", SqlStdOperatorTable.NTILE)
-          // .put("lead", SqlStdOperatorTable.LEAD)
-          // .put("lag", SqlStdOperatorTable.LAG)
-          // .put("first_value", SqlStdOperatorTable.FIRST_VALUE)
-          // .put("last_value", SqlStdOperatorTable.LAST_VALUE)
-          // .put("nth_value", SqlStdOperatorTable.NTH_VALUE)
-
-          // .put("percentile_cont", )
-          // .put("percentile_disc",)
-
-          // misc functions
-          // .put("fingerprint")
-          // .put("fingerprint2011")
-
-          // hash functions
-          // .put("md5")
-          // .put("sha1")
-          // .put("sha256")
-          // .put("sha512")
-
-          // timestamp functions
           .put("$extract", SqlStdOperatorTable.EXTRACT)
           .put("timestamp", SqlOperators.TIMESTAMP_OP)
-
-          // other functions
-          // .put("session_user", SqlStdOperatorTable.SESSION_USER)
-          // .put("bit_cast_to_int32")
-          // .put("bit_cast_to_int64")
-          // .put("bit_cast_to_uint32")
-          // .put("bit_cast_to_uint64")
-          // .put("countif", )
-
-          // case operator
           .put("$case_no_value", SqlStdOperatorTable.CASE)
 
           // if operator - IF(cond, pos, neg) can actually be mapped directly to `CASE WHEN cond