OceanBase logo

OceanBase

A unified distributed database ready for your transactional, analytical, and AI workloads.

DEPLOY YOUR WAY

OceanBase Cloud

The best way to deploy and scale OceanBase

OceanBase Enterprise

Run and manage OceanBase on your infra

TRY OPEN SOURCE

OceanBase Community Edition

The free, open-source distributed database

OceanBase seekdb

Open source AI native search database

Customer Stories

Real-world success stories from enterprises across diverse industries.

View All
BY USE CASES

Mission-Critical Transactions

Global & Multicloud Application

Elastic Scaling for Peak Traffic

Real-time Analytics

Active Geo-redundancy

Database Consolidation

Resources

Comprehensive knowledge hub for OceanBase.

Blog

Live Demos

Training & Certification

Documentation

Official technical guides, tutorials, API references, and manuals for all OceanBase products.

View All
PRODUCTS

OceanBase Cloud

OceanBase Database

Tools

Connectors and Middleware

QUICK START

OceanBase Cloud

OceanBase Database

BEST PRACTICES

Practical guides for utilizing OceanBase more effectively and conveniently

Company

Learn more about OceanBase – our company, partnerships, and trust and security initiatives.

About OceanBase

Partner

Trust Center

Contact Us

International - English
中国站 - 简体中文
日本 - 日本語
Sign In
Start on Cloud

A unified distributed database ready for your transactional, analytical, and AI workloads.

DEPLOY YOUR WAY

OceanBase Cloud

The best way to deploy and scale OceanBase

OceanBase Enterprise

Run and manage OceanBase on your infra

TRY OPEN SOURCE

OceanBase Community Edition

The free, open-source distributed database

OceanBase seekdb

Open source AI native search database

Customer Stories

Real-world success stories from enterprises across diverse industries.

View All
BY USE CASES

Mission-Critical Transactions

Global & Multicloud Application

Elastic Scaling for Peak Traffic

Real-time Analytics

Active Geo-redundancy

Database Consolidation

Comprehensive knowledge hub for OceanBase.

Blog

Live Demos

Training & Certification

Documentation

Official technical guides, tutorials, API references, and manuals for all OceanBase products.

View All
PRODUCTS
OceanBase CloudOceanBase Database
ToolsConnectors and Middleware
QUICK START
OceanBase CloudOceanBase Database
BEST PRACTICES

Practical guides for utilizing OceanBase more effectively and conveniently

Learn more about OceanBase – our company, partnerships, and trust and security initiatives.

About OceanBase

Partner

Trust Center

Contact Us

Start on Cloud
编组
All Products
    • Databases
    • iconOceanBase Database
    • iconOceanBase Cloud
    • iconOceanBase Tugraph
    • iconInteractive Tutorials
    • iconOceanBase Best Practices
    • Tools
    • iconOceanBase Cloud Platform
    • iconOceanBase Migration Service
    • iconOceanBase Developer Center
    • iconOceanBase Migration Assessment
    • iconOceanBase Admin Tool
    • iconOceanBase Loader and Dumper
    • iconOceanBase Deployer
    • iconKubernetes operator for OceanBase
    • iconOceanBase Diagnostic Tool
    • iconOceanBase Binlog Service
    • Connectors and Middleware
    • iconOceanBase Database Proxy
    • iconEmbedded SQL in C for OceanBase
    • iconOceanBase Call Interface
    • iconOceanBase Connector/C
    • iconOceanBase Connector/J
    • iconOceanBase Connector/ODBC
    • iconOceanBase Connector/NET
icon

OceanBase Database Proxy

V4.3.3

  • What is ODP?
  • Installation and deployment
    • Overview
    • Deploy ODP by using obd
    • Deploy ODP by using OCP
    • Deploy ODP by using the CLI
    • Deployment modes
  • Basic operations
  • Configuration parameter
    • View and modify parameters
    • Parameter summary
    • Global parameters
      • automatic_match_work_thread
      • block_thread_num
      • cache_cleaner_clean_interval
      • check_tenant_locality_change
      • client_max_connections
      • client_max_memory_size
      • client_session_id_version
      • client_sock_option_flag_out
      • client_tcp_keepcnt
      • client_tcp_keepidle
      • client_tcp_keepintvl
      • client_tcp_user_timeout
      • cluster_count_high_water_mark
      • cluster_expire_time
      • config_server_refresh_interval
      • congestion_fail_window
      • congestion_failure_threshold
      • congestion_retry_interval
      • connection_diagnosis_option
      • connect_observer_max_retries
      • current_local_config_version
      • default_buffer_water_mark
      • default_inactivity_timeout
      • delay_exit_time
      • delay_update_entry_interval
      • detect_server_timeout
      • digest_sql_length
      • enable_abort_conn_info
      • enable_async_log
      • enable_async_pull_location_cache
      • enable_bad_route_reject
      • enable_binlog_service
      • enable_cached_server
      • enable_causal_order_read
      • enable_client_connection_lru_disconnect
      • enable_client_ip_checkout
      • enable_cluster_checkout
      • enable_compression_protocol
      • enable_congestion
      • enable_connection_diagnosis
      • enable_cpu_isolate
      • enable_cpu_topology
      • enable_extra_prometheus_metric
      • enable_flow_control
      • enable_full_link_trace
      • enable_full_username
      • enable_get_rslist_remote
      • enable_global_ps_cache
      • enable_index_route
      • enable_monitor_stat
      • enable_ob_protocol_v2
      • enable_ob_protocol_v2_with_client
      • enable_obproxy_rpc_service
      • enable_partition_table_route
      • enable_performance_mode
      • enable_pl_route
      • enable_primary_zone
      • enable_prometheus
      • enable_proxy_scramble
      • enable_qa_mode
      • enable_qos
      • enable_report_session_stats
      • enable_reroute
      • enable_sequence_prefetch
      • enable_sharding
      • enable_single_leader_node_routing
      • enable_standby
      • enable_stat
      • enable_strict_kernel_release
      • enable_strict_stat_time
      • enable_sync_all_stats
      • enable_syslog_file_compress
      • enable_syslog_wf
      • enable_trace
      • enable_trace_stats
      • enable_trans_detail_stats
      • enable_transaction_internal_routing
      • enable_xa_route
      • fetch_proxy_bin_random_time
      • fetch_proxy_bin_timeout
      • flow_consumer_reenable_threshold
      • flow_event_queue_threshold
      • flow_high_water_mark
      • flow_low_water_mark
      • grpc_client_num
      • grpc_thread_num
      • hot_upgrade_exit_timeout
      • hot_upgrade_failure_retries
      • hot_upgrade_rollback_timeout
      • idc_list_refresh_interval
      • ignore_local_config
      • internal_cmd_mem_limited
      • ip_listen_mode
      • ldg_info_refresh_interval
      • listen_port
      • local_bound_ip
      • local_bound_ipv6_ip
      • log_cleanup_interval
      • log_dir_size_threshold
      • log_file_percentage
      • long_async_task_timeout
      • max_log_file_size
      • max_syslog_file_count
      • max_syslog_file_time
      • mem_leak_check_class_name
      • mem_leak_check_mod_name
      • metadb_server_state_refresh_interval
      • min_congested_connect_timeout
      • min_keep_congestion_interval
      • monitor_cost_ms_unit
      • monitor_item_limit
      • monitor_item_max_idle_period
      • monitor_log_level
      • monitor_stat_dump_interval
      • monitor_stat_high_threshold
      • monitor_stat_low_threshold
      • monitor_stat_middle_threshold
      • need_convert_vip_to_tname
      • net_accept_threads
      • net_config_poll_timeout
      • normal_pl_update_threshold
      • obproxy_config_server_url
      • obproxy_sys_password
      • partition_location_expire_relative_time
      • prometheus_cost_ms_unit
      • prometheus_listen_port
      • prometheus_sync_interval
      • protocol_diagnosis_level
      • proxy_hot_upgrade_check_interval
      • proxy_id
      • proxy_info_check_interval
      • proxy_local_cmd
      • proxy_mem_limited
      • qa_mode_mock_public_cloud_slb_addr
      • qos_stat_clean_interval
      • qos_stat_item_limit
      • refresh_idc_list
      • refresh_json_config
      • refresh_rslist
      • request_buffer_length
      • rootservice_list
      • routing_cache_mem_limited
      • rpc_async_task_thread_num
      • rpc_enable_congestion
      • rpc_enable_direct_expire_route_entry
      • rpc_enable_global_index
      • rpc_enable_force_srv_black_list
      • rpc_enable_parallel_handler
      • rpc_enable_reroute
      • rpc_enable_retry_request_info_log
      • rpc_force_srv_black_list
      • rpc_listen_port
      • rpc_max_request_batch_size
      • rpc_max_response_batch_size
      • rpc_net_timeout_base
      • rpc_max_server_table_entry_num
      • rpc_redis_operation_timeout
      • rpc_redis_default_database_name
      • rpc_period_task_interval
      • rpc_redis_default_user_name
      • rpc_request_timeout
      • rpc_server_entry_expire_time
      • rpc_request_timeout_delta
      • rpc_server_net_invalid_time_us
      • rpc_server_net_handler_expire_time
      • rpc_server_net_max_pending_request
      • rpc_srv_session_pool_inactive_timeout
      • rpc_service_mode
      • rpc_sub_request_isolation_mode
      • rpc_support_key_partition_shard_request
      • rpc_sub_request_weight
      • sequence_entry_expire_time
      • sequence_fail_retry_count
      • sequence_prefetch_threshold
      • server_detect_fail_threshold
      • server_detect_mode
      • server_detect_refresh_interval
      • server_routing_mode
      • server_state_refresh_interval
      • server_tcp_init_cwnd
      • server_tcp_keepcnt
      • server_tcp_keepidle
      • server_tcp_keepintvl
      • server_tcp_user_timeout
      • shard_scan_thread_num
      • short_async_task_timeout
      • skip_proxy_sys_private_check
      • skip_proxyro_check
      • slow_proxy_process_time_threshold
      • slow_transaction_time_threshold
      • sock_option_flag_out
      • sock_packet_mark_out
      • sock_packet_tos_out
      • sock_recv_buffer_size_out
      • sock_send_buffer_size_out
      • sql_table_cache_expire_relative_time
      • sql_table_cache_mem_limited
      • sqlaudit_mem_limited
      • stack_size
      • stat_dump_interval
      • stat_table_sync_interval
      • syslog_io_bandwidth_limit
      • syslog_level
      • task_thread_num
      • tenant_location_valid_time
      • tunnel_request_size_threshold
      • username_separator
      • work_thread_num
      • xflush_log_level
    • Multi-level parameters
      • binlog_service_ip
      • compression_algorithm
      • enable_check_cluster_name
      • enable_client_ssl
      • enable_cloud_full_username
      • enable_read_write_split
      • enable_rpc_throttle
      • enable_server_ssl
      • enable_standby_read_write_split
      • enable_transaction_split
      • enable_weak_reroute
      • mysql_version
      • ob_max_read_stale_time
      • obproxy_force_parallel_query_dop
      • obproxy_read_consistency
      • obproxy_read_only
      • observer_query_timeout_delta
      • observer_sys_password
      • observer_sys_password1
      • proxy_idc_name
      • proxy_primary_zone_name
      • proxy_route_policy
      • proxy_tenant_name
      • query_digest_time_threshold
      • read_stale_retry_interval
      • rootservice_cluster_name
      • route_diagnosis_level
      • rpc_request_throttle_waiting_time
      • rpc_throttle_limit_qps_qa
      • route_target_replica_type
      • rpc_throttle_trigger_percentage
      • slow_query_time_threshold
      • sql_firewall_config
      • ssl_attributes
      • target_db_server
      • weakread_weight_zone
  • Connection management
    • Principles
    • Session status synchronization
    • Configure a globally unique client session ID
    • Client session
    • Server session
    • Network connection
  • Data routing
    • Factors affecting data routing
    • ODP routing
    • Intra-tenant routing
      • Overview
      • IP address-based routing
      • Partitioned table-based routing for strong-consistency reads
      • Global index table-based routing for strong-consistency reads
      • Replicated table-based routing for strong-consistency reads
      • Primary zone-based routing for strong-consistency reads
      • Strategy-based routing
      • Distributed transaction routing
      • Rerouting
      • Forcible routing
      • Weight-based load-balanced routing
    • Automatic routing to the primary/standby tenants
    • Read/Write separation
    • Follower latency threshold
    • Function partition key routing
      • Overview
      • String functions
      • Numeric calculation functions
      • Date calculation functions
      • FAQ
    • Character set-based routing
    • Partitioning key types supported for routing by ODP
  • Logs
    • Overview
    • obproxy_diagnosis.log
    • obproxy_digest.log
    • obproxy_error.log
    • obproxy_slow.log
    • obproxy_stat.log
    • obproxy.log
  • Commands
    • Overview
    • Dedicated ODP commands
      • ALTER
      • KILL
      • ping
      • SHOW
        • SHOW
        • SHOW PROXYPS
    • Compatible MySQL commands
      • BINLOG
      • KILL
      • SHOW PROCESSLIST
      • SHOW RELAYLOG EVENTS
      • SHOW SLAVE HOSTS
  • High availability mechanism
    • Overview
    • High availability of ODP services
    • High availability of OceanBase Database
    • High availability testing
  • OBKV
    • RPC service port
    • Throttling
    • OBKV-Redis
  • Security and protocols
  • Operation and maintenance
    • Troubleshooting logic
    • Performance analysis
    • Show Trace
    • Routing diagnostics
      • Overview
      • Obtain diagnostic information
      • Diagnostic point troubleshooting
        • Overview
        • SQL_PARSE
        • ROUTE_INFO
        • LOCATION_CACHE_LOOKUP
        • ROUTINE_ENTRY_LOOKUP_DONE
        • FETCH_TABLE_RELATED_DATA
        • TABLE_ENTRY_LOOKUP_DONE
        • EXPR_PARSE
        • CALC_ROWID
        • RESOLVE_TOKEN
        • RESOLVE_EXPR
        • CALC_PARTITION_ID
        • PARTITION_ID_CALC_DONE
        • PARTITION_ENTRY_LOOKUP_DONE
        • ROUTE_POLICY
        • CONGESTION_CONTROL
        • RETRY
        • HANDLE_RESPONSE
      • Examples
    • Memory leak diagnostics
    • Connection diagnostics
    • Prometheus monitoring
    • SQL firewall
  • Release Notes
    • Versioning rules
    • Enterprise Edition
      • V4.3
        • ODP Enterprise Edition V4.3.3
        • ODP Enterprise Edition V4.3.2
        • ODP Enterprise Edition V4.3.1
        • ODP Enterprise Edition V4.3.0
      • V4.2
        • ODP Enterprise Edition V4.2.3
        • ODP Enterprise Edition V4.2.2
        • ODP Enterprise Edition V4.2.1
      • V4.1
        • ODP Enterprise Edition V4.1.0
      • V4.0
        • ODP Enterprise Edition V4.0.0
      • V3.2
        • ODP Enterprise Edition V3.2.11
        • ODP Enterprise Edition V3.2.3.5
    • Community Edition
      • V4.3
        • ODP Community Edition V4.3.3
        • ODP Community Edition V4.3.2
        • ODP Community Edition V4.3.1
      • V4.2
        • ODP Community Edition V4.2.3
        • ODP Community Edition V4.2.1
        • ODP Community Edition V4.2.0
      • V4.1
        • ODP Community Edition V4.1.0
      • V4.0
        • ODP Community Edition V4.0.0

Download PDF

What is ODP? Overview Deploy ODP by using obd Deploy ODP by using OCP Deploy ODP by using the CLI Deployment modes Basic operations View and modify parameters Parameter summary automatic_match_work_thread block_thread_num cache_cleaner_clean_interval check_tenant_locality_change client_max_connections client_max_memory_size client_session_id_version client_sock_option_flag_out client_tcp_keepcnt client_tcp_keepidle client_tcp_keepintvl client_tcp_user_timeout cluster_count_high_water_mark cluster_expire_time config_server_refresh_interval congestion_fail_window congestion_failure_threshold congestion_retry_interval connection_diagnosis_option connect_observer_max_retries current_local_config_version default_buffer_water_mark default_inactivity_timeout delay_exit_time delay_update_entry_interval detect_server_timeout digest_sql_length enable_abort_conn_info enable_async_log enable_async_pull_location_cache enable_bad_route_reject enable_binlog_service enable_cached_server enable_causal_order_read enable_client_connection_lru_disconnect enable_client_ip_checkout enable_cluster_checkout enable_compression_protocol enable_congestion enable_connection_diagnosis enable_cpu_isolate enable_cpu_topology enable_extra_prometheus_metric enable_flow_control enable_full_link_trace enable_full_username enable_get_rslist_remote enable_global_ps_cache enable_index_route enable_monitor_stat enable_ob_protocol_v2 enable_ob_protocol_v2_with_client enable_obproxy_rpc_service enable_partition_table_route enable_performance_mode enable_pl_route enable_primary_zone enable_prometheus enable_proxy_scramble enable_qa_mode enable_qos enable_report_session_stats enable_reroute enable_sequence_prefetch enable_sharding enable_single_leader_node_routing enable_standby enable_stat enable_strict_kernel_release enable_strict_stat_time enable_sync_all_stats enable_syslog_file_compress enable_syslog_wf enable_trace enable_trace_stats enable_trans_detail_stats enable_transaction_internal_routing enable_xa_route fetch_proxy_bin_random_time fetch_proxy_bin_timeout flow_consumer_reenable_threshold flow_event_queue_threshold flow_high_water_mark flow_low_water_mark grpc_client_num grpc_thread_num hot_upgrade_exit_timeout hot_upgrade_failure_retries hot_upgrade_rollback_timeout idc_list_refresh_interval ignore_local_config
OceanBase logo

The Unified Distributed Database for the AI Era.

Follow Us
Products
OceanBase CloudOceanBase EnterpriseOceanBase Community EditionOceanBase seekdb
Resources
DocsBlogLive DemosTraining & Certification
Company
About OceanBaseTrust CenterLegalPartnerContact Us
Follow Us

© OceanBase 2026. All rights reserved

Cloud Service AgreementPrivacy PolicySecurity
Contact Us
Document Feedback
  1. Documentation Center
  2. OceanBase Database Proxy
  3. V4.3.3
iconOceanBase Database Proxy
V 4.3.3
  • V 4.3.6
  • V 4.3.4
  • V 4.3.3
  • V 4.3.2
  • V 4.3.1
  • V 4.3.0
  • V 4.2.3
  • V 4.2.2
  • V 4.2.0 and earlier

Overview

Last Updated:2026-04-14 01:41:30  Updated
share
What is on this page
Background information
Considerations
Examples
Partitioning key scenario
Default value scenario
Generated column scenario
Support
Partitioning keys and default values
Generated columns
Basic function usage
Validation method

folded

share

This topic describes the support for function partitioning key-based routing and how to use and verify this routing feature.

Background information

As a distributed database, OceanBase Database may store different tables and even different partitions of each table on different servers. To read and write data, the database must first locate the table or partition to which the data belongs. Although every OBServer node supports routing and forwarding and can locally execute SQL queries, if SQL queries are not forwarded to appropriate nodes, the performance and overall throughput of the database will be severely undermined.

As a high-performance reverse proxy server for OceanBase Database, OceanBase Database Proxy (ODP) supports routing and forwarding as its core feature. The more functions that ODP can parse, the more possible that SQL queries can be forwarded to the most appropriate OBServer nodes for execution. This decreases the occurrences of slow queries and improves user experience.

Considerations

  • Function partitioning key-based routing is a new feature provided by ODP V4.2.3. To use this feature, make sure that the ODP you are using is V4.2.3 or later.

  • Functions that are not supported by this feature cannot be parsed by ODP to implement accurate routing, which leads to random forwarding to OBServer nodes, but can still properly work in OceanBase Database.

  • ODP calculates partitioning keys to accurately route user requests, and incorrect routing does not affect the correctness of request execution.

  • The SQL parser of ODP can parse SQL queries only in a simple way. In some scenarios, such as nested queries, the SQL parser may calculate the partitioning key inaccurately. We recommend that you refer to the following examples in actual use of the functions. For more information, see other topics in this chapter. You can also validate whether an SQL query can be accurately routed by referring to Validation method.

Examples

This section provides simple examples of using each function in different scenarios. For more information about how to use each function, see the corresponding topics in this chapter.

Partitioning key scenario

  1. Create a table named test1.

    create table test1 (
      c1 int,
      c2 int
    ) partition by hash(c1) partitions 3;
    
  2. Query data where c1 is 1 in the test1 table.

    select * from test1 where c1 = nvl(null, 1);
    

Default value scenario

  1. Create a table named test2 and set the default value of the c1 column to nvl(null,12.3).

    create table test2(
     c1 int default nvl(null,12.3),
     c2 int
    ) partition by hash(c1) partitions 3;
    
  2. Insert data into the test2 table.

    Because the c1 column has a default value, you only need to insert values into the c2 column.

    insert into test2 (c2) values (2);
    

Generated column scenario

Create a table named test3 and set the values of the c2 column to be automatically generated by the substr(c1, 1, 4) expression.

create table test3(
  c1 varchar2(20) default 'aaaaaaaaaaaa',
  c2 varchar2(20) GENERATED ALWAYS AS (substr(c1, 1, 4))
) partition by hash(c2) partitions 3;

Support

ODP supports function partitioning key-based routing for partitioning keys, default values, and generated columns.

Partitioning keys and default values

This section describes the functions supported in partitioning keys and default values. ODP supports elementary arithmetic operations, including +, -, *, and /. For more information, see Basic function usage. ODP also supports string functions, numeric calculation functions, and date calculation functions.

String functions

The following table describes ODP's support for string functions in different modes. For more information, see String functions.

Function Description Supported mode
SUBSTR Extracts a substring from a string. MySQL/Oracle
TO_CHAR(datetime) Converts data of the datetime type to that of the char type. Oracle
LOWER Converts characters to lowercase. MySQL/Oracle
LCASE Converts characters to lowercase. MySQL
UPPER Converts characters to uppercase. MySQL/Oracle
UCASE Converts characters to uppercase. MySQL
TRIM Removes specified leading and/or trailing characters from a string. MySQL/Oracle
LTRIM Removes specified leading characters from a string. MySQL/Oracle
RTRIM Removes specified trailing characters from a string. MySQL/Oracle
CONCAT Concatenates one or more strings into a new single string. MySQL/Oracle
SUBSTRING Extracts a substring from a string. MySQL
REPLACE Replaces a substring in a string with another substring. MySQL/Oracle
LENGTH Calculates the length of a string. MySQL/Oracle

Numeric calculation functions

The following table describes ODP's support for numeric calculation functions in different modes. For more information, see Numeric calculation functions.

Function Description Supported mode
MOD Returns the remainder after a division. Oracle
NVL Processes NULL values. Oracle
ISNULL Returns 1 or 0. MySQL
ABS Returns the absolute value of the argument. MySQL/Oracle
CEIL/CEILING Returns the smallest integer greater than or equal to the argument. MySQL/Oracle
FLOOR Returns the largest integer less than or equal to the argument. MySQL/Oracle
TRUNCATE(MySQL)
TRUNC(Oracle)
Truncates a number (without rounding). MySQL/Oracle
ROUND Rounds a number. MySQL/Oracle

Date calculation functions

The following table describes ODP's support for date calculation functions in different modes. For more information, see Date calculation functions.

Function Description Supported mode
CURDATE/CURRENT_DATE Returns the current date without the time part in the current time zone. MySQL
CURTIME/CURRENT_TIME Returns the current time without the date part in the current time zone. MySQL
CURRENT_TIMESTAMP/NOW Returns the current datetime in the current time zone. MySQL
CURRENT_DATE Returns the current date in the time zone of the current session. Oracle
CURRENT_TIMESTAMP Returns the current datetime in the time zone of the current session. Oracle
SYSTIMESTAMP Returns the operating system date (timestamp) of the database server. Oracle
SYSDATE Returns the operating system date (date) of the database server. Oracle
TO_DATE Converts a string to a date or datetime value. Oracle
TO_TIMESTAMP Converts a string to a datetime value of the timestamp type. Oracle

Generated columns

Currently, ODP supports only the SUBSTR function for generated columns. Take note that:

  • Generated columns and corresponding source columns must be of a string type, such as varchar and text.

  • Currently, the SUBSTR function in generated columns does not support the calculation of multi-char characters.

Basic function usage

Currently, ODP allows you to nest functions with elementary arithmetic operations in partitioning keys and default values. In this case, you need to check whether the functions are supported.

Here are some examples:

  • Partitioning keys

    Assume that the database has a table named test1. The c1 column is the partitioning key of the table. ODP can accurately route the SQL query that retrieves data based on a condition from the test1 table.

    select * from test1 where c1 = ((((-(2)*(2-4)) +mod(mod((1+(3*2)),2),1)) -(4/2))+ mod(1,2));
    
  • Default values

    Create a table named test2 and use a function to define the default value of the c1 column.

    CREATE TABLE test2(
      c1 number default mod(5,2)+1,
      c2 int
    )
    PARTITION BY HASH (c1) PATITIONS 3;
    

Validation method

This section describes how to validate whether an SQL query can be accurately routed.

You can use the routing diagnostics feature of ODP V4.2.2 or later to check whether ODP can correctly route an SQL query. Run the explain route <your_sql>; command and check whether Route Prompts in the output contains WARN. If it does not contain WARN, the partition routing is accurate. For more information about the routing diagnostics feature, see Routing diagnostics.

Take an unsupported function as an example. The output for incorrect routing is as follows:

Trans Current Query:"explain route select * from t1 where c1=sin(1)"

Route Prompts
-----------------
> ROUTE_INFO
  [INFO] Will route to partition server or ldc
> RESOLVE_TOKEN
  [WARN] Not support expr func(OB_PROXY_EXPR_TYPE_NONE)

Route Plan
-----------------
> SQL_PARSE:{cmd:"COM_QUERY", table:"t1"}
> ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
> LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
  > TABLE_ENTRY_LOOKUP_DONE:{table:"t1", table_id:500010, partition_num:3, table_type:"USER TABLE", entry_from_remote:false}
  > PARTITION_ID_CALC_START:{}
    > EXPR_PARSE:{col_val:"c1=sin"}
    > RESOLVE_EXPR:{error:-5055, part_range:"(MIN ; MAX)always true"}
      > RESOLVE_TOKEN:{error:-5055, token_type:"TOKEN_FUNC", token:"sin"}
  > PARTITION_ID_CALC_DONE:{error:-5055, partition_id:-1, level:1, partitions:"(p-1)"}
> ROUTE_INFO:{route_info_type:"USE_CACHED_SESSION", svr_addr:"10.10.10.1:21102"}
> CONGESTION_CONTROL:{svr_addr:"10.10.10.1:21102"}

The output for correct routing is as follows:

Trans Current Query:"explain route select * from t1 where c1=mod(5,2)"

Route Prompts
-----------------
> ROUTE_INFO
  [INFO] Will route to partition server or ldc

Route Plan
-----------------
> SQL_PARSE:{cmd:"COM_QUERY", table:"t1"}
> ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
> LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
  > TABLE_ENTRY_LOOKUP_START:{}
    > FETCH_TABLE_RELATED_DATA:{part_level:1, part_expr:"c1"}
  > TABLE_ENTRY_LOOKUP_DONE:{table:"t1", table_id:500010, partition_num:3, table_type:"USER TABLE"}
  > PARTITION_ID_CALC_START:{}
    > EXPR_PARSE:{col_val:"c1=mod"}
    > RESOLVE_EXPR:{part_range:"[1 ; 1]"}
      > RESOLVE_TOKEN:{token_type:"TOKEN_FUNC", resolve:"DECIMAL:1", token:"mod", expr_type:"OB_PROXY_EXPR_TYPE_FUNC_MOD"}
    > CALC_PARTITION_ID:{part_description:"partition by hash(INT<binary>) partitions 3"}
  > PARTITION_ID_CALC_DONE:{partition_id:200003, level:1, partitions:"(p1)"}
  > PARTITION_ENTRY_LOOKUP_DONE:{leader:"10.10.10.1:21100"}
> ROUTE_POLICY:{chosen_route_type:"ROUTE_TYPE_LEADER"}
> CONGESTION_CONTROL:{svr_addr:"10.10.10.1:21100"}

Previous topic

Follower latency threshold
Last

Next topic

String functions
Next
What is on this page
Background information
Considerations
Examples
Partitioning key scenario
Default value scenario
Generated column scenario
Support
Partitioning keys and default values
Generated columns
Basic function usage
Validation method