@@ -3,15 +3,15 @@ title: 查询与转换
33slug : querying-stage
44---
55
6- Databend 通过其 ELT(提取、加载、转换)模型引入了数据处理的创新方法。该模型的一个重要方面是查询暂存文件中的数据 。
6+ Databend 通过其 ELT(提取、加载、转换)模型引入了数据处理的创新方法。该模型的一个重要方面是查询阶段文件中的数据 。
77
8- 您可以使用 ` SELECT ` 语句查询暂存文件中的数据。此功能适用于以下类型的暂存 :
8+ 您可以使用 ` SELECT ` 语句查询阶段文件中的数据。此功能适用于以下类型的阶段 :
99
10- - 用户暂存、内部暂存或外部暂存 。
10+ - 用户阶段、内部阶段或外部阶段 。
1111- 在您的对象存储中创建的存储桶或容器,例如 Amazon S3、Google Cloud Storage 和 Microsoft Azure。
1212- 可通过 HTTPS 访问的远程服务器。
1313
14- 此功能在加载数据之前或之后检查或查看暂存文件内容时特别有用 。
14+ 此功能在加载数据之前或之后检查或查看阶段文件内容时特别有用 。
1515
1616## 语法和参数
1717
@@ -22,12 +22,13 @@ FROM {@<stage_name>[/<path>] [<table_alias>] | '<uri>' [<table_alias>]}
2222 [< connection_parameters> ],
2323 [ PATTERN => ' <regex_pattern>' ],
2424 [ FILE_FORMAT => ' CSV | TSV | NDJSON | PARQUET | ORC | <custom_format_name>' ],
25- [ FILES => ( ' <file_name>' [ , ' <file_name>' ... ])]
25+ [ FILES => ( ' <file_name>' [ , ' <file_name>' ... ])],
26+ [ CASE_SENSITIVE => true | false ]
2627)]
2728```
2829
2930::: note
30- 当暂存路径包含空格或括号等特殊字符时 ,您可以将整个路径用单引号括起来,如下面的 SQL 语句所示:
31+ 当阶段路径包含空格或括号等特殊字符时 ,您可以将整个路径用单引号括起来,如下面的 SQL 语句所示:
3132
3233``` sql
3334SELECT * FROM ' s3://mybucket/dataset(databend)/' ...
@@ -47,13 +48,13 @@ CREATE FILE FORMAT my_custom_csv TYPE=CSV FIELD_DELIMITER='\t';
4748SELECT $1 FROM @my_stage/ file (FILE_FORMAT=> ' my_custom_csv' );
4849```
4950
50- 请注意,当您需要从暂存文件查询或执行 COPY INTO 操作时,必须在创建暂存时明确指定文件格式 。否则,将应用默认格式 Parquet。请参见以下示例:
51+ 请注意,当您需要从阶段文件查询或执行 COPY INTO 操作时,必须在创建阶段时明确指定文件格式 。否则,将应用默认格式 Parquet。请参见以下示例:
5152
5253``` sql
5354CREATE STAGE my_stage FILE_FORMAT = (TYPE = CSV);
5455```
5556
56- 在您以不同于指定暂存格式的格式暂存文件的情况下 ,您可以在 SELECT 或 COPY INTO 语句中明确指定文件格式。以下是示例:
57+ 在您以不同于指定阶段格式的格式阶段文件的情况下 ,您可以在 SELECT 或 COPY INTO 语句中明确指定文件格式。以下是示例:
5758
5859``` sql
5960SELECT $1 FROM @my_stage (FILE_FORMAT=> ' NDJSON' );
@@ -67,26 +68,49 @@ PATTERN 选项允许您指定一个基于 [PCRE2](https://www.pcre.org/current/d
6768
6869### FILES
6970
70- FILES 选项则允许您明确指定一个或多个用逗号分隔的文件名。此选项允许您直接过滤并查询文件夹中特定文件的数据。例如,如果您想从 Parquet 文件 "books-2023.parquet"、"books-2022.parquet" 和 "books-2021.parquet" 中查询数据,您可以在 FILES 选项中提供这些文件名。
71+ FILES 选项允许您明确指定一个或多个用逗号分隔的文件名。此选项允许您直接过滤和查询文件夹中特定文件的数据。例如,如果您想从 Parquet 文件 "books-2023.parquet"、"books-2022.parquet" 和 "books-2021.parquet" 中查询数据,您可以在 FILES 选项中提供这些文件名。
72+
73+ ### CASE_SENSITIVE
74+
75+ CASE_SENSITIVE 参数确定查询的 Parquet 文件中的列名是否区分大小写:
76+
77+ - ` CASE_SENSITIVE => false ` (默认):列名不区分大小写,即 ` b ` 和 ` B ` 被视为相同。
78+ - ` CASE_SENSITIVE => true ` :列名区分大小写,即只有完全匹配(包括大小写)才有效。例如,如果文件中的列名为 ` B ` ,则查询 ` B ` 将成功,但如果列名为 ` b ` ,则查询将失败。
79+
80+ 例如,如果您在 Parquet 文件中有一个名为 ` MinTemp ` 的列,当 ` CASE_SENSITIVE ` 设置为 ` false ` 时,您可以使用以下任一语句查询它:
81+
82+ ``` sql
83+ SELECT MinTemp FROM ' @mystage/weather.parquet' (CASE_SENSITIVE=> false);
84+
85+ SELECT MINTEMP FROM ' @mystage/weather.parquet' (CASE_SENSITIVE=> false);
86+
87+ SELECT mintemp FROM ' @mystage/weather.parquet' (CASE_SENSITIVE=> false);
88+ ```
89+
90+ 当 ` CASE_SENSITIVE ` 设置为 ` true ` 时,您必须使用文件中显示的完全列名:
91+
92+ ``` sql
93+ SELECT ` MinTemp` FROM ' @mystage/weather.parquet' (CASE_SENSITIVE=> true);
94+ ```
7195
7296### table_alias
7397
74- 在 SELECT 语句中处理暂存文件时 ,如果没有可用的表名,您可以为文件分配一个别名。这允许您将文件视为一个表 ,其字段作为表中的列。这在 SELECT 语句中处理多个表或选择特定列时非常有用。以下是一个示例:
98+ 在 SELECT 语句中处理阶段文件时 ,如果没有可用的表名,您可以为文件分配一个别名。这允许您将文件视为表 ,其字段作为表中的列。这在 SELECT 语句中处理多个表或选择特定列时非常有用。以下是一个示例:
7599
76100``` sql
77- -- 别名 't1' 代表暂存文件 ,而 't2' 是一个常规表
101+ -- 别名 't1' 表示阶段文件 ,而 't2' 是一个常规表
78102SELECT t1.$1 , t2.$2 FROM @my_stage t1, t2;
79103```
80104
81105### $col_position
82106
83- 在从暂存文件选择时 ,您可以使用列位置,这些位置从 1 开始。目前,使用列位置从暂存文件进行 SELECT 操作的功能仅限于 Parquet、NDJSON、CSV 和 TSV 格式。
107+ 在从阶段文件选择时 ,您可以使用列位置,这些位置从 1 开始。目前,使用列位置从阶段文件进行 SELECT 操作的功能仅限于 Parquet、NDJSON、CSV 和 TSV 格式。
84108
85109``` sql
86110SELECT $2 FROM @my_stage (FILES=> (' sample.csv' )) ORDER BY $1 ;
87111```
88112
89- 需要注意的是,在使用 NDJSON 时,只允许 $1,代表整行并具有 Variant 数据类型。要选择特定字段,请使用 ` $1:<field_name> ` 。
113+ 需要注意的是,在处理 NDJSON 时,仅允许 $1,表示整行并具有 Variant 数据类型。要选择特定字段,请使用 ` $1:<field_name> ` 。
90114
91115``` sql
92116-- 使用列位置选择整行:
@@ -96,7 +120,7 @@ SELECT $1 FROM @my_stage (FILE_FORMAT=>'NDJSON')
96120SELECT $1 :a FROM @my_stage (FILE_FORMAT=> ' NDJSON' )
97121```
98122
99- 在使用 COPY INTO 从暂存文件复制数据时 ,Databend 会将 NDJSON 文件顶层的字段名称与目标表中的列名称匹配 ,而不是依赖列位置。在下面的示例中,表 _ my_table_ 应具有与 NDJSON 文件顶层字段名称相同的列定义 :
123+ 在使用 COPY INTO 从阶段文件复制数据时 ,Databend 将 NDJSON 文件顶层的字段名与目标表中的列名匹配 ,而不是依赖列位置。在下面的示例中,表 _ my_table_ 应具有与 NDJSON 文件顶层字段名相同的列定义 :
100124
101125``` sql
102126COPY INTO my_table FROM (SELECT $1 SELECT @my_stage t) FILE_FORMAT = (type = NDJSON)
@@ -112,33 +136,33 @@ COPY INTO my_table FROM (SELECT $1 SELECT @my_stage t) FILE_FORMAT = (type = NDJ
112136
113137## 限制
114138
115- 在查询暂存文件时 ,以下限制适用于特定格式的约束:
139+ 在查询阶段文件时 ,以下限制适用于特定格式的约束:
116140
117141- 使用符号 \* 选择所有字段仅支持 Parquet 文件。
118142- 在从 CSV 或 TSV 文件选择时,所有字段都被解析为字符串,并且 SELECT 语句仅允许使用列位置。此外,文件中的字段数量有限制,不得超过 max.N+1000。例如,如果语句是 ` SELECT $1, $2 FROM @my_stage (FILES=>('sample.csv')) ` ,则 sample.csv 文件最多可以有 1,002 个字段。
119143
120144## 教程
121145
122- ### 教程 1:从暂存查询数据
146+ ### 教程 1:从阶段查询数据
123147
124148import Tabs from '@theme/Tabs ';
125149import TabItem from '@theme/TabItem ';
126150
127151此示例展示了如何查询存储在不同位置的 Parquet 文件中的数据。点击下面的标签查看详细信息。
128152
129153<Tabs groupId =" query2stage " >
130- <TabItem value =" Stages " label =" 暂存 " >
154+ <TabItem value =" Stages " label =" 阶段 " >
131155
132- 假设您有一个名为 [ books.parquet] ( https://datafuse-1253727613.cos.ap-hongkong.myqcloud.com/data/books.parquet ) 的示例文件,并且您已将其上传到用户暂存 、名为 _ my_internal_stage_ 的内部暂存和名为 _ my_external_stage_ 的外部暂存。要上传文件到暂存 ,请使用 [ PRESIGN] ( /sql/sql-commands/ddl/stage/presign ) 方法。
156+ 假设您有一个名为 [ books.parquet] ( https://datafuse-1253727613.cos.ap-hongkong.myqcloud.com/data/books.parquet ) 的示例文件,并且您已将其上传到用户阶段 、名为 _ my_internal_stage_ 的内部阶段和名为 _ my_external_stage_ 的外部阶段。要上传文件到阶段 ,请使用 [ PRESIGN] ( /sql/sql-commands/ddl/stage/presign ) 方法。
133157
134158``` sql
135- -- 查询用户暂存中的文件
159+ -- 查询用户阶段中的文件
136160SELECT * FROM @~/ books .parquet ;
137161
138- -- 查询内部暂存中的文件
162+ -- 查询内部阶段中的文件
139163SELECT * FROM @my_internal_stage/ books .parquet ;
140164
141- -- 查询外部暂存中的文件
165+ -- 查询外部阶段中的文件
142166SELECT * FROM @my_external_stage/ books .parquet ;
143167```
144168
0 commit comments