aggregate_with_filter ::= aggregate_name '(' expression ')' ('FILTER' '(' 'WHERE' filter_clause ')')? alter_cluster_set ::= 'ALTER' 'CLUSTER' name 'SET' '(' (cluster_option '=' value)* ')' ('WITH' with_options)? alter_cluster_set_with_options ::= 'WITH' '(' 'WAIT' ( ( 'UNTIL' 'READY' '(' (wait_until_ready_option '='? value)* ')' ) | ( 'FOR' '='? duration ) ) ')' alter_cluster_reset ::= 'ALTER' 'CLUSTER' name 'RESET' '(' (cluster_option_name)* ')' alter_connection ::= 'ALTER' 'CONNECTION' 'IF EXISTS'? name ( ( 'SET' '(' option '=' value ')' | ('DROP' | 'RESET') '(' option ')' ) ( ',' ( 'SET' '(' option '=' value ')' | ('DROP' | 'RESET') '(' option ')' ) ) * | 'ROTATE' 'KEYS' ) ( 'WITH'? '(' field val ( ',' field val )* ')' )? alter_default_privileges ::= 'ALTER' 'DEFAULT' 'PRIVILEGES' 'FOR' (( 'ROLE' | 'USER' ) target_role (',' target_role)* | 'ALL' 'ROLES' ) ( 'IN' 'SCHEMA' schema_name (',' schema_name)* | 'IN' 'DATABASE' database_name (',' database_name)* )? ( abbreviated_grant | abbreviated_revoke ) alter_network_policy::='ALTER' 'NETWORK POLICY' name '(' 'RULES' ( '(' network_policy_rule (',' network_policy_rule)* ')' )? ')' abbreviated_grant ::= 'GRANT' ((privilege (',' privilege)*) | 'ALL' 'PRIVILEGES'? ) 'ON' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'DATABASES' | 'SCHEMAS' | 'CLUSTERS') 'TO' 'GROUP'? grantee (',' grantee)* abbreviated_revoke ::= 'REVOKE' ((privilege (',' privilege)*) | 'ALL' 'PRIVILEGES'? ) 'ON' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'DATABASES' | 'SCHEMAS' | 'CLUSTERS') 'FROM' 'GROUP'? revokee (',' revokee)* alter_owner ::= 'ALTER' ('CLUSTER' | 'CLUSTER REPLICA' | 'CONNECTION' | 'DATABASE' | 'SCHEMA' | 'SOURCE' | 'SINK' | 'VIEW' | 'MATERIALIZED VIEW' | 'TABLE' | 'TYPE' | 'SECRET' ) name 'OWNER TO' new_owner alter_rename ::= 'ALTER' ('CONNECTION' | 'CLUSTER' | 'CLUSTER REPLICA' | 'INDEX' | 'SCHEMA' | 'SOURCE' | 'SINK' | 'VIEW' | 'MATERIALIZED VIEW' | 'TABLE' | 'SECRET' ) name 'RENAME TO' new_name alter_swap ::= 'ALTER' ('CLUSTER' | 'SCHEMA') name 'SWAP' 'WITH' target_name alter_sink ::= 'ALTER' 'SINK' name 'SET' 'FROM' item_name alter_table_set ::= 'ALTER' 'TABLE' name 'SET' '(' ('RETAIN HISTORY' '='? 'FOR' retention_period) ')' alter_table_reset ::= 'ALTER' 'TABLE' name 'RESET' '(' 'RETAIN HISTORY' ')' alter_index_set ::= 'ALTER' 'INDEX' name 'SET' ('ENABLED' | ('(' ('RETAIN HISTORY' '='? 'FOR' retention_period) ')')) alter_index_reset ::= 'ALTER' 'INDEX' name 'RESET' '(' 'RETAIN HISTORY' ')' alter_materialized_view_set ::= 'ALTER' 'MATERIALIZED VIEW' name 'SET' '(' ('RETAIN HISTORY' '='? 'FOR' retention_period) ')' alter_materialized_view_reset ::= 'ALTER' 'MATERIALIZED VIEW' name 'RESET' '(' 'RETAIN HISTORY' ')' alter_role ::= 'ALTER' 'ROLE' role_name ( alter_role_attributes | alter_role_set ) alter_role_attributes ::= 'WITH'? 'INHERIT' alter_role_set ::= ('SET' name ( 'TO' | '=' ) ( value | 'DEFAULT' ) | 'RESET' name) alter_secret ::= 'ALTER' 'SECRET' 'IF EXISTS'? name AS value alter_source ::= 'ALTER' 'SOURCE' 'IF EXISTS'? name ( alter_source_add_clause | alter_source_set_retain_history_clause | alter_source_reset_retain_history_clause ) alter_source_add_clause ::= 'ADD' ('SUBSOURCE' | 'TABLE') table_name ('AS' subsrc_name)? (',' table_name ('AS' subsrc_name)? )* with_options alter_source_set_retain_history_clause ::= 'SET' '(' ('RETAIN HISTORY' '='? 'FOR' retention_period) ')' alter_source_reset_retain_history_clause ::= 'RESET' '(' 'RETAIN HISTORY' ')' alter_system_set_stmt ::= 'ALTER' 'SYSTEM' 'SET' name ( 'TO' | '=' ) ( value | 'DEFAULT' ) alter_system_reset_stmt ::= 'ALTER' 'SYSTEM' 'RESET' name array_agg ::= 'array_agg' '(' values ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? as_of ::= 'AS' 'OF' ( 'AT' 'LEAST' )? timestamp_expression close ::= 'CLOSE' cursor_name col_option ::= 'NOT' 'NULL' | 'DEFAULT' expr comment_on ::= 'COMMENT ON' ( 'CLUSTER' | 'CLUSTER REPLICA' | 'COLUMN' | 'CONNECTION' | 'DATABASE' | 'FUNCTION' | 'INDEX' | 'MATERIALIZED VIEW' | 'NETWORK POLICY' | 'ROLE' | 'SCHEMA' | 'SECRET' | 'SINK' | 'SOURCE' | 'TABLE' | 'TYPE' | 'VIEW' ) object_name 'IS' ( string_literal | 'NULL' ) copy_to_stdout ::= 'COPY' '(' query ')' 'TO' 'STDOUT' ( 'WITH'? '(' field val ( ',' field val )* ')' )? copy_to_s3 ::= 'COPY' ( query | object_name ) 'TO' s3_uri '(' 'WITH' 'AWS CONNECTION' connection_name ',' 'FORMAT' ( csv | parquet ) ( ',' field val )* ')' copy_from ::= 'COPY' 'INTO'? table_name ('(' column ( ',' column )* ')')? 'FROM' 'STDIN' ( 'WITH'? '(' field val ( ',' field val )* ')' )? create_cluster ::= 'CREATE' 'CLUSTER' name ( 'REPLICAS' '(' (replica_definition (',' replica_definition)*)? ')' )? create_managed_cluster ::= 'CREATE' 'CLUSTER' name '(' cluster_option '=' value (',' cluster_option '=' value)* ')' cluster_replica_def ::= replica_name '(' replica_option '=' value ( ',' replica_option '=' value )* ')' create_cluster_replica ::= 'CREATE' 'CLUSTER' 'REPLICA' cluster_name '.' replica_name '(' (option '=' value ( ',' option '=' value )*)? ')' create_connection_aws ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'AWS' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_kafka ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'KAFKA' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_csr ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'CONFLUENT' 'SCHEMA' 'REGISTRY' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_postgres ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'POSTGRES' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_mysql ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'MYSQL' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_sql-server ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'SQL SERVER' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_aws_privatelink ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'AWS' 'PRIVATELINK' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_ssh_tunnel ::= 'CREATE' 'CONNECTION' 'IF NOT EXISTS'? connection_name 'TO' 'SSH' 'TUNNEL' '(' field '='? val ( ',' field '='? val )* ')' ('WITH' with_options)? create_connection_kafka_brokers ::= 'BROKERS' '(' kafka_broker (',' kafka_broker)* ')' create_connection_kafka_broker_aws_privatelink ::= "'host:port'" 'USING' 'AWS' 'PRIVATELINK' aws_connection ( '(' broker_option (',' broker_option)* ')' )? create_connection_kafka_default_aws_privatelink ::= 'AWS' 'PRIVATELINK' aws_connection ( '(' 'PORT' port ')' )? create_connection_kafka_broker_ssh_tunnel ::= "'host:port'" 'USING' 'SSH' 'TUNNEL' ssh_connection broker_option ::= 'PORT' number | 'AVAILABILITY ZONE' az create_database ::= 'CREATE' 'DATABASE' ('IF NOT EXISTS')? database_name create_index ::= 'CREATE' ( 'INDEX' index_name ('IN' 'CLUSTER' cluster_name)? 'ON' obj_name ('USING' method)? '(' ( ( col_expr ) ( ( ',' col_expr ) )* ) ')' | 'DEFAULT INDEX' ('IN' 'CLUSTER' cluster_name)? 'ON' obj_name ('USING' method)? ) with_options? create_materialized_view ::= 'CREATE' 'OR REPLACE'? 'MATERIALIZED VIEW' 'IF NOT EXISTS'? view_name ( '(' col_ident ( ',' col_ident )* ')' )? ('IN CLUSTER' cluster_name)? ('WITH' with_options)? 'AS' select_stmt create_role ::= 'CREATE' 'ROLE' role_name ('WITH'? 'INHERIT')? create_secret ::= 'CREATE' 'SECRET' ('IF NOT EXISTS')? name 'AS' value create_schema ::= 'CREATE' 'SCHEMA' ('IF NOT EXISTS')? schema_name create_sink_kafka ::= 'CREATE SINK' 'IF NOT EXISTS'? sink_name sink_definition sink_definition ::= ('IN CLUSTER' cluster_name)? 'FROM' item_name 'INTO' kafka_sink_connection ('KEY' '(' key_column ( ',' key_column )* ')' 'NOT ENFORCED'?)? ('HEADERS' headers_column)? ('FORMAT' sink_format_spec | 'KEY FORMAT' sink_format_spec 'VALUE FORMAT' sink_format_spec)? ('ENVELOPE' ('DEBEZIUM'|'UPSERT')) ('WITH' with_options)? create_sink_doc_on_option ::= ('KEY' | 'VALUE')? 'DOC ON' ('TYPE' type_name | 'COLUMN' column_name) '='? string create_source_kafka ::= 'CREATE SOURCE' ('IF NOT EXISTS')? src_name ('(' (col_name) ( ( ',' col_name ) )* ')')? ('IN CLUSTER' cluster_name)? 'FROM' 'KAFKA' 'CONNECTION' connection_name '(' 'TOPIC' topic ( ( ',' connection_option )? ) ')' ('KEY FORMAT' format_spec 'VALUE FORMAT' format_spec | 'FORMAT' format_spec) ('INCLUDE' ( ('KEY' | 'PARTITION' | 'OFFSET' | 'TIMESTAMP' | 'HEADERS' ) ('AS' name)? | 'HEADER' key 'AS' name ('BYTES')? ) (',' ( ('KEY' | 'PARTITION' | 'OFFSET' | 'TIMESTAMP' | 'HEADERS' ) ('AS' name)? | 'HEADER' key 'AS' name ('BYTES')? ) )* )? ('ENVELOPE' ('NONE' | 'DEBEZIUM' | 'UPSERT' ( '(' 'VALUE DECODING ERRORS = INLINE' ('AS' name)? ')' )? ))? ('EXPOSE' 'PROGRESS' 'AS' progress_subsource_name)? with_options? create_source_load_generator ::= 'CREATE SOURCE' ('IF NOT EXISTS')? src_name ('IN CLUSTER' cluster_name)? 'FROM LOAD GENERATOR' ('AUCTION' | 'CLOCK' | 'COUNTER' | 'MARKETING' | 'TPCH' | 'KEY VALUE') ('(' (load_generator_option) ( ( ',' load_generator_option ) )* ')')? 'FOR ALL TABLES' ('EXPOSE' 'PROGRESS' 'AS' progress_subsource_name)? with_options? load_generator_option ::= 'TICK INTERVAL' interval | 'AS OF' tick | 'UP TO' tick | 'SCALE FACTOR' scale_factor | 'MAX CARDINALITY' max_cardinality | 'KEYS' keys | 'SNAPSHOT ROUNDS' snapshot_rounds | 'TRANSACTIONAL SNAPSHOT' transactional_snapshot | 'VALUE SIZE' value_size | 'SEED' seed | 'PARTITIONS' partitions | 'BATCH SIZE' batch_size create_network_policy::='CREATE' 'NETWORK POLICY' name '(' 'RULES' ( '(' network_policy_rule (',' network_policy_rule)* ')' )? ')' create_source_postgres ::= 'CREATE SOURCE' ('IF NOT EXISTS')? src_name ('IN CLUSTER' cluster_name)? 'FROM' 'POSTGRES' 'CONNECTION' connection_name '(' 'PUBLICATION' publication_name ( ( ',' 'TEXT COLUMNS' ('(' (column_name) ( ( ',' column_name ) )* ')')? )? ) ')' ('FOR ALL TABLES' | 'FOR TABLES' '(' table_name ('AS' subsrc_name)? (',' table_name ('AS' subsrc_name)? )* ')' | 'FOR SCHEMAS' '(' schema_name (',' schema_name )* ')' ) ('EXPOSE' 'PROGRESS' 'AS' progress_subsource_name)? with_options? create_source_mysql ::= 'CREATE SOURCE' ('IF NOT EXISTS')? src_name ('IN CLUSTER' cluster_name)? 'FROM' 'MYSQL' 'CONNECTION' connection_name ( ( '(' 'TEXT COLUMNS' ('(' (column_name) ( ( ',' column_name ) )* ')')? )? ) ( ( ',' 'EXCLUDE COLUMNS' ('(' (column_name) ( ( ',' column_name ) )* ')')? ')' )? ) ('FOR ALL TABLES' | 'FOR TABLES' '(' table_name ('AS' subsrc_name)? (',' table_name ('AS' subsrc_name)? )* ')' | 'FOR SCHEMAS' '(' schema_name (',' schema_name )* ')' ) ('EXPOSE' 'PROGRESS' 'AS' progress_subsource_name)? with_options? create_source_sql-server ::= 'CREATE SOURCE' ('IF NOT EXISTS')? src_name ('IN CLUSTER' cluster_name)? 'FROM' 'SQL SERVER' 'CONNECTION' connection_name ( ( '(' 'TEXT COLUMNS' ( '(' (column_name) ( ( ',' column_name ) )* ')')? )? ) ( ( ',' 'EXCLUDE COLUMNS' ('(' (column_name) ( ( ',' column_name ) )* ')')? ')' )? ) ('FOR ALL TABLES' | 'FOR TABLES' '(' table_name ('AS' subsrc_name)? (',' table_name ('AS' subsrc_name)? )* ')' ) ('EXPOSE' 'PROGRESS' 'AS' progress_subsource_name)? with_options? create_type ::= 'CREATE' 'TYPE' type_name 'AS' '(' ((field_name field_type) (',' field_name field_type)*) ')' | 'CREATE' 'TYPE' type_name 'AS' ( 'LIST' | 'MAP' ) '(' ( property '=' val ) ( ( ',' property '=' val ) )* ')' create_view ::= 'CREATE' ('TEMP' | 'TEMPORARY')? 'VIEW' view_name ( '(' col_ident ( ',' col_ident )* ')' )? 'AS' select_stmt | 'CREATE' ('TEMP' | 'TEMPORARY')? 'VIEW' 'IF NOT EXISTS' view_name ( '(' col_ident ( ',' col_ident )* ')' )? 'AS' select_stmt | 'CREATE' 'OR REPLACE' 'VIEW' view_name ( '(' col_ident ( ',' col_ident )* ')' )? 'AS' select_stmt create_table ::= 'CREATE' ('TEMP' | 'TEMPORARY')? 'TABLE' table_name '(' ((col_name col_type col_option*) (',' col_name col_type col_option*)*)? ')' with_options? deallocate ::= 'DEALLOCATE' ('PREPARE')? (name | 'ALL')? declare ::= 'DECLARE' cursor_name 'CURSOR' ('WITHOUT' 'HOLD')? 'FOR' query insert ::= 'INSERT' 'INTO' table_name ('AS'? alias) ( '(' (col_name) ( ',' col_name )* ')' )? ( 'VALUES' ( ('(' (expr) ( ( ',' expr ) )* ')') ( ( ',' ('(' (expr) ( ( ',' expr ) )* ')') )* ) ) | query ) ( 'RETURNING' ( '*' | output_expression ( AS? output_name )? ) ( ',' ( '*' | output_expression ( AS? output_name )? ) )* )? delete_stmt ::= 'DELETE FROM' table_name ('AS'? alias)? 'USING' (from_item) ( ( ',' from_item ) )* 'WHERE' condition discard ::= 'DISCARD' ('TEMP' | 'TEMPORARY' | 'ALL') drop_connection ::= 'DROP' 'CONNECTION' ('IF EXISTS')? connection_name ('CASCADE' | 'RESTRICT')? drop_cluster ::= 'DROP' 'CLUSTER' ('IF EXISTS')? cluster_name ('CASCADE' | 'RESTRICT')? drop_cluster_replica ::= 'DROP' 'CLUSTER' 'REPLICA' ('IF EXISTS')? cluster_name.replica_name drop_database ::= 'DROP' 'DATABASE' ('IF EXISTS')? database_name ('CASCADE' | 'RESTRICT')? drop_materialized_view ::= 'DROP' 'MATERIALIZED VIEW' 'IF EXISTS'? view_name ('RESTRICT' | 'CASCADE')? drop_network_policy ::= 'DROP' 'NETWORK POLICY' 'IF EXISTS'? name drop_owned ::= 'DROP' 'OWNED' 'BY' role_name ( ',' role_name )* ('RESTRICT' | 'CASCADE')? drop_role ::= 'DROP' 'ROLE' ('IF EXISTS')? role_name drop_secret ::= 'DROP' 'SECRET' ('IF EXISTS')? secret_name ('CASCADE' | 'RESTRICT')? drop_schema ::= 'DROP' 'SCHEMA' ('IF EXISTS')? schema_name ('CASCADE' | 'RESTRICT')? drop_sink ::= 'DROP' 'SINK' ('IF' 'EXISTS')? sink_name drop_source ::= 'DROP' 'SOURCE' ('IF' 'EXISTS')? source_name ('RESTRICT' | 'CASCADE')? drop_table ::= 'DROP' 'TABLE' ('IF' 'EXISTS')? table_name ('RESTRICT' | 'CASCADE')? drop_type ::= 'DROP' 'TYPE' ('IF' 'EXISTS')? data_type_name ('RESTRICT' | 'CASCADE')? drop_view ::= 'DROP' 'VIEW' ('IF' 'EXISTS')? view_name ('RESTRICT' | 'CASCADE')? drop_user ::= 'DROP' 'USER' ('IF EXISTS')? role_name execute ::= 'EXECUTE' name ('(' (parameter_value) ( ',' parameter_value )* ')')? explain_filter_pushdown ::= 'EXPLAIN FILTER PUSHDOWN' 'FOR' ( select_stmt | 'MATERIALIZED VIEW' name ) explain_timestamp ::= 'EXPLAIN' 'TIMESTAMP' ( 'AS' ( 'TEXT' | 'JSON' ) )? 'FOR' select_stmt explain_schema ::= 'EXPLAIN' ( 'KEY' | 'VALUE' ) 'SCHEMA' ( 'AS JSON' )? 'FOR' 'CREATE SINK' (sink_name)? sink_definition fetch ::= 'FETCH' 'FORWARD'? ('ALL' | count)? 'FROM'? cursor_name ( 'WITH'? '(' (option_name ('=' option_value)?) ( ',' (option_name ('=' option_value)?) )* ')' )? format_spec ::= 'AVRO USING' 'CONFLUENT SCHEMA REGISTRY' 'CONNECTION' connection_name key_strat? val_strat? with_options? | 'PROTOBUF' ('USING' 'CONFLUENT SCHEMA REGISTRY' 'CONNECTION' connection_name with_options | 'MESSAGE' message_name 'USING SCHEMA' encoded_schema) | 'REGEX' regex | 'CSV WITH' ('HEADER' ( '(' col_name (',' col_name)* ')' ) | n 'COLUMNS') ('DELIMITED BY' char)? | 'TEXT' | 'BYTES' | 'JSON' grant_privilege ::= 'GRANT' ((privilege (',' privilege)*) | 'ALL' 'PRIVILEGES'? ) 'ON' ( ('TABLE'? | 'TYPE' | 'SECRET' | 'CONNECTION' | 'DATABASE' | 'SCHEMA' | 'CLUSTER') object_name (',' object_name)* | 'SYSTEM' | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS') 'IN' 'SCHEMA' schema_name (',' schema_name)* | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'SCHEMAS') 'IN' 'DATABASE' database_name (',' database_name)* | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'DATABASES' | 'SCHEMAS' | 'CLUSTERS') ) 'TO' 'GROUP'? role_name ( ',' 'GROUP'? role_name )* grant_role ::= 'GRANT' role_name ( ',' role_name )* 'TO' 'GROUP'? member_name ( ',' 'GROUP'? member_name )* key_strat ::= 'KEY STRATEGY' strat val_strat ::= 'VALUE STRATEGY' strat strat ::= 'INLINE' avro_reader_schema | 'ID' schema_registry_id | 'LATEST' sink_format_spec ::= 'AVRO USING' csr_connection | 'JSON' | 'TEXT' | 'BYTES' compression ::= 'COMPRESSION' ('NONE' | 'GZIP') func_at_time_zone ::= 'SELECT' ( 'TIMESTAMP' | 'TIMESTAMPTZ' ) ('timestamp' | 'timestamptz') 'AT TIME ZONE' 'zone::type' func_cast ::= 'CAST' '(' val 'AS' type ')' func_coalesce ::= 'coalesce' '(' val ( ',' val )* ')' func_csv_extract ::= 'csv_extract' '(' num_csv_col ',' col_name ')' func_date_bin ::= 'date_bin' '(' stride ',' source ',' origin ')' func_date_bin_experimental ::= 'date_bin' '(' stride ',' source (',' origin)? ')' func_date_bin_hopping ::= 'date_bin_hopping' '(' hop ',' width ',' source (',' origin)? ')' func_date_trunc ::= 'date_trunc' '(' "'" ( 'microseconds' | 'milliseconds' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year' | 'decade' | 'century' | 'millenium' ) "'" ',' val ')' func_extract ::= 'EXTRACT' '(' ( 'EPOCH' | 'MILLENNIUM' | 'CENTURY' | 'DECADE' | 'YEAR' | 'QUARTER' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' | 'MICROSECOND' | 'MILLISECOND' | 'DOW' | 'ISODOW' | 'DOY' ) 'FROM' val ')' func_date_part ::= 'date_part' '(' "'" ( 'epoch' | 'millennium' | 'century' | 'decade' | 'year' | 'quarter' | 'month' | 'week' | 'dat' | 'hour' | 'minute' | 'second' | 'microsecond' | 'millisecond' | 'dow' | 'isodow' | 'doy' ) "'" ',' val ')' func_length ::= 'length' '(' str (',' encoding_name)? ')' func_map_agg ::= 'map_agg' '(' keys ',' values ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? func_timezone ::= 'TIMEZONE' '(' zone'::'type ',' ( 'timestamp' | 'timestamptz' ) ')' func_justify_days ::= 'justify_days' '(' interval ')' func_justify_hours ::= 'justify_hours' '(' interval ')' func_justify_interval ::= 'justify_interval' '(' interval ')' join_expr ::= select_pred ('CROSS' | 'NATURAL' join_type?) 'JOIN' table_ref select_post | select_pred join_type 'JOIN' table_ref ( 'USING' '(' ( ( col_ref ) ( ( ',' col_ref ) )* ) ('AS' join_using_alias)? ')' | 'ON' expression ) select_post join_type ::= ( 'FULL' ( 'OUTER' | ) | 'LEFT' ( 'OUTER' | ) | 'RIGHT' ( 'OUTER' | ) | 'INNER' | ) jsonb_agg ::= 'jsonb_agg' '(' expression ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? jsonb_object_agg ::= 'jsonb_object_agg' '(' keys ',' values ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? kafka_sink_connection ::= 'KAFKA' 'CONNECTION' connection_name '(' 'TOPIC' topic ( ( ',' connection_option )? ) ')' csr_connection ::= 'CONFLUENT SCHEMA REGISTRY' 'CONNECTION' connection_name '(' ( ',' connection_option )? ')' list_agg ::= 'list_agg' '(' value ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? lit_cast ::= type val op_cast ::= val '::' type prepare ::= 'PREPARE' name 'AS' statement privilege ::= ('SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'CREATE' | 'USAGE' | 'CREATEROLE' | 'CREATEDB' | 'CREATECLUSTER' | 'CREATENETWORKPOLICY') reassign_owned ::= 'REASSIGN' 'OWNED' 'BY' old_role (',' old_role)* 'TO' new_role reset_stmt ::= 'RESET' parameter_name revoke_privilege ::= 'REVOKE' ((privilege (',' privilege)*) | 'ALL' 'PRIVILEGES'? ) 'ON' ( ('TABLE'? | 'TYPE' | 'SECRET' | 'CONNECTION' | 'DATABASE' | 'SCHEMA' | 'CLUSTER') object_name (',' object_name)* | 'SYSTEM' | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS') 'IN' 'SCHEMA' schema_name (',' schema_name)* | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'SCHEMAS') 'IN' 'DATABASE' database_name (',' database_name)* | 'ALL' ('TABLES' | 'TYPES' | 'SECRETS' | 'CONNECTIONS' | 'DATABASES' | 'SCHEMAS' | 'CLUSTERS') ) 'FROM' 'GROUP'? role_name ( ',' 'GROUP'? role_name )* revoke_role ::= 'REVOKE' role_name ( ',' role_name )* 'FROM' 'GROUP'? member_name ( ',' 'GROUP'? member_name )* select_stmt ::= ( select_with_ctes | select_with_recursive_ctes | simple_select_stmt ) simple_select_stmt ::= 'SELECT' ( 'ALL' | 'DISTINCT' ( 'ON' '(' col_ref ( ',' col_ref )* ')' )? )? target_elem ( ',' target_elem )* 'FROM' table_expr ( ',' table_expr )* join_expr? ( 'WHERE' expr )? ( 'GROUP' 'BY' col_ref ( ',' col_ref )* )? ( 'OPTIONS' '(' ( option '=' val ) ( ( ',' option '=' val ) )* ')' )? ( 'HAVING' expr )? ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ( 'LIMIT' expr )? ( 'OFFSET' integer )? ( ( 'UNION' | 'INTERSECT' | 'EXCEPT' ) ( 'ALL' | 'DISTINCT' )? another_select_stmt )? set_stmt ::= 'SET' ( 'SESSION' | 'LOCAL' )? name ( 'TO' | '=' ) ( value | 'DEFAULT' ) set_transaction_isolation ::= 'SET' 'TRANSACTION_ISOLATION' ( 'TO' | '=' ) isolation_level string_agg ::= 'string_agg' '(' value ',' delimiter ( 'ORDER' 'BY' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? ( ',' col_ref ( 'ASC' | 'DESC' )? ( 'NULLS LAST' | 'NULLS FIRST' )? )* )? ')' ('FILTER' '(' 'WHERE' filter_clause ')')? table_ref ::= ( table_name | 'LATERAL'? '(' select_stmt ')' | 'LATERAL'? table_func_call | '(' join_expr ')' ) ('AS'? table_alias ('(' col_alias (',' col_alias)* ')'))? time_unit ::= 'MILLENNIUM' | 'CENTURY' | 'DECADE' | 'YEAR' | 'MONTH' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' | 'MILLISECONDS' | 'MICROSECONDS' type_bool ::= ( 'TRUE' | 'FALSE' ) type_date ::= 'DATE' "'" date_str ('T'? time_str)? ( ('+' | '-' ) tz_offset )? "'" type_float ::= int ( '.' frac )? type_interval_time_expr ::= ('+' | '-')? (ym_str | time_str | (int ('.' frac)? time_unit?)) type_interval_val ::= 'INTERVAL' "'" time_expr+ "'" ( ( head_time_unit 'TO' )? tail_time_unit )? type_jsonb ::= "'" json_string "'" '::JSONB' type_map ::= "'" map_string "'" '::' 'MAP' '[' 'TEXT' '=>' value_type ']' type_list ::= 'LIST' '[' (element (',' element)*)? ']' | 'LIST' '(' query ')' type_numeric_dec ::= 'numeric' ( '(' precision ',' scale ')' )? type_numeric_val ::= int ( '.' frac )? ( ( 'e' | 'E' ) '-'? exp )? type_record ::= 'ROW' '(' expr? (',' expr)* ')' type_text ::= "'" text "'" type_bytea_esc ::= "'" "\" "binary string" "'" type_bytea_hex ::= "'" "\x" "binary string" "'" type_uuid ::= UUID "'" uuid_str "'" type_escape_text ::= ('e' | 'E') "'" escapable_text "'" type_time ::= 'TIME' "'" time_str "'" type_timestamp ::= ( 'TIMESTAMP' ('(' precision ')')? (('WITH' | 'WITHOUT') TIME ZONE)? | 'TIMESTAMPTZ' ('(' precision ')')? ) "'" date_str ( (' ' | 'T') time_str)? ( ('+' | '-' ) tz_offset )? "'" with_ctes ::= 'WITH' cte_binding ( ',' cte_binding )* select_stmt with_recursive_ctes ::= 'WITH MUTUALLY RECURSIVE' ( '(' ('RETURN AT' | 'ERROR AT')? 'RECURSION LIMIT' limit ')' )? recursive_cte_binding ( ',' recursive_cte_binding )* select_stmt cte_binding ::= cte_ident ( '(' col_ident ( ',' col_ident )* ')' )? 'AS' '(' select_stmt ')' recursive_cte_binding ::= cte_ident '(' col_ident col_type ( ',' col_ident col_type )* ')' 'AS' '(' select_stmt ')' with_options ::= ('WITH' '(' ( field '='? val ) ( ( ',' field '='? val ) )* ')')? with_options_aws ::= 'WITH' '(' ( static_credentials | 'profile_name' '=' val | 'role_arn' '=' val | 'region' '=' val ) ( static_credentials | 'profile_name' '=' val | 'role_arn' '=' val | 'region' '=' val )* ')' with_options_aws_static ::= 'access_key_id' '=' val ',' 'secret_access_key' '=' val ( ',' 'token' '=' val )? with_options_retain_history ::= ('WITH' '(' ('RETAIN HISTORY' '='? 'FOR' retention_period) ')') network_policy_rule::= name ( '(' rule_option (',' rule_option)* ')' )?