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;

  1. < 表达式> 字符串或十六进制串类型表达式,列分隔符只允许字符串类型;
  2. < 控制文件目录名> 指数据库对象目录的名称。
    图例

语句功能
供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:指明表名,创建外部表时,表名可以与此不同;
:指明同一行中各个列的分隔符;

  1. 数据文件中一行数据必须以回车结束;
  2. 外部表支持查询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.

目录
相关文章
|
5月前
|
SQL 机器学习/深度学习 自然语言处理
达梦(DM) SQL函数相关
讲述 DM 数据库函数
|
6月前
|
SQL 数据库
达梦(DM) SQL查询及联合查询
继续讲解达梦(DM)数据库SQL查询操作
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 内存表可选项 - unlogged table
标签 PostgreSQL , 内存表 , unlogged table 背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。
3093 0
|
4月前
|
存储 SQL 数据库
达梦(DM)数据库管理表
达梦(DM)数据库表管理
达梦(DM)数据库管理表
|
12月前
OushuDB-通过gpfdist外部表导出数据
OushuDB-通过gpfdist外部表导出数据
56 0
|
存储 NoSQL 数据库
DM8表空间管理
DM8表空间管理
|
索引
PolarDB-X 1.0-SQL 手册-DDL-RENAME TABLE
您可以使用RENAME TABLE语句对表名进行重命名,具体语法如下: RENAME TABLE tbl_name TO new_tbl_name
198 0
|
关系型数据库 Java 数据库
【DB吐槽大】,第31期 - PG 不支持分区索引
大家好,这里是DB吐槽大会,第31期 - PG 不支持分区索引
|
弹性计算 安全 关系型数据库
阿里云RDS PG 10 HA版 - 使用postgres_fdw外部表插件 - 实例内跨库访问其他库的表
标签 PostgreSQL , postgres_fdw , 阿里云 , 内核安全限制 背景 阿里云rds pg内核安全上做了限制,只能访问当前实例的其他库,所以使用dblink, postgres_fdw时,虽然PG功能上是可以访问其他远程实例的,但是阿里云RDS PG限制了只能访问当前实例。 另一方面,当前实例是HA版本,并且是云化版本,所以IP,PORT都可能在发生迁移、切换后发
578 0