一. 外部表管理
外部表,数据来源于外部操作系统,一个文本文件。建立外部表的时候,不会产生段,
页簇等存储结构,只有与表相关的定义放在数据字典中。(内部表的数据都保存在表空间
中。)
外部基表是只读的,不允许增删改,不允许 TRUNCATE;
用户创建外部表必须具有指定目录的读写权限(因为外部表查询时会在目录下生成日志
文件)。
二. 权限赋予
grant CREATE ANY directory to dmtest;
create directory dir_data as '/dm8/backup/data';
grant read, write on directory dir_data to dmtest;
三. 外部表创建
两种方式:1.基于控制文件,2.基于数据文件
方式一、指定数据文件创建外部表
CREATE EXTERNAL TABLE t_extemp (
"EMPLOYEE_ID" INT,
"EMPLOYEE_NAME" VARCHAR(20),
"IDENTITY_CARD" VARCHAR(18),
"EMAIL" VARCHAR(50),
"PHONE_NUM" VARCHAR(20),
"HIRE_DATE" DATE,
"JOB_ID" VARCHAR(10),
"SALARY" INT,
"COMMISSION_PCT" INT,
"MANAGER_ID" INT,
"DEPARTMENT_ID" INT
)
FROM DATAFILE DEFAULT DIRECTORY DIR_DATA LOCATION ('DMHR_EMPLOYEE.txt')
PARMS (
FIELDS DELIMITED BY '|',
RECORDS 0x0a,
SKIP 1,
CHARACTER_CODE 'UTF-8'
);
说明:
● DEFAULT DIRECTORY DIR_DATA:表示你之前创建的目录对象 DIR_DATA
● LOCATION ('DMHR_EMPLOYEE.txt'):指定具体的外部数据文件名
● FIELDS DELIMITED BY '|':字段之间以 | 分隔。
● RECORDS 0x0a:每行以换行符(ASCII 十进制 10)分隔,即 \n。
windows写法:0x0a
linux写法:0a
● SKIP 1:跳过文件第一行(通常用于跳过表头)。
● CHARACTER_CODE 'UTF-8':指定文件编码为 UTF-8。
方式二 基于控制文件创建外部表
create EXTERNAL TABLE t_extdept (
"DEPARTMENT_ID" INT,
"DEPARTMENT_NAME" VARCHAR(30),
"MANAGER_ID" INT,
"LOCATION_ID" INT )
from DEFAULT DIRECTORY DIR_DATA LOCATION ('dept.ctl') ;
控制文件:dept.ctl
options
(skip=1
errors=10
log='t_extdept.log'
character_code='UTF-8')
load data
infile 'DMHR_DEPARTMENT.txt' str X '0a'
badfile 't_extdept.bad'
into table t_extdept
fields '|'
说明:
● options: 定义了跳过行数、错误处理、日志文件和字符编码。
● SKIP 1: 跳过第一行(标题)
● ERRORS 10 -- 最大允许的错误数
● load data: 指定加载数据。
● infile: 指定了要加载的数据文件及其行结束符(在这个例子中使用的是 Windows 格式的换行符 0d0a)。
● badfile: 指定了错误记录的日志文件。
● into table: 目标表名。
● fields: 字段分隔符
三. 图形化操作
四. 注意
外部表定义中不支持使用封闭符,所以数据文件定义时字符串不建议有单引号或双引号等封
闭符
文章
阅读量
获赞