同义词

概述

同义词synonym是一个数据库对象,类似给对象起一个别名,具有以下用途:

  • 当您需要在schema02中查询schema01的表t,但又不希望复制数据时,可以在schema02中为表t创建一个同义词sy_t。这样,您就可以直接在schema02中查询sy_t,而数据将实时与schema01中的表t保持一致。这是一种高效的数据管理策略,既保证了数据的一致性,又避免了不必要的数据重复。
  • 提供一个抽象层,保护客户端应用程序免受对基础对象的名称或位置所做的更改的影响。

同义词属于schema,与schema中的其他对象一样,同义词的名称必须在该类型对象下唯一,支持为以下对象创建同义词:table、table stream、dynamic table、materialzied view、volume、function

操作管理

创建

CREATE  [TABLE|VOLUME|FUNCITON] SYNONYM [schema_name.] synonym_name FOR object COMMENT''
object ::=
workspace_name.schema_name.object_name|schema_name.object_name|object_name
  • TABLE|VOLUME|FUNCITON:表示同义词对象类型。

    • TABLE: 这是默认选项。用于为table、table stream、materialzied view、dynamic table命名同义词。在这些情况下,“table”关键字是可选的。
    • VOLUME:volume命名同义词时,必须明确指定此关键字。如果省略,系统将默认寻找同名的表格对象。FUNCITON,如果给function命名同义词,该关键字必须填写。如果未填写,则会寻找同名的table对象
    • FUNCTION:function命名同义词时,此关键字是必填项。如果未指定,系统同样会默认寻找同名的table对象
  • synonym_name:同义词名称,遵循元数据规范

  • object:指定基对象的名称,支持workspace_name.schema_name_2.object_name、schema_name_2.name格式如果省略schema则使用当前schema中的对象

删除

DROP [TABLE|VOLUME|FUNCITON] SYNONYM [ IF EXISTS ] [ schema. ] synonym_name
  • TABLE|VOLUME|FUNCITON:表示给哪种对象命名同义词,

    • TABLE:这是默认选项。用于为table、table stream、materialzied view、dynamic table命名同义词。在这些情况下,“table”关键字是可选的。
    • VOLUME:volume命名同义词时,必须明确指定此关键字。如果省略,系统将默认寻找同名的表格对象。
    • FUNCTION:function命名同义词时,此关键字是必填项。如果未指定,系统同样会默认寻找同名的table对象
  • if exists:可选,仅当同义词已存在时,才有条件地删除该同义词。

  • schema:可选,指定同义词所在的schema。如果未指定schema,则当前会话的默认schema。

权限

创建同义词需要create synonym权限

grant create synonym  on schema  scname to user uat_test_01;

删除同义词,需要drop 权限

grant drop synonym on all synonyms in schema <schemaname> to user uat_test_01;
grant create synonym  on schema  scname to user uat_test_01;

同义词查询权限

同义词权限与基表对象的权限相同。授予对同义词的权限等同于授予对应基表对象的权限。同样,授予对基表对象的权限等同于授予对该对象的所有同义词的权限。如果向用户授予对同义词的权限,则该用户可以在行使该权限的 SQL 语句中使用同义词名称或基表对象名称。

列出SYNONYM

SHOW SYNONYMS [IN {SCHEMA scname | WORKSPACE wbname}] [WHRERE <expr>]

使用示例

给table创建同义词

--创建表
CREATE TABLE `public`.students(
  `name` string,
  `class` string);
--给表创建同义词
CREATE SYNONYM students_sy for `public`.students;
--查询同义词
select * from students_sy;
--删除同义词
drop synonym students_sy;

给table stream创建同义词,table stream和table创建同义词语法相同

create  synonym students_stream_synonym for public.students_stream;
--删除同义词
drop synonym students_stream_synonym;

给dynamic table创建同义词,dynamic table和table创建同义词语法相同

create  synonym event_group_minute_sy for public.event_group_minute;
--删除同义词
drop synonym event_group_minute_sy;

给materialzied view创建同义词,materialzied view和table创建同义词语法相同

create SYNONYM event_group_mv_sy for event_group_mv;
--删除同义词
drop synonym event_group_mv_sy;

给volume创建同义词,其中volume为必选,如果不指定则自动会查找和table、materialzied view、table stream、dynamic table同名的对象

create volume synonym hz_csv_volume_sy for public.hz_csv_volume;
--删除同义词
drop volume synonym hz_csv_volume_sy;

给function创建同义词,其中function为必选,如果不指定则自动会查找和table、materialzied view、table stream、dynamic table同名的对象

create function synonym s_swu_udf_upper_aliyun_java_upper for public.swu_udf_upper_aliyun_java_upper;
--删除同义词
drop function synonym s_swu_udf_upper_aliyun_java_upper;

获取同义词

show synonyms in  public where synonym_name='students_sy';
+--------------+-------------------------+-------------+-----------------------+
| synonym_name |       create_time       | target_type |       target_name     |
+--------------+-------------------------+-------------+-----------------------+
| students_sy  | 2024-06-14 10:21:00.504 | TABLE       | ql_ws.`public`.studen |
+--------------+-------------------------+-------------+-----------------------+

联系我们
预约咨询
微信咨询
电话咨询