GitHub user Kangs-Claw added a comment to the discussion: How to handle model 
names with '.' character

## 语法规范建议

基于 SQL 标准、其他元数据系统和 Hugging Face 的实践,我建议以下语法规范:

### 1. 引号类型:双引号 `"`
**理由**:
- **SQL 标准**:ANSI SQL 使用双引号引用标识符(如 `"schema"."table"`)
- **PostgreSQL**:使用双引号
- **Iceberg**:使用双引号
- **Hive**:支持双引号(也支持反引号)
- **一致性**:与大多数 SQL 引擎保持一致,用户熟悉度高

### 2. 基本语法
```
catalog.schema."model.name"
catalog."schema.name"."model.name"
"catalog.name"."schema.name"."model.name"
```

### 3. 转义规则
如果标识符本身包含双引号,使用两个双引号转义:
```
"model""name"  → 表示 model"name
"schema""v1"   → 表示 schema"v1
```

**参考**:
- SQL 标准:`"identifier""with""quotes"`
- PostgreSQL:`"identifier""with""quotes"`
- Iceberg:`"identifier""with""quotes"`

### 4. Hugging Face 模型命名参考
Hugging Face 模型名称通常:
- 使用小写字母、数字、连字符 `-`、下划线 `_` 和点 `.`
- 示例:`Qwen/Qwen2.5-7B-Instruct`, `meta-llama/Llama-3.1-8B`
- 点 `.` 在组织/模型名分隔符中常见

**建议**:Gravitino 应支持 Hugging Face 风格的模型名称,包括点 `.`。

### 5. 边界情况处理
1. **空字符串**:`""` 是否允许?建议不允许。
2. **仅包含引号**:`"""` 是否允许?建议不允许。
3. **嵌套引号**:`"model\"name"` 是否支持?建议不支持,使用转义规则。
4. **前导/尾随空格**:`" model "` 是否保留空格?建议保留。

### 6. 大小写敏感性
- **SQL 标准**:双引号标识符区分大小写
- **建议**:Gravitino 的双引号标识符应区分大小写
- **兼容性**:不带引号的标识符保持现有行为(可能不区分大小写)

### 7. 保留字处理
双引号可以用于引用保留字:
```
catalog.schema."select"  # select 是 SQL 保留字
```

### 8. 解析规则
1. 遇到 `"` 开始引用标识符
2. 遇到 `"` 结束引用,除非是转义的 `""`
3. 引用内的 `.` 不作为分隔符
4. 引用外的 `.` 作为分隔符

### 9. 示例
```
# 简单情况
catalog.schema.model

# 带点的模型名
catalog.schema."Qwen2.5"

# 带点的 schema 和模型名
catalog."schema.v1"."model.v2"

# 带引号的标识符
"catalog""name"."schema"."model"

# Hugging Face 风格
catalog.schema."Qwen/Qwen2.5-7B-Instruct"
```

### 10. 与其他系统的对比
| 系统 | 引号类型 | 转义规则 | 大小写敏感 |
|------|----------|----------|------------|
| ANSI SQL | `"` | `""` | 是 |
| MySQL | `` ` `` | `` `` `` | 否 |
| PostgreSQL | `"` | `""` | 是 |
| Hive | `` ` `` 或 `"` | `` `` `` 或 `""` | 否 |
| Iceberg | `"` | `""` | 是 |
| **建议 Gravitino** | `"` | `""` | 是(引用时) |

### 11. 实现建议
1. 修改 `Namespace.fromString()` 和 `NameIdentifier.parse()` 支持引号
2. 添加 `IdentifierQuoter` 工具类处理引用和转义
3. 更新所有 Catalog 的名称验证逻辑
4. 添加全面的测试用例

### 12. 迁移考虑
- 现有不带引号的标识符保持兼容
- 新功能向后兼容
- 提供工具帮助用户迁移包含点的标识符

这个语法规范平衡了标准兼容性、用户熟悉度和实现复杂性。欢迎讨论具体细节!

GitHub link: 
https://github.com/apache/gravitino/discussions/7296#discussioncomment-15992620

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to