Skip to content

The SQL statements sent by the external catalog do not quote reserved keywords. #67115

@killme2008

Description

@killme2008

Steps to reproduce the behavior (Required)

  1. Create an external catalog for GreptimeDB:
CREATE EXTERNAL CATALOG `jdbc0` PROPERTIES 
(
  "driver_class"  =  "org.postgresql.Driver", 
  "checksum"  =  "bef0b2e1c6edcd8647c24bed31e1a4ac", 
  "driver_url"  =  "https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar",
  "type"  =  "jdbc", 
  "user"  =  "root", 
  "jdbc_uri"  =  "jdbc:postgresql://172.17.0.2:4003/public", 
  "password"="");
  1. Query data:
USE jdbc0.public;

 SELECT * FROM greptime_physical_table LIMIT 1;
ERROR 1064 (HY000): open JDBCScanner failed, error: org.postgresql.util.PSQLException: ERROR: Invalid SQL syntax: sql parser error: Expected: an expression, found: , at Line: 1, Column: 458
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2365)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355)
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490)

Because greptime_physical_table has a column named interval, a reserved keyword, it must be quoted as "interval".

The generated SQL:

SELECT greptime_timestamp, greptime_value, __table_id, __tsid, container, endpoint, instance, job, namespace, pod, prometheus, prometheus_replica, service, metrics_path, node, remote_name, url, dialer_name, status, queue_name, slice, code, le, consumer, alertmanager, type, handler, quantile, alertname, alertstate, daemonset, reason, severity, uid, name, status_code, rule_group, scrape_job, config, listener_name, call, exported_endpoint, static, interval, method, goarch, goos, goversion, revision, tags, version, operation_type, branch, event, role, compression, cause, long_running, path, server_type, build_date, compiler, git_commit, git_tree_state, git_version, go_version, major, minor, platform, container_type, host, verb, id, device, "kernelVersion", "osVersion", image_size_in_bytes, migrated, operation_name, volume_plugin, failure_type, scope, plugin_name, metric_source, container_state, stage, result, cpu, state, operation, stability_level, lifecycle, boot_id, machine_id, mode, system_uuid, controller, priority_level, integration, rejected, flow_schema, resource, action, triggered_by, decision, crd, request_kind, workload, workload_type, group, execute, phase, component, bound, subresource, filter, code_path, kind, storage_cluster_id, username, grpc_code, grpc_method, grpc_service, grpc_type, cidr, request_operation, field_validation, policy_level, policy_version, proto, server, zone, service_kind, proxy_name, to, probe_type, rcode, zones, family, plugin, pod_uid, poddisruptionbudget, deployment, networkpolicy, unit, mutatingwebhookconfiguration, persistentvolumeclaim, volume, condition, persistentvolume, volumemode, statefulset, when_deleted, when_scaled, container_runtime_version, internal_ip, kernel_version, kubelet_version, kubeproxy_version, os_image, secret, provisioner, reclaim_policy, storageclass, volume_binding_mode, replicaset, volumename, container_id, image, image_id, image_spec, validatingwebhookconfiguration, configmap, lease, lease_holder, owner_kind, owner_name, cluster_ip, host_path, effect, key, operator, toleration_seconds, ip, ip_family, owner_is_controller, access_mode, service_name, service_namespace, webhook_name, claim_namespace, port_name, port_number, port_protocol, created_by_kind, created_by_name, host_ip, host_network, pod_ip, priority_class, ready, service_account, address, qos_class FROM "public"."greptime_physical_table" LIMIT 1

And if I change the SQL to use specific columns, it works:

StarRocks > SELECT greptime_value, greptime_timestamp, instance from greptime_physical_table LIMIT 1;
+----------------+----------------------------+-----------------+
| greptime_value | greptime_timestamp         | instance        |
+----------------+----------------------------+-----------------+
|              1 | 2025-12-05 17:40:57.880000 | 10.1.2.228:9093 |
+----------------+----------------------------+-----------------+
1 row in set (0.73 sec)

Expected behavior (Required)

Success to query external catalog tables.

Real behavior (Required)

StarRocks version (Required)

  • You can get the StarRocks version by executing SQL select current_version()
+-------------------+
| current_version() |
+-------------------+
| 4.0.2-1f1aa9c     |
+-------------------+
1 row in set (0.01 sec)

Metadata

Metadata

Assignees

No one assigned

    Labels

    type/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions