共计 4006 个字符,预计需要花费 11 分钟才能阅读完成。
本篇内容主要讲解“DM7 外部表怎么指定”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“DM7 外部表怎么指定”吧!
DM7 外部表
需指定如下信息:
1. 表名、表所属的模式名;
2. 列定义;
3. 控制文件路径。
语法格式
CREATE EXTERNAL TABLE 表名定义 表结构定义
表名定义 ::=[模式名 .] 表名
表结构定义 ::= (列定义 {, 列定义})
列定义 ::= 列名 数据类型
FROM 子句 = FROM 子句 1 | FROM 子句 2 | FROM 子句 3 | FROM 子句 4
FROM 子句 1 ::= FROM 控制文件路径
FROM 子句 2 ::= FROM DATAFILE 数据文件路径 [数据文件参数列表]
FROM 子句 3 ::= FROM 控制文件目录 控制文件选项
FROM 子句 4 ::= FROM DATAFILE 数据文件目录 数据文件选项 [数据文件参数列表]
数据文件参数列表 ::= PARMS(参数选项 {, 参数选项})
参数选项::= [FIELDS DELIMITED BY 表达式] | [RECORDS DELIMITED BY 表达式]|[ERRORS]|[BADFILE 数据文件路径]| |[LOG 日志文件路径 ]|[NULL_STR ]|[SKIP 跳过行数 ]|[CHARACTER_CODE 文件字符集 ]
控制文件目录 ::= DEFAULT DIRECTORY 控制文件目录名
控制文件选项 ::= LOCATION (控制文件名)
数据文件目录 ::= DEFAULT DIRECTORY 数据文件目录名
数据文件选项 ::= LOCATION (数据文件名)
参数
1. 模式名 指明该表属于哪个模式,缺省为当前模式;
2. 表名 指明被创建的外部基表名;
3. 列名 指明基表中的列名;
4. 数据类型 指明列的数据类型,暂不支持多媒体类型;
5. 控制文件路径 指明使用的控制文件的路径的字符串;
6. 数据文件路径 指明使用的数据文件路径的字符串;
7. 参数选项 FIELDS 表示列分隔符;RECORDS 表示行分隔符;ERRORS 表示忽略外部表数据转换中出现错误的行数,取值范围为大于 0 的正整
数,缺省为 0,表示不忽略错误。此处 ERRORS 和控制文件中的 ERRORS 写一个就行,如果都写,以控制文件中的为主;LOG 表示日志文件路径,
默认日志文件名为 fldr.log;NULL_STR 指定数据文件中 NULL 值的表示字符串,默认忽略此参数;SKIP 指定跳过数据文件起始的逻辑行数,默
认为 0;CHARACTER_CODE 指定数据文件中数据的编码格式,默认为 GBK,可选项有 GBK,UTF-8,SINGLE_BYTE 和 EUC-KR;
8. 表达式 字符串或十六进制串类型表达式,列分隔符只允许字符串类型;
9. 控制文件目录名 指数据库对象目录的名称。
图例
语句功能
供 DBA 或具有 CREATE_TABLE 权限的用户定义外部基表。MPP 环境下不支持创建外部表。
使用说明
1. 表名 指定了所要建立的外部基表名。如果 模式名 缺省,则缺省为当前模式。表名需要是合法的标识符。且满足 SQL 语法要求;
2. 外部表的表名最大长度为 128 个字符;
3. 所建外部基表至少要包含一个 列名 指定的列,在一个外部基表中,各 列名 不得相同。一张外部基表中至多可以包含 2048 列;
4. 外部基表不能存在大字段列;
5. 外部基表不能存在任何约束条件;
6. 外部基表不能为临时表,不能建立分区;
7. 外部基表上不能建立任何索引;
8. 外部基表是只读的,不存在表锁,不允许任何针对外部表的增删改数据操作,不允许 truncate 外部表操作;
9. 控制文件路径,以及数据文件路径建议采用绝对路径;
10. 控制文件的格式为:
[OPTIONS(
errors=
LOAD [DATA]
INFILE [LIST] |
INTO TABLE tablename
FIELDS
其中:
OPTIONS 选项:可选部分,目前 OPTIONS 中仅支持 errors 选项,用于指定忽略数据转换出现错误的行数;此处 errors 和 参数选项 中的 errors 写一个就行,如果都写,以此处控制文件中的为主。
:指明使用的数据文件列表;
tablename:指明表名,创建外部表时,表名可以与此不同;
:指明同一行中各个列的分隔符;
11. 数据文件中一行数据必须以回车结束;
12. 外部表支持查询 ROWID、USER 和 UID 伪列,不支持查询 TRXID 伪列。
举例说明
例 1 指定操作系统的一个文本文件作为数据文件,编写控制文件及建表语句。数据文件(/home/dmdba/data.txt),数据如下:
a|abc|varchar_data|12.34|12.34|12.34|12.34|0|1|1|1234|1234|1234|100|11|1234|1|1|14.2|12.1|12.1|1999-10-01|9:10:21|2002-12-12|15
控制文件(/home/dmdba/ctrl.txt)如下:
load data
infile /home/dmdba/data.txt
into table ext
fields |
建表:
SQL create external table ext (2 l_char char(1),
3 l_character character(3),
4 l_varchar varchar(20),
5 l_numeric numeric(6,2),
6 l_decimal decimal(6,2),
7 l_dec dec(6,2),
8 l_money decimal(19,4),
9 l_bit bit,
10 l_bool bit,
11 l_boolean bit,
12 l_integer integer,
13 l_int int,
14 l_bigint bigint,
15 l_tinyint tinyint,
16 l_byte byte,
17 l_smallint smallint,
18 l_binary binary,
19 l_varbinary varbinary,
20 l_float float,
21 l_double double,
22 l_real real,
23 l_date date,
24 l_time time,
25 l_timestamp timestamp,
26 l_interval interval year
27 )from /home/dmdba/ctrl.txt
executed successfully
used time: 62.123(ms). Execute id is 312.
系统执行建表语句后,就在数据库中建立了相应的外部基表。查询 ext 表:
SQL select * from ext;
LINEID L_CHAR L_CHARACTER L_VARCHAR L_NUMERIC L_DECIMAL L_DEC L_MONEY L_BIT L_BOOL L_BOOLEAN L_INTEGER L_INT L_BIGINT L_TINYINT L_BYTE L_SMALLINT L_BINARY L_VARBINARY L_FLOAT L_DOUBLE L_REAL L_DATE L_TIME L_TIMESTAMP L_INTERVAL
---------- ------ ----------- ------------ --------- --------- ----- ------- ----- ------ --------- ----------- ----------- -------------------- ----------- ----------- ----------- -------- ----------- ------------------------- ------------------------- ------------------ ---------- --------------- --------------------------- ---------------------
1 a abc varchar_data 12.34 12.34 12.34 12.3400 0 1 1 1234 1234 1234 100 11 1234 0x01 0x01 1.420000000000000E+01 1.210000000000000E+01 1.2100000E+01 1999-10-01 09:10:21 2002-12-12 00:00:00.000000 INTERVAL 15 YEAR(2)
used time: 7.248(ms). Execute id is 314.
例 2 指定操作系统的一个文本文件作为数据文件(/home/dmdba/data1.txt),数据如下:
10|9|7
4|3|2
建表:
SQL create external table ext_2(c1 int,c2 int,c3 int) from datafile /home/dmdba/data1.txt parms(fields delimited by |
executed successfully
used time: 11.008(ms). Execute id is 331.
查询结果:
SQL select * from ext_2;
LINEID C1 C2 C3
---------- ----------- ----------- -----------
1 10 9 7
2 4 3 2
used time: 8.222(ms). Execute id is 332.
到此,相信大家对“DM7 外部表怎么指定”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!