Lakehouse 对象命名规则
在 Lakehouse 中,为了确保元数据(如数据库、表、视图、用户等)的命名一致性和可读性,避免潜在的问题,制定了一套命名规则。本文档将详细介绍这些规则,帮助你更好地理解和使用 Lakehouse。
标识符类型
Lakehouse支持以下类型的标识符命名:
- 常规标识符:不需要引号,但必须符合特定的命名规则。
- 双引号标识符:需要使用双引号(")包围起来,允许使用关键字作为标识符名称。默认关闭,需通过
SET cz.sql.double.quoted.identifiers=true
SET cz.sql.double.quoted.identifiers=true
开启(仅会话级别)。注意:开启后双引号不再表示字符串,"hello"
"hello"
会被解析为标识符而非字符串值。
- 反引号标识符:需要使用反引号(`)包围起来。对于列名,反引号可以包含任何字符(连字符、空格、中文、数字开头等);对于表名、schema 名等对象名,反引号只能绕过关键字限制和数字开头限制,连字符、空格、中文等特殊字符仍然不被允许。默认使用反引号,可通过设置切换为双引号(
SET cz.sql.double.quoted.identifiers=true
SET cz.sql.double.quoted.identifiers=true
)。
命名规则
常规标识符的命名规范
- 开头字符:标识符必须以字母(包括大写A-Z、小写a-z)或下划线("_")作为起始字符。不允许以数字或其他特殊字符开始。
- 字符组成:标识符中只能包含字母、下划线和十进制数字(0-9)。不允许使用其他特殊字符和关键字,如连字符(-)、空格或其他非字母数字字符。
- 大小写敏感性:元数据在存储时会进行大小写转换。大多数对象(schema、table、view、column 等)存储时转为小写;VCluster 名称例外,存储时转为大写。在引用时不区分大小写,
MyTable
MyTable
和 mytable
mytable
视为相同标识符。反引号也不能保留大小写。注意:SELECT 查询中的列别名(AS MyAlias
AS MyAlias
)保留原始大小写,不做转换。
- 语言限制:不支持中文字符
- 长度限制: 长度为1~256个字符,WORKSPACE NAME长度限制3~28个字符
以下是几个合法的标识符示例:
my_table
table1
table_2
反引号标识符
反引号的作用因对象类型不同而有所区别:
对列名:反引号可以绕过所有命名限制,允许使用连字符、空格、中文、数字开头等任意字符:
CREATE TABLE my_table(
`my-col` INT,
`my col` STRING,
`中文列` DATE,
`123col` BIGINT
)
对表名、schema 名等对象名:反引号只能绕过关键字限制和数字开头限制,连字符、空格、中文等特殊字符仍然不被允许:
-- 允许数字开头
CREATE SCHEMA `123`;
-- 允许使用关键字作为名称
CREATE SCHEMA `select`;
-- 列名使用中文(仅列名支持)
CREATE TABLE my_table(`中文列` STRING);
⚠️ 注意:反引号不能保留大小写。无论是表名还是列名,使用反引号创建的对象名仍然会被转为小写存储。例如
`MyTable`
`MyTable`
存储后为
mytable
mytable
。
建议只在必要时才使用反引号。
双引号标识符
开启
SET cz.sql.double.quoted.identifiers=true
SET cz.sql.double.quoted.identifiers=true
后,双引号作为标识符分隔符,兼容 SQL ANSI/ISO 标准行为。开启后需注意:
- 双引号不再表示字符串,
"hello"
"hello"
会被解析为标识符(列名/对象名)而非字符串值
- 使用双引号创建的关键字对象,引用时必须带双引号
-- 开启双引号标识符模式
SET cz.sql.double.quoted.identifiers=true;
-- 使用关键字作为 schema 名
CREATE SCHEMA "select";
-- 引用时必须带双引号
SELECT * FROM "select".my_table;
各个对象的命名规范
实例INSTANCE NAME
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 由系统生成,以字母(AZ、az)或下划线("_")开头。大写字符会转成小写。 |
| 长度限制 | 长度为3~28个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 无保留字 |
| 是否允许重复 | 用户lakehouse的唯一标示 |
WORKSPACE
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为3~28个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 保留字sys |
| 是否允许重复 | 在当前实例下不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 长度不能超过1024个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,允许中间有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
SCHEMA
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留字 information_schema、public |
| 是否允许重复 | 在当前 WORKSPACE 下不允许重复,不允许和 VOLUME 重名 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
TABLE
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 无 |
| 是否允许重复 | 在当前schema下不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
VIEW
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 无 |
| 是否允许重复 | 在当前schema下不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
VIRTUAL CLUSTER
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(”_”)开头。小写字符会转成大写(与其他对象相反) |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否允许重复 | 在当前workspace不重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
COLUMN
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(”_”)开头。大写字符会转成小写;使用反引号可支持特殊字符、中文、数字开头 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 常规标识符不支持;反引号标识符支持连字符、空格等特殊字符 |
| 是否支持中文 | 支持(需用反引号,如 `中文列`
`中文列` ) |
| 是否有保留字 | 有保留字 |
| 是否允许重复 | 在当前表中不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
VOLUME
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留字 |
| 是否允许重复 | 在当前workspace不重复,不允许和schema重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
FUNCTION
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写,避免和内建函数重复 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留字 |
| 是否允许重复 | 允许重复,根据传入的参数区分 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
ROLE
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留角色 |
| 是否允许重复 | 当前实例下不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
| ROLE_ALIAS | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 不区分 |
USER
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留字(如 USER) |
| 是否允许重复 | 当前 Account 下不允许重复 |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |
INDEX
| 约束 | 约束条件 |
|---|
| 名字规则 | 命名规则 | 以字母(AZ、az)或下划线(“_”)开头。大写字符会转成小写 |
| 长度限制 | 长度为最大1-256个字符 |
| 是否支持特殊字符 | 仅包含字母、下划线、十进制数字 (0-9) ,不允许有空格 |
| 是否支持中文 | 不支持 |
| 是否有保留字 | 有保留字 |
| 是否允许重复 | 当前 schema 下不允许重复;索引必须与所属表在同一 schema |
| COMMENT | 命名规则 | 以字母或中文开头 |
| 长度限制 | 1024字符 |
| 是否支持特殊字符 | 含字母、汉字、下划线、十进制数字 (0-9) ,允许有空格 |
| 是否支持中文 | 是 |
| 是否区分大小写 | 区分 |