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]
