OceanBase && Oracle相关文档,希望互相学习,
共同进步
1.概述
OceanBase 支持外部表(External Table),可将外部数据(如 CSV 文件)映射为数据库表。这种方式可以通过 SQL 查询外部数据,也可以用于数据导入。
OceanBase 数据库中,创建外部表(External Table)是一种非常有用的功能,它允许用户在不移动数据的情况下,直接查询存储在其他系统中的数据。这对于数据仓库和数据湖解决方案尤其有用,因为它可以整合多种数据源,包括文件系统(如 HDFS、S3)、数据库等。
语法:
CREATE EXTERNAL TABLE <table_name>
( [ <column_name> <column_type> [AS <expr>] ]
, \
\ \[AS \ \] , ... \] ) **LOCATION** = '\
' **FORMAT** = ( TYPE = 'CSV' LINE_DELIMITER = '\ ' \| \ FIELD_DELIMITER = '\ ' \| \ ESCAPE = '\ ' \| \ FIELD_OPTIONALLY_ENCLOSED_BY = '\ ' \| \ ENCODING = 'charset' NULL_IF = ('\ ' \| \ , '\ ' \| \ ...) SKIP_HEADER = \ SKIP_BLANK_LINES = { TRUE \| FALSE } TRIM_SPACE = { TRUE \| FALSE } EMPTY_FIELD_AS_NULL = { TRUE \| FALSE } ) \[ **PATTERN**= '\ ' column_name 外表的列名称。默认下,文件的数据列、外表定义的列 是自动按顺序对应。column_type 定义外表的列类型,但不能定义约束(如,
DEFAULT、NOT NULL、UNIQUE、CHECK、PRIMARY KEY、FOREIGN KEY等)。as 用于手动指定列映射。当文件中的列顺序与外表的列所定义顺序不一致时,可以通过 metadata$filecol{
N}所表示的伪列来指定外表的列与文件中的第 N 列的对应关系。如,c2 INT AS (metadata$filecol4) 表示外表的
c2列对应文件中的第 4 列。注意:如果指定了手动列映射,则自动映射关系会失效,且所有列都需手动定义映射。
LOCATION 指定外表文件存放的路径。通常外表的数据文件存放于单独一个目录中,文件夹中可以包含子目录,在创建表时,外表会自动收集该目录中的所有文件。
本地 LOCATION 格式为 LOCATION = '[file://] local_file_path',其中local_file_path 可以为相对路径,也可以为绝对路径。如果是相对路径,则当前目录必须为 OceanBase 数据库的安装目录;secure_file_priv 配置 OBServer 节点有权限访问的文件路径。这里只能是 secure_file_priv 路径的子路径。
远程 LOCATION 格式:
LOCATION = '{oss\|cos}://ACCESS_ID:ACCESS_KEY@HOST/remote_file_path',其中 ACCESS_ID、ACCESS_KEY 和 HOST 是访问 OSS/COS 时需要配置的访问信息,这些敏感的访问信息 会以加密的方式存放在数据库的系统表中。
FORMAT指定外部文件的格式:
TYPE:指定外部文件的类型,当前仅支持 CSV 类型。
LINE_DELIMITER:指定 CSV 文件的行分隔符。
FIELD_DELIMITER:指定 CSV 文件的列分隔符。
ESCAPE:指定 CSV 文件的转义符号,只能为 1 个字节。
FIELD_OPTIONALLY_ENCLOSED_BY:指定 CSV 文件包裹字段值的符号。默认空。
ENCODING:指定文件的字符集编码格式,当前 Oracle 模式支持的所有字符集请参见 字符集。如果不指定,默认值为 UTF8MB4。
NULL_IF:指定被当作 NULL 处理的字符串。默认值为空。
SKIP_HEADER:跳过文件头,并指定跳过的行数。
SKIP_BLANK_LINES:指定是否跳过空白行。默认值为 FALSE,表示不跳过空白的行。
TRIM_SPACE:指定是否删除文件中字段的头部和尾部空格。默认值为 FALSE,表示不删除文件中字段头尾的空格。
EMPTY_FIELD_AS_NULL:指定是否将空字符串当作 NULL 处理。默认值为 FALSE,表示不将空字符串当做 NULL 处理。
PATTERN:正则模式串 ,过滤
LOCATION目录下的文件。对于每个LOCATION目录下的文件路径,如果能够匹配该模式串,外表会访问这个文件,否则外表会跳过这个文件。如果不指定该参数,则默认可以访问LOCATION目录下的所有文件。外表会将LOCATION指定路径下满足PATTERN的文件列表保存在数据库系统表中,外表扫描时会根据这个列表来访问外部的文件。文件列表可以有自动更新和手动更新两种方式。
2. 实验
2.1 准备外部表文件
sql
vim ext_table.dat
cat ext_table.dat
1,晓明
2,小花
3,小量
截图:

2.2 创建外部表
sql
CREATE EXTERNAL TABLE ext_table (
id INT,
nm VARCHAR(100)
)
LOCATION= '/home/oceanbase/test/'
FORMAT = (
TYPE = 'CSV'
FIELD_DELIMITER = ','
FIELD_OPTIONALLY_ENCLOSED_BY =''''
)PATTERN ='ext_table.dat';
--drop table ext_table
select * from ext_table;
截图:创建成功 ok

2.3 查询外部表
SELECT * FROM ext_table;

2.4 将数据插入内部表
sql
INSERT INTO your_table SELECT * FROM ext_table;
3.实验 空行、首行情况
3.1 准备外部文件
sql
vim ext_table_skip.dat
[oceanbase@appx-container test]$ cat ext_table_skip.dat
1,晓明
2,小花
3,小量
截图: 外部文件中多一些空行,中间、结尾等

3.2 创建外部表 测试
sql
CREATE EXTERNAL TABLE ext_table_skip (
id INT,
nm VARCHAR(100)
)
LOCATION= '/home/oceanbase/test/'
FORMAT = (
TYPE = 'CSV'
--SKIP_HEADER = 1
-- SKIP_BLANK_LINES = TRUE
FIELD_DELIMITER = ','
FIELD_OPTIONALLY_ENCLOSED_BY =''''
)PATTERN ='ext_table_skip.dat';
执行截图:

3.3 查询外部表
select * from ext_table_skip;
截图:发现空行都进入表中了。

3.4 加入参数控制 空行、表头,再次测试
sql
drop table ext_table_skip;
CREATE EXTERNAL TABLE ext_table_skip (
id INT,
nm VARCHAR(100)
)
LOCATION= '/home/oceanbase/test/'
FORMAT = (
TYPE = 'CSV'
SKIP_HEADER = 1
SKIP_BLANK_LINES = TRUE
FIELD_DELIMITER = ','
FIELD_OPTIONALLY_ENCLOSED_BY =''''
)PATTERN ='ext_table_skip.dat';
执行截图:

此时查询:发现空行排除,且跳过了文件头1行 ok

实验验证:ok 
OceanBase--相关知识
【OceanBase专栏】SECURE_FILE_PRIV 设置报错解决
项目管理--相关知识 
项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客
项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客
项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客
Oracle其他文档,希望互相学习,
共同进步
Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客
oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客
ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客