From 53da3eeeea85b88516766480bd5c04d9a6e3cdbf Mon Sep 17 00:00:00 2001 From: q <787025321@qq.com> Date: Fri, 8 Aug 2025 10:02:24 +0800 Subject: [PATCH] fix: i18n --- .../04-transform/03-querying-orc.md | 105 ------- .../04-transform/04-querying-metadata.md | 27 -- .../04-transform/05-data-load-transform.md | 265 ------------------ .../51-ai-functions/02-built-in-functions.md | 65 ----- i18n/en/code.json | 4 + i18n/zh/code.json | 4 + src/theme/Logo/index.tsx | 5 +- 7 files changed, 12 insertions(+), 463 deletions(-) delete mode 100644 docs/cn/guides/40-load-data/04-transform/03-querying-orc.md delete mode 100644 docs/cn/guides/40-load-data/04-transform/04-querying-metadata.md delete mode 100644 docs/cn/guides/40-load-data/04-transform/05-data-load-transform.md delete mode 100644 docs/cn/guides/51-ai-functions/02-built-in-functions.md diff --git a/docs/cn/guides/40-load-data/04-transform/03-querying-orc.md b/docs/cn/guides/40-load-data/04-transform/03-querying-orc.md deleted file mode 100644 index 2602a78dc7..0000000000 --- a/docs/cn/guides/40-load-data/04-transform/03-querying-orc.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: 查询 Stage 中的 ORC 文件 -sidebar_label: ORC ---- -import StepsWrap from '@site/src/components/StepsWrap'; -import StepContent from '@site/src/components/Steps/step-content'; - -## 语法 - -```sql -SELECT [.] [, ...] -FROM {@[/] [] | '' []} -[( - [], - [ PATTERN => ''], - [ FILE_FORMAT => 'ORC | '], - [ FILES => ( '' [ , '' ] [ , ... ] ) ] -)] -``` - -:::info 提示 -ORC 文件包含 schema 信息,因此可以直接查询列 ` [, ...]`。 -::: - -## 教程 - -本教程将指导您完成下载 ORC 格式的 Iris 数据集、上传至 Amazon S3 存储桶、创建外部 stage 以及直接从 ORC 文件查询数据的过程。 - - - - -### 下载 Iris 数据集 - -从 https://github.com/tensorflow/io/raw/master/tests/test_orc/iris.orc 下载 iris 数据集,然后上传至您的 Amazon S3 存储桶。 - -该数据集包含 3 类各 50 个样本,每类代表一种鸢尾花植物。它有 4 个特征:(1) 花萼长度,(2) 花萼宽度,(3) 花瓣长度,(4) 花瓣宽度,最后一列是类别标签。 - - - - -### 创建外部 Stage - -在存储 iris 数据集文件的 Amazon S3 存储桶上创建外部 stage。 - -```sql -CREATE STAGE orc_query_stage - URL = 's3://databend-doc' - CONNECTION = ( - AWS_KEY_ID = '', - AWS_SECRET_KEY = '' - ); -``` - - - - -### 查询 ORC 文件 - -```sql -SELECT * -FROM @orc_query_stage -( - FILE_FORMAT => 'orc', - PATTERN => '.*[.]orc' -); - -┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ sepal_length │ sepal_width │ petal_length │ petal_width │ species │ -├───────────────────┼───────────────────┼───────────────────┼───────────────────┼──────────────────┤ -│ 5.1 │ 3.5 │ 1.4 │ 0.2 │ setosa │ -│ · │ · │ · │ · │ · │ -│ 5.9 │ 3 │ 5.1 │ 1.8 │ virginica │ -└──────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -您也可以直接查询远程 ORC 文件: - -```sql -SELECT - * -FROM - 'https://github.com/tensorflow/io/raw/master/tests/test_orc/iris.orc' (file_format => 'orc'); -``` - - - - -### 带元数据的查询 - -从 stage 直接查询 ORC 文件,包括 `METADATA$FILENAME` 和 `METADATA$FILE_ROW_NUMBER` 等元数据列: - -```sql -SELECT - METADATA$FILENAME, - METADATA$FILE_ROW_NUMBER, - * -FROM @orc_query_stage -( - FILE_FORMAT => 'orc', - PATTERN => '.*[.]orc' -); -``` - - - \ No newline at end of file diff --git a/docs/cn/guides/40-load-data/04-transform/04-querying-metadata.md b/docs/cn/guides/40-load-data/04-transform/04-querying-metadata.md deleted file mode 100644 index 264c9d12a6..0000000000 --- a/docs/cn/guides/40-load-data/04-transform/04-querying-metadata.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 处理文件与列元数据 -sidebar_label: 元数据 ---- - -以下是支持的文件格式可用的文件级元数据字段: - -| 文件元数据 | 类型 | 描述 | -| -------------------------- | ------- | ---------------------------------------- | -| `METADATA$FILENAME` | VARCHAR | 读取行数据的源文件名 | -| `METADATA$FILE_ROW_NUMBER` | INT | 文件内的行号(从0开始计数) | - -这些元数据字段可用于: - -- 对 Stage 的 SELECT 查询(例如 `SELECT FROM @stage`) -- `COPY INTO ` 语句 - -## 查询元数据详细指南 - -| 文件格式 | 指南 | -| ----------- |--------------------------------------------------------------------| -| Parquet | [使用元数据查询 Parquet 文件](./00-querying-parquet.md#query-with-metadata) | -| CSV | [使用元数据查询 CSV 文件](./01-querying-csv.md#query-with-metadata) | -| TSV | [使用元数据查询 TSV 文件](./02-querying-tsv.md#query-with-metadata) | -| NDJSON | [使用元数据查询 NDJSON 文件](./03-querying-ndjson.md#query-with-metadata) | -| ORC | [使用元数据查询 ORC 文件](./05-querying-orc.md#query-with-metadata) | -| Avro | [使用元数据查询 Avro 文件](./04-querying-avro.md#query-with-metadata) | \ No newline at end of file diff --git a/docs/cn/guides/40-load-data/04-transform/05-data-load-transform.md b/docs/cn/guides/40-load-data/04-transform/05-data-load-transform.md deleted file mode 100644 index 3d983d63c1..0000000000 --- a/docs/cn/guides/40-load-data/04-transform/05-data-load-transform.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: 加载时数据转换 ---- - -Databend 的 `COPY INTO` 命令支持在数据加载过程中进行转换操作。通过集成基础转换功能,简化了 ETL 流程,无需使用临时表。 - -带转换功能的 `COPY INTO` 通用语法如下: - -```sql -COPY INTO [.] [ ( [ , ... ] ) ] - FROM ( SELECT [ ... ] - FROM { userStage | internalStage | externalStage } ) -[ FILES = ( '' [ , '' ] [ , ... ] ) ] -[ PATTERN = '' ] -[ FILE_FORMAT = ( - FORMAT_NAME = '' - | TYPE = { CSV | TSV | NDJSON | PARQUET | ORC | Avro } [ formatTypeOptions ] - ) ] -[ copyOptions ] -``` - -更多细节请参阅 [COPY INTO](/sql/sql-commands/dml/dml-copy-into-table)。 - -可执行的关键转换操作包括: - -- **加载数据列子集**:选择性导入特定列 -- **列重排序**:在加载时调整列顺序 -- **数据类型转换**:确保一致性和兼容性 -- **执行算术运算**:生成衍生数据 -- **加载到含额外列的表中**:映射并插入数据到现有结构 - -## 操作教程 - -以下教程展示加载过程中的数据转换。每个示例均演示从暂存文件加载数据。 - -### 准备工作 - -创建 stage 并生成示例 Parquet 文件: - -```sql -CREATE STAGE my_parquet_stage; -COPY INTO @my_parquet_stage -FROM ( - SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, - 'Name_' || CAST(number AS VARCHAR) AS name, - 20 + MOD(number, 23) AS age, - DATE_ADD('day', MOD(number, 60), '2022-01-01') AS onboarded - FROM numbers(10) -) -FILE_FORMAT = (TYPE = PARQUET); -``` - -查询暂存的示例文件: - -```sql -SELECT * FROM @my_parquet_stage; -``` - -返回结果: - -``` -┌───────────────────────────────────────┐ -│ id │ name │ age │ onboarded │ -├────────┼────────┼────────┼────────────┤ -│ 1 │ Name_0 │ 20 │ 2022-01-01 │ -│ 2 │ Name_5 │ 25 │ 2022-01-06 │ -│ 3 │ Name_1 │ 21 │ 2022-01-02 │ -│ 4 │ Name_6 │ 26 │ 2022-01-07 │ -│ 5 │ Name_7 │ 27 │ 2022-01-08 │ -│ 6 │ Name_2 │ 22 │ 2022-01-03 │ -│ 7 │ Name_8 │ 28 │ 2022-01-09 │ -│ 8 │ Name_3 │ 23 │ 2022-01-04 │ -│ 9 │ Name_4 │ 24 │ 2022-01-05 │ -│ 10 │ Name_9 │ 29 │ 2022-01-10 │ -└───────────────────────────────────────┘ -``` - -### 教程 1 - 加载数据列子集 - -将数据加载到比源文件列数少的表中(例如排除 'age' 列)。 - -```sql -CREATE TABLE employees_no_age ( - id INT, - name VARCHAR, - onboarded timestamp -); - -COPY INTO employees_no_age -FROM ( - SELECT t.id, - t.name, - t.onboarded - FROM @my_parquet_stage t -) -FILE_FORMAT = (TYPE = PARQUET) -PATTERN = '.*parquet'; - -SELECT * FROM employees_no_age; -``` - -返回结果(前 3 行): - -``` -┌──────────────────────────────────────────────────────────┐ -│ id │ name │ onboarded │ -├─────────────────┼──────────────────┼─────────────────────┤ -│ 1 │ Name_0 │ 2022-01-01 00:00:00 │ -│ 2 │ Name_5 │ 2022-01-06 00:00:00 │ -│ 3 │ Name_1 │ 2022-01-02 00:00:00 │ -└──────────────────────────────────────────────────────────┘ -``` - -### 教程 2 - 加载时列重排序 - -将数据加载到列顺序不同的表中(例如 'age' 列置于 'name' 列前)。 - -```sql -CREATE TABLE employees_new_order ( - id INT, - age INT, - name VARCHAR, - onboarded timestamp -); - -COPY INTO employees_new_order -FROM ( - SELECT - t.id, - t.age, - t.name, - t.onboarded - FROM @my_parquet_stage t -) -FILE_FORMAT = (TYPE = PARQUET) -PATTERN = '.*parquet'; - -SELECT * FROM employees_new_order; -``` -返回结果(前 3 行): - -``` -┌────────────────────────────────────────────────────────────────────────────┐ -│ id │ age │ name │ onboarded │ -├─────────────────┼─────────────────┼──────────────────┼─────────────────────┤ -│ 1 │ 20 │ Name_0 │ 2022-01-01 00:00:00 │ -│ 2 │ 25 │ Name_5 │ 2022-01-06 00:00:00 │ -│ 3 │ 21 │ Name_1 │ 2022-01-02 00:00:00 │ -└────────────────────────────────────────────────────────────────────────────┘ -``` - -### 教程 3 - 加载时数据类型转换 - -加载数据并转换列数据类型(例如将 'onboarded' 转为 `DATE` 类型)。 - -```sql -CREATE TABLE employees_date ( - id INT, - name VARCHAR, - age INT, - onboarded date -); - -COPY INTO employees_date -FROM ( - SELECT - t.id, - t.name, - t.age, - to_date(t.onboarded) - FROM @my_parquet_stage t -) -FILE_FORMAT = (TYPE = PARQUET) -PATTERN = '.*parquet'; - -SELECT * FROM employees_date; -``` -返回结果(前 3 行): - -``` -┌───────────────────────────────────────────────────────────────────────┐ -│ id │ name │ age │ onboarded │ -├─────────────────┼──────────────────┼─────────────────┼────────────────┤ -│ 1 │ Name_0 │ 20 │ 2022-01-01 │ -│ 2 │ Name_5 │ 25 │ 2022-01-06 │ -│ 3 │ Name_1 │ 21 │ 2022-01-02 │ -└───────────────────────────────────────────────────────────────────────┘ -``` - -### 教程 4 - 加载时执行算术运算 - -加载数据并执行算术运算(例如将 'age' 列值加 1)。 - -```sql -CREATE TABLE employees_new_age ( - id INT, - name VARCHAR, - age INT, - onboarded timestamp -); - -COPY INTO employees_new_age -FROM ( - SELECT - t.id, - t.name, - t.age + 1, - t.onboarded - FROM @my_parquet_stage t -) -FILE_FORMAT = (TYPE = PARQUET) -PATTERN = '.*parquet'; - -SELECT * FROM employees_new_age; -``` -返回结果(前 3 行): - -``` -┌────────────────────────────────────────────────────────────────────────────┐ -│ id │ name │ age │ onboarded │ -├─────────────────┼──────────────────┼─────────────────┼─────────────────────┤ -│ 1 │ Name_0 │ 21 │ 2022-01-01 00:00:00 │ -│ 2 │ Name_5 │ 26 │ 2022-01-06 00:00:00 │ -│ 3 │ Name_1 │ 22 │ 2022-01-02 00:00:00 │ -└────────────────────────────────────────────────────────────────────────────┘ -``` - -### 教程 5 - 加载到含额外列的表中 - -将数据加载到比源文件列数多的表中。 - -```sql -CREATE TABLE employees_plus ( - id INT, - name VARCHAR, - age INT, - onboarded timestamp, - lastday timestamp -); - -COPY INTO employees_plus (id, name, age, onboarded) -FROM ( - SELECT - t.id, - t.name, - t.age, - t.onboarded - FROM @my_parquet_stage t -) -FILE_FORMAT = (TYPE = PARQUET) -PATTERN = '.*parquet'; - -SELECT * FROM employees_plus; -``` -返回结果(前 3 行): - -``` -┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ id │ name │ age │ onboarded │ lastday │ -├─────────────────┼──────────────────┼─────────────────┼─────────────────────┼─────────────────────┤ -│ 1 │ Name_0 │ 20 │ 2022-01-01 00:00:00 │ NULL │ -│ 2 │ Name_5 │ 25 │ 2022-01-06 00:00:00 │ NULL │ -│ 3 │ Name_1 │ 21 │ 2022-01-02 00:00:00 │ NULL │ -└──────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` \ No newline at end of file diff --git a/docs/cn/guides/51-ai-functions/02-built-in-functions.md b/docs/cn/guides/51-ai-functions/02-built-in-functions.md deleted file mode 100644 index a5498bffcd..0000000000 --- a/docs/cn/guides/51-ai-functions/02-built-in-functions.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: 内置 AI 函数 ---- - -import FunctionDescription from '@site/src/components/FunctionDescription'; - - - -# 内置 AI 函数 - -Databend 提供由 Azure OpenAI Service 支持的内置 AI 函数,可将 AI 能力无缝集成到 SQL 工作流中。 - -:::warning -**数据隐私声明**:使用内置 AI 函数时,您的数据将被发送到 Azure OpenAI Service。使用这些函数即表示您知晓此数据传输,并同意 [Azure OpenAI 数据隐私](https://learn.microsoft.com/en-us/legal/cognitive-services/openai/data-privacy) 条款。 -::: - -| 函数 | 描述 | 使用场景 | -|----------|-------------|-----------| -| [ai_text_completion](/sql/sql-functions/ai-functions/ai-text-completion) | 根据提示生成文本 | • 内容生成
• 问题解答
• 文本摘要 | -| [ai_embedding_vector](/sql/sql-functions/ai-functions/ai-embedding-vector) | 将文本转换为向量表示 | • 语义搜索
• 文档相似度
• 内容推荐 | -| [cosine_distance](/sql/sql-functions/vector-functions/vector-cosine-distance) | 计算向量间相似度 | • 查找相似文档
• 搜索结果排序 | - -## Databend 中的向量存储 - -Databend 使用 `VECTOR(1536)` 数据类型存储嵌入向量,支持在 SQL 中直接通过 `cosine_distance` 函数进行相似度计算。 - -## 示例:使用嵌入向量进行语义搜索 - -```sql --- 创建带嵌入向量的文档表 -CREATE TABLE articles ( - id INT, - title VARCHAR, - content VARCHAR, - embedding VECTOR(1536), - VECTOR INDEX idx_embedding(embedding) distance='cosine' -); - --- 存储文档及其向量嵌入 -INSERT INTO articles (id, title, content, embedding) -VALUES - (1, 'Python for Data Science', 'Python is a versatile programming language...', - ai_embedding_vector('Python is a versatile programming language...')), - (2, 'Introduction to R', 'R is a popular programming language for statistics...', - ai_embedding_vector('R is a popular programming language for statistics...')); - --- 查找语义相似的文档 -SELECT - id, title, - cosine_distance(embedding, ai_embedding_vector('How to use Python in data analysis?')) AS similarity -FROM articles -ORDER BY similarity ASC -LIMIT 3; -``` - -## 示例:文本生成 - -```sql --- 根据提示生成文本 -SELECT ai_text_completion('Explain the benefits of cloud data warehouses in three points:') AS completion; -``` - -## 快速入门 - -在 [Databend Cloud](https://databend.cn) 免费试用这些 AI 功能。 \ No newline at end of file diff --git a/i18n/en/code.json b/i18n/en/code.json index cbf0cef42d..30a8e5bbcf 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -804,5 +804,9 @@ "Copying...": { "message": "Copying...", "description": "Copying..." + }, + "DOCUMENTATION": { + "message": "DOCUMENTATION", + "description": "DOCUMENTATION" } } diff --git a/i18n/zh/code.json b/i18n/zh/code.json index 784e0e3318..b0cb76ac8d 100644 --- a/i18n/zh/code.json +++ b/i18n/zh/code.json @@ -828,5 +828,9 @@ "Copying...": { "message": "正在复制...", "description": "Copying..." + }, + "DOCUMENTATION": { + "message": "文档", + "description": "DOCUMENTATION" } } diff --git a/src/theme/Logo/index.tsx b/src/theme/Logo/index.tsx index 58f2d9a81d..ef04606b68 100644 --- a/src/theme/Logo/index.tsx +++ b/src/theme/Logo/index.tsx @@ -5,6 +5,7 @@ import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import { useThemeConfig, type NavbarLogo } from "@docusaurus/theme-common"; import ThemedImage from "@theme/ThemedImage"; import type { Props } from "@theme/Logo"; +import $t from "@site/src/utils/tools"; function LogoThemedImage({ logo, @@ -71,7 +72,9 @@ export default function Logo(props: Props): ReactNode { imageClassName={imageClassName} /> )} - {navbarTitle != null && DOCUMENTATION} + {navbarTitle != null && ( + {$t("DOCUMENTATION")} + )} ); }