1
1
---
2
- title : 在加载时转换数据
2
+ title : 加载时数据转换
3
3
---
4
4
5
- Databend 提供了一个强大的功能,允许在使用 [ COPY INTO] ( /sql/sql-commands/dml/dml-copy-into-table ) 命令加载过程中进行数据转换,语法如下 :
5
+ Databend 提供了一项强大的功能,允许在加载过程中使用 [ COPY INTO] ( /sql/sql-commands/dml/dml-copy-into-table ) 命令进行数据转换,其语法如下 :
6
6
7
7
``` sql
8
8
COPY INTO [< database_name> .]< table_name> [ ( < col_name> [ , < col_name> ... ] ) ]
@@ -12,42 +12,38 @@ COPY INTO [<database_name>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ]
12
12
[ PATTERN = ' <regex_pattern>' ]
13
13
[ FILE_FORMAT = (
14
14
FORMAT_NAME = ' <your-custom-format>'
15
- | TYPE = { CSV | TSV | NDJSON | PARQUET | XML } [ formatTypeOptions ]
15
+ | TYPE = { CSV | TSV | NDJSON | PARQUET | ORC } [ formatTypeOptions ]
16
16
) ]
17
17
[ copyOptions ]
18
18
```
19
19
20
- - _ COPY INTO 也支持其他语法选项 。更多详情,请查看 [ COPY INTO] ( /sql/sql-commands/dml/dml-copy-into-table ) _ 。
20
+ - _ COPY INTO 还支持其他语法选项 。更多详情,请参阅 [ COPY INTO] ( /sql/sql-commands/dml/dml-copy-into-table ) _ 。
21
21
22
- 这个功能简化了您的 ETL 流程,通过集成基本转换,消除了临时表的需要。通过在加载过程中转换数据,您可以有效地简化您的 ETL 流程。以下是使用此功能增强数据加载的实用方法 :
22
+ 此功能通过集成基本转换简化了 ETL 流程,无需临时表。通过在加载时转换数据,您可以有效地优化 ETL 过程。以下是使用此功能增强数据加载的几种实用方法 :
23
23
24
- - ** 加载数据列的子集** :允许您从数据集中选择性地导入特定列,专注于与您的分析或应用程序相关的数据。
25
-
26
- - ** 在加载时重新排序列** :使您能够在加载数据时更改列的顺序,确保所需的列排列,以更好地组织数据或符合特定要求。
27
-
28
- - ** 在加载时转换数据类型** :提供在数据加载过程中转换某些列的数据类型的能力,允许您确保与所需数据格式或分析技术的一致性和兼容性。
29
-
30
- - ** 在加载时执行算术运算** :允许您在数据加载时对特定列执行数学计算和操作,便于进行高级数据转换或生成新的派生数据。
31
-
32
- - ** 将数据加载到包含额外列的表中** :使您能够将数据加载到已包含额外列的表中,适应现有结构,同时高效地映射和插入数据到相应的列中。
24
+ - ** 加载数据集的子集列** :允许您有选择地从数据集中导入特定列,专注于与您的分析或应用相关的数据。
25
+ - ** 加载时重新排序列** :使您能够在加载数据时更改列的顺序,确保所需列的排列,以便更好地组织数据或满足特定要求。
26
+ - ** 加载时转换数据类型** :提供在数据加载过程中转换某些列数据类型的能力,允许您确保与所需数据格式或分析技术的兼容性和一致性。
27
+ - ** 加载时执行算术运算** :允许您在数据加载时对特定列执行数学计算和操作,促进高级数据转换或生成新的派生数据。
28
+ - ** 加载数据到具有额外列的表** :使您能够将数据加载到已包含额外列的表中,同时有效地映射和插入数据到相应的列,以适应现有结构。
33
29
34
30
## 教程
35
31
36
- 本节提供了几个简短的教程,提供了在加载数据时如何进行转换的实用指导。每个教程将通过两种方式引导您完成数据加载过程:直接从远程文件加载和从暂存文件加载 。请注意,这些教程彼此独立,您不需要按顺序完成它们。根据您的需要随意跟随 。
32
+ 本节提供了几个简短的教程,为如何在加载数据时进行数据转换提供实用指导。每个教程都将引导您通过两种方式进行数据加载:直接从远程文件加载和从已暂存的文件加载 。请注意,这些教程相互独立,您无需按顺序完成它们。根据您的需求自由跟随 。
37
33
38
34
### 开始之前
39
35
40
- 在开始之前,您需要创建一个 Stage 并生成一个示例文件;这里有一个 Parquet 文件作为示例 :
36
+ 在开始之前,您需要创建一个阶段并生成一个示例文件;这里以 Parquet 文件为例 :
41
37
42
38
``` sql
43
39
CREATE STAGE my_parquet_stage;
44
40
COPY INTO @my_parquet_stage
45
41
FROM (
46
- SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL )) AS id, -- 生成一个顺序 id
47
- ' Name_' || CAST(number AS VARCHAR ) AS name, -- 为每行生成一个唯一名称
48
- 20 + MOD(number , 23 ) AS age, -- 生成 20 到 42 之间的年龄
42
+ SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL )) AS id, -- 生成顺序 id
43
+ ' Name_' || CAST(number AS VARCHAR ) AS name, -- 为每行生成唯一名称
44
+ 20 + MOD(number , 23 ) AS age, -- 生成年龄,范围在 20 到 42 之间
49
45
DATE_ADD(' day' , MOD(number , 60 ), ' 2022-01-01' ) AS onboarded -- 从 2022-01-01 开始生成入职日期
50
- FROM numbers(10 ) -- 生成 10 行
46
+ FROM numbers(10 ) -- 生成 10 行数据
51
47
)
52
48
FILE_FORMAT = (TYPE = PARQUET);
53
49
```
@@ -79,9 +75,9 @@ SELECT * FROM @my_parquet_stage;
79
75
80
76
### 教程 1 - 加载数据列的子集
81
77
82
- 在本教程中,您将创建一个比示例文件中列数少的表,然后用从示例文件中提取的相应数据填充它 。
78
+ 在本教程中,您将创建一个列数少于示例文件的表,然后从示例文件中提取相应数据填充该表 。
83
79
84
- 1 . 创建一个没有 'age' 列的表。
80
+ 1 . 创建一个不包含 'age' 列的表。
85
81
86
82
``` sql
87
83
CREATE TABLE employees_no_age (
@@ -91,7 +87,7 @@ CREATE TABLE employees_no_age (
91
87
);
92
88
```
93
89
94
- 2 . 从暂存的示例文件中加载数据,除了 'age' 列。
90
+ 2 . 从暂存的示例文件中加载数据,排除 'age' 列。
95
91
96
92
``` sql
97
93
-- 从暂存文件加载
@@ -112,9 +108,7 @@ PATTERN = '.*parquet';
112
108
SELECT * FROM employees_no_age;
113
109
```
114
110
115
- ```
116
111
结果:
117
- ```
118
112
119
113
```
120
114
┌──────────────────────────────────────────────────────────┐
@@ -135,9 +129,9 @@ SELECT * FROM employees_no_age;
135
129
136
130
### 教程 2 - 加载时重新排序列
137
131
138
- 在本教程中,您将创建一个表,该表具有与样本文件相同的列,但顺序不同,然后用从样本文件中提取的相应数据填充它 。
132
+ 在本教程中,您将创建一个与示例文件具有相同列但顺序不同的表,然后从示例文件中提取相应数据填充该表 。
139
133
140
- 1 . 创建一个表,其中 'name' 和 'age' 列的顺序互换 。
134
+ 1 . 创建一个 'name' 和 'age' 列交换位置的表 。
141
135
142
136
``` sql
143
137
CREATE TABLE employees_new_order (
@@ -148,10 +142,10 @@ CREATE TABLE employees_new_order (
148
142
);
149
143
```
150
144
151
- 2 . 从 Stage 样本文件中加载数据到新顺序中 。
145
+ 2 . 从暂存的示例文件中按新顺序加载数据 。
152
146
153
147
``` sql
154
- -- Load from staged file
148
+ -- 从暂存文件加载
155
149
COPY INTO employees_new_order
156
150
FROM (
157
151
SELECT
@@ -192,9 +186,9 @@ SELECT * FROM employees_new_order;
192
186
193
187
### 教程 3 - 加载时转换数据类型
194
188
195
- 在本教程中,您将创建一个表,该表具有与样本文件相同的列,除了一个将具有不同的数据类型,然后用从样本文件中提取并转换的数据填充它 。
189
+ 在本教程中,您将创建一个与示例文件具有相同列的表,但其中一列将具有不同的数据类型,然后从示例文件中提取并转换数据填充该表 。
196
190
197
- 1 . 创建一个表,其中 'onboarded' 列的类型为 Date。
191
+ 1 . 创建一个 'onboarded' 列类型为 Date 的表 。
198
192
199
193
``` sql
200
194
CREATE TABLE employees_date (
@@ -205,10 +199,10 @@ CREATE TABLE employees_date (
205
199
);
206
200
```
207
201
208
- 2 . 从 Stage 样本文件中加载数据 ,并将 'onboarded' 列转换为 Date 类型。
202
+ 2 . 从暂存的示例文件中加载数据 ,并将 'onboarded' 列转换为 Date 类型。
209
203
210
204
``` sql
211
- -- Load from staged file
205
+ -- 从暂存文件加载
212
206
COPY INTO employees_date
213
207
FROM (
214
208
SELECT
@@ -228,7 +222,7 @@ PATTERN = '.*parquet';
228
222
SELECT * FROM employees_date;
229
223
```
230
224
231
- 结果:
225
+ 结果:
232
226
233
227
```
234
228
┌───────────────────────────────────────────────────────────────────────┐
@@ -250,9 +244,9 @@ SELECT * FROM employees_date;
250
244
251
245
### 教程 4 - 在加载过程中执行算术运算
252
246
253
- 在本教程中,您将创建一个与样本文件具有相同列的表 。然后,您将从样本文件中提取和转换数据 ,对提取的数据执行算术运算,并用结果填充表格 。
247
+ 在本教程中,您将创建一个与示例文件具有相同列的表 。然后,您将从示例文件中提取并转换数据 ,对提取的数据执行算术运算,并将结果填充到表中 。
254
248
255
- 1 . 创建一个包含与样本文件完全相同的列的表 :
249
+ 1 . 创建一个与示例文件具有完全相同列的表 :
256
250
257
251
``` sql
258
252
CREATE TABLE employees_new_age (
@@ -263,7 +257,7 @@ CREATE TABLE employees_new_age (
263
257
);
264
258
```
265
259
266
- 2 . 从暂存的样本文件中加载数据,并在插入目标表之前对 'age' 列的值执行算术运算以增加其值 :
260
+ 2 . 从暂存的示例文件加载数据,并在将 'age'列的值插入目标表之前,对其执行算术运算(加 1) :
267
261
268
262
``` sql
269
263
-- 从暂存文件加载
@@ -286,7 +280,7 @@ PATTERN = '.*parquet';
286
280
SELECT * FROM employees_new_age
287
281
```
288
282
289
- 结果:
283
+ 结果:
290
284
291
285
```
292
286
┌────────────────────────────────────────────────────────────────────────────┐
@@ -306,11 +300,11 @@ SELECT * FROM employees_new_age
306
300
└────────────────────────────────────────────────────────────────────────────┘
307
301
```
308
302
309
- ### 教程 5 - 加载到包含额外列的表中
303
+ ### 教程 5 - 加载到具有额外列的表中
310
304
311
- 在本教程中,您将创建一个与样本文件相比包含额外列的新表 。然后,您将从样本文件中提取数据,并最终将转换后的数据填充到新表中 。
305
+ 在本教程中,您将创建一个包含比示例文件更多列的新表 。然后,您将从示例文件中提取数据,并将转换后的数据填充到新表中 。
312
306
313
- 1 . 创建一个包含比样本文件更多列的表 :
307
+ 1 . 创建一个包含比示例文件更多列的表 :
314
308
315
309
``` sql
316
310
CREATE TABLE employees_plus (
@@ -322,7 +316,7 @@ CREATE TABLE employees_plus (
322
316
);
323
317
```
324
318
325
- 2 . 从暂存的样本文件中加载数据 :
319
+ 2 . 从暂存的示例文件加载数据 :
326
320
327
321
``` sql
328
322
-- 从暂存文件加载
0 commit comments