如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表

在日常的业务场景中,经常遇到需要在数据库中处理外部数据的情况,这些数据可能来源于应用程序,或者是其他业务系统。一般来说,常是通过ETL工具将外部数据库的数据导入到数据库内部的表中,再进行分析处理。而通过外部表,则可以直接访问外部文件,并读取外部数据文件进行处理,这样做有几个好处:

  • 可以减少数据的拷贝,节省数据库存储空间。
  • 提高数据的共享,避免数据出现不一致的情况。
  • 删除外表时,原库的数据不会被删除。

此外,外部表相比普通表具有更丰富的功能:

  • 支持多种存储方式:例如数据文件可以放在不同云服务的对象存储服务中。
  • 支持多种存储格式:例如CSV格式。

需要额外说明的是,外表不支持DML。

外表的用法示例

步骤1: 准备外部表数据

我们在阿里云的对象存储OSS中存放了TPCH 1G的数据,其中lineitem的表的数据分成了10个文件放在mydata/tpch_1g_data/lineitem中

object list is:
71.96MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.1 
72.63MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.10 
72.10MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.2 
72.57MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.3 
72.51MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.4 
72.57MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.5 
72.72MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.6 
72.48MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.7 
72.60MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.8 
72.53MB Standard oss://mydata/tpch_1g_data/lineitem/lineitem.tbl.9 

步骤2: 创建外表

外表的用法和普通表非常相似,比普通表多了 LOCATION 和 FORMAT 属性。其中 LOCATION 用于指定数据文件所在位置,FORMAT 指定数据文件的格式。

CREATE EXTERNAL TABLE lineitem
(
	L_ORDERKEY     int,
  L_PARTKEY      int,
  L_SUPPKEY      int,
  L_LINENUMBER   int,
  L_QUANTITY     DECIMAL(15,2),
  L_EXTENDEDPRICE  DECIMAL(15,2),
  L_DISCOUNT     DECIMAL(15,2),
  L_TAX          DECIMAL(15,2),
  L_RETURNFLAG   CHAR(1),
  L_LINESTATUS   CHAR(1),
  L_SHIPDATE     DATE,
  L_COMMITDATE   DATE,
  L_RECEIPTDATE  DATE,
  L_SHIPINSTRUCT CHAR(25),
  L_SHIPMODE     CHAR(10),
  L_COMMENT      VARCHAR(44)
)
LOCATION = 'oss://$ACCESS_ID:$ACCESS_KEY@$HOST/tpch_1g_data/lineitem/'
FORMAT = (
  TYPE = 'CSV'
	FIELD_DELIMITER = '|'
);

如果文件中的列顺序和表中的列顺序不一致,可以通过通过metadata$filecolN 伪列进行对应,具体可以参考 用户文档

步骤3: 查看外表的文件

外表创建时,会将LOCATION下的文件列表保存在一个文件列表中,外表扫描时只会访问这个列表下的外部文件。

通过以下语句可以查看外表的文件列表

select * from DBA_EXTERNAL_TABLE_FILES where table_name = 'lineitem';

当外部数据文件有变化时,可以执行以下语句更新外表的文件列表

alter external table lineitem refresh;

如果文件被删除且未更新文件列表,外表查询时会自动忽略这个文件。

步骤4: 查询外表

外表查询时,通过外表的驱动层直接读取外部文件,并按照文件格式进行解析,转换成OceanBase内部的数据类型后返回数据行。

obclient>select * from lineitem limit 10;
+------------+-----------+-----------+--------------+------------+-----------------+------------+-------+--------------+--------------+------------+--------------+---------------+-------------------+------------+-------------------------------------+
| L_ORDERKEY | L_PARTKEY | L_SUPPKEY | L_LINENUMBER | L_QUANTITY | L_EXTENDEDPRICE | L_DISCOUNT | L_TAX | L_RETURNFLAG | L_LINESTATUS | L_SHIPDATE | L_COMMITDATE | L_RECEIPTDATE | L_SHIPINSTRUCT    | L_SHIPMODE | L_COMMENT                           |
+------------+-----------+-----------+--------------+------------+-----------------+------------+-------+--------------+--------------+------------+--------------+---------------+-------------------+------------+-------------------------------------+
|          1 |    155190 |      7706 |            1 |      17.00 |        21168.23 |       0.04 |  0.02 | N            | O            | 1996-03-13 | 1996-02-12   | 1996-03-22    | DELIVER IN PERSON | TRUCK      | egular courts above the             |
|          1 |     67310 |      7311 |            2 |      36.00 |        45983.16 |       0.09 |  0.06 | N            | O            | 1996-04-12 | 1996-02-28   | 1996-04-20    | TAKE BACK RETURN  | MAIL       | ly final dependencies: slyly bold   |
|          1 |     63700 |      3701 |            3 |       8.00 |        13309.60 |       0.10 |  0.02 | N            | O            | 1996-01-29 | 1996-03-05   | 1996-01-31    | TAKE BACK RETURN  | REG AIR    | riously. regular, express dep       |
|          1 |      2132 |      4633 |            4 |      28.00 |        28955.64 |       0.09 |  0.06 | N            | O            | 1996-04-21 | 1996-03-30   | 1996-05-16    | NONE              | AIR        | lites. fluffily even de             |
|          1 |     24027 |      1534 |            5 |      24.00 |        22824.48 |       0.10 |  0.04 | N            | O            | 1996-03-30 | 1996-03-14   | 1996-04-01    | NONE              | FOB        |  pending foxes. slyly re            |
|          1 |     15635 |       638 |            6 |      32.00 |        49620.16 |       0.07 |  0.02 | N            | O            | 1996-01-30 | 1996-02-07   | 1996-02-03    | DELIVER IN PERSON | MAIL       | arefully slyly ex                   |
|          2 |    106170 |      1191 |            1 |      38.00 |        44694.46 |       0.00 |  0.05 | N            | O            | 1997-01-28 | 1997-01-14   | 1997-02-02    | TAKE BACK RETURN  | RAIL       | ven requests. deposits breach a     |
|          3 |      4297 |      1798 |            1 |      45.00 |        54058.05 |       0.06 |  0.00 | R            | F            | 1994-02-02 | 1994-01-04   | 1994-02-23    | NONE              | AIR        | ongside of the furiously brave acco |
|          3 |     19036 |      6540 |            2 |      49.00 |        46796.47 |       0.10 |  0.00 | R            | F            | 1993-11-09 | 1993-12-20   | 1993-11-24    | TAKE BACK RETURN  | RAIL       |  unusual accounts. eve              |
|          3 |    128449 |      3474 |            3 |      27.00 |        39890.88 |       0.06 |  0.07 | A            | F            | 1994-01-16 | 1993-11-22   | 1994-01-23    | DELIVER IN PERSON | SHIP       | nal foxes wake.                     |
+------------+-----------+-----------+--------------+------------+-----------------+------------+-------+--------------+--------------+------------+--------------+---------------+-------------------+------------+-------------------------------------+
10 rows in set

性能测试示例

下面我们对外表进行简单的性能测试,以本地文件场景和CSS文件场景为例,测试环境如下:

  • CPU Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz 
  • DATA:TPCH 1G 的文本文件,文件格式CSV,每个表的数据拆成10个文件
  • 兼容模式:Oracle
  • OB版本 4.2

场景1:本地文件场景

串行扫描

obclient>select count(*) from LINEITEM;
+----------+
| COUNT(*) |
+----------+
|  6001215 |
+----------+
1 row in set (7.987 sec)

并行扫描

obclient>select /*+ parallel(10) */ count(*) from LINEITEM;
+----------+
| COUNT(*) |
+----------+
|  6001215 |
+----------+
1 row in set (2.035 sec)
场景2: OSS文件

串行扫描

obclient>select count(*) from LINEITEM;
+----------+
| COUNT(*) |
+----------+
|  6001215 |
+----------+
1 row in set (1 min 24.247 sec)

并行扫描

obclient>select /*+ parallel(10) */ count(*) from LINEITEM;
+----------+
| COUNT(*) |
+----------+
|  6001215 |
+----------+
1 row in set (8.790 sec)

其他复杂SQL的场景示例

示例1

外表可以像普通表一样与其他表进行链接,谓词过滤,聚合,排序等操作。

外表可以通过parallel hint开启并行查询。

下面例子中,customer/orders/lineitem 均为外表。

obclient> SELECT * FROM
    (SELECT /*+ parallel(10) */
           l_orderkey,
           o_orderdate,
           o_shippriority,
           sum(l_extendedprice * (1 - l_discount)) AS revenue
        FROM customer,
             orders,
             lineitem
        WHERE c_mktsegment = 'BUILDING'
          AND c_custkey = o_custkey
          AND l_orderkey = o_orderkey
          AND o_orderdate < '1995-03-15'
          AND l_shipdate > '1995-03-15'
        GROUP BY l_orderkey,
                 o_orderdate,
                 o_shippriority
        ORDER BY revenue DESC, o_orderdate)
  WHERE ROWNUM <= 10;
+------------+---------------------+----------------+-------------+
| L_ORDERKEY | O_ORDERDATE         | O_SHIPPRIORITY | REVENUE     |
+------------+---------------------+----------------+-------------+
|    2456423 | 1995-03-05 00:00:00 |              0 | 406181.0111 |
|    3459808 | 1995-03-04 00:00:00 |              0 | 405838.6989 |
|     492164 | 1995-02-19 00:00:00 |              0 |  390324.061 |
|    1188320 | 1995-03-09 00:00:00 |              0 | 384537.9359 |
|    2435712 | 1995-02-26 00:00:00 |              0 | 378673.0558 |
|    4878020 | 1995-03-12 00:00:00 |              0 | 378376.7952 |
|    5521732 | 1995-03-13 00:00:00 |              0 | 375153.9215 |
|    2628192 | 1995-02-22 00:00:00 |              0 | 373133.3094 |
|     993600 | 1995-03-05 00:00:00 |              0 | 371407.4595 |
|    2300070 | 1995-03-13 00:00:00 |              0 | 367371.1452 |
+------------+---------------------+----------------+-------------+
10 rows in set
示例2

外表可以与普通表组合进行查询操作。

下面例子中,temp是普通表,orders是外表。

obclient> SELECT temp.* from temp, orders WHERE temp.c1 = orders.O_ORDERDATE and rownum < 5;
+---------------------+
| C1                  |
+---------------------+
| 1995-03-05 00:00:00 |
| 1995-02-22 00:00:00 |
| 1995-02-22 00:00:00 |
| 1995-03-13 00:00:00 |
+---------------------+
4 rows in set
示例3

外表可以实现将外部数据导入普通表的操作。

下面例子中,lineitem_import 为普通表,lineitem为外部表,通过PDML功能可以将外表lineitem数据并行导入普通表lineitem_import。

INSERT /*+ enable_parallel_dml parallel(10) */ INTO lineitem_import
SELECT * FROM lineitem;

展望未来

未来外表计划会支持更多的数据源驱动,例如aws和cos等,支持更丰富的数据格式,例如parquet和orc等,以及支持压缩格式。目前外表的文件无法进行筛选,未来我们还会支持外表的分区,通过分区可以进行文件的裁剪,提高查询性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/548682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

平台工程在企业数字化转型中的战略价值

要建设成功、有弹性和面向未来的平台&#xff0c;需要做到这三点&#xff1a;了解需求、预测可能面临的挑战并制定经得起时间考验的解决方案。 了解需求是指理解利益相关者的要求和目标&#xff0c;无论他们是最终用户、开发人员还是平台生态系统中的其他相关方。这包括开展全面…

HTTPS 加密解密大致流程

HTTPS简介 在我们开始配置之前&#xff0c;让我们先了解一下HTTPS和它的重要性。 为什么选择HTTPS&#xff1f; 加密传输&#xff1a;通过SSL/TLS协议&#xff0c;确保数据在传输过程中不被窃听。认证身份&#xff1a;确保客户端与预期的服务器通信&#xff0c;防止中间人攻…

梵宁教育:全面解析设计课程,助力职场新人技能飞跃

在数字化浪潮席卷全球的今天&#xff0c;设计行业以其独特的魅力和无穷的创新力&#xff0c;成为职场新人竞相追逐的热门领域。梵宁教育&#xff0c;作为一家专注于设计教育的机构&#xff0c;以其全面而深入的设计课程&#xff0c;为职场新人提供了技能飞跃的有力支持。 梵宁…

vue3 el-table无表头

需要实现的样式 父组件 <template><div><!-- 表格组件 无表头 --><Table :label"tableData.label" :data"tableData.data" :querydata"tableData.querydata" :queryTitle"tableData.title"><template #o…

企业网站建设需要了解什么

在现代商业环境中&#xff0c;企业网站已经成为企业宣传、推广和销售的重要工具。企业网站的建设需要考虑多个因素&#xff0c;包括以下几个方面&#xff1a; 首先&#xff0c;了解企业的目标和定位。企业网站的建设应该围绕企业的目标和定位展开&#xff0c;以达到企业在市场中…

低代码开发平台权威推荐:创新开发、领跑市场!

Gartner是低代码领域的一家权威机构&#xff0c;该机构常常通过"魔力象限"的研究方法&#xff0c;评选全球范围内IT细分领域的产品&#xff0c;来帮助决策者提供重要的咨询建议。本文盘点了Gartner机构推荐的6款低代码平台&#xff1a;Zoho Creator、Mendix、Oracle、…

新零售门店、商品、会员管理指标体系总览

新零售&#xff0c;旨在打破传统零售业的边界&#xff0c;引入先进科技和数字化手段&#xff0c;通过整合线上线下渠道&#xff0c;全面提升用户体验&#xff0c;并实现更智能、高效、个性化的零售运营模式。这一模式不仅仅关注销售产品&#xff0c;更注重构建全方位的购物生态…

(BERT蒸馏)TinyBERT: Distilling BERT for Natural Language Understanding

文章链接&#xff1a;https://arxiv.org/abs/1909.10351 背景 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预训练语言模型&#xff08;如BERT&#xff09;通过大规模的数据训练&#xff0c;已在多种NLP任务中取得了卓越的性能。尽管BERT模型在语言理解和生成…

【刷题笔记】第一天

两道贪心题 文章目录 [3106. 满足距离约束且字典序最小的字符串](https://leetcode.cn/problems/lexicographically-smallest-string-after-operations-with-constraint/)[3107. 使数组中位数等于 K 的最少操作数](https://leetcode.cn/problems/minimum-operations-to-make-me…

ubuntu安装python3.10

1. 官网下载源程序 2. 解压进入文件夹&#xff1a; ./configure --prefix/usr/local/python3/ 3. 编译安装&#xff1a; make && make install 4. 添加环境变量&#xff1a; vim ~/.bashrc PATH/usr/local/python3/bin:$PATH #保存后&#xff0c;刷新配置文件 sour…

HCIP的学习(8)

OSPF数据报文 OSPF头部信息&#xff08;公共固定&#xff09; 版本&#xff1a;OSPF版本&#xff0c;在IPv4网络中版本字段恒定为数值2&#xff08;v1属于实验室版本&#xff0c;v3属于IPv6&#xff09;类型&#xff1a;代表具体是哪一种报文&#xff0c;按照1~5排序&#xff…

C++从入门到精通——类的6个默认成员函数之赋值运算符重载

赋值运算符重载 前言一、运算符重载定义实例注意要点 二、赋值运算符重载赋值运算符重载格式赋值运算符重载要点重载要点传值返回和传址返回要点 三、前置和后置重载 前言 类的6个默认成员函数&#xff1a;如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么…

xcode c++项目设置运行时参数

在 Xcode 项目中&#xff0c;你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤&#xff1a; 打开 Xcode&#xff0c;并打开你的项目。在 Xcode 菜单栏中&#xff0c;选择 "Product" -> "Scheme" -> "E…

利驰软件亮相第二届全国先进技术成果转化大会

4月8日&#xff0c;第二届全国先进技术成果转化大会在苏开幕。省长许昆林出席大会开幕式并致辞。国家国防科工局局长张克俭&#xff0c;省委常委、苏州市委书记刘小涛分别致辞。 本次转化大会由江苏省国防科学技术工业办公室、苏州市人民政府、先进技术成果长三角转化中心主办…

无人棋牌室软硬件方案

先决思考 软件这一套确实是做一套下来&#xff0c;可以无限复制卖出&#xff0c;这个雀氏是一本万利的买卖。 现在肯定是有成套的方案&#xff0c;值不值得重做&#xff1f;为什么要重做&#xff1f; 你想达到什么效果&#xff1f;还是需要细聊的。 做这个东西难度不高&…

自动发版工具以及本地debug

# 定义变量 $jarFile "xxx.jar" $server "ip" $username "user" $password "password" $remoteHost "${username}${server}" $remoteFolderPath "path" $gitDir "$PSScriptRoot\..\.git" # 设置…

每日OJ题_BFS解决最短路①_力扣1926. 迷宫中离入口最近的出口

目录 力扣1926. 迷宫中离入口最近的出口 解析代码 力扣1926. 迷宫中离入口最近的出口 1926. 迷宫中离入口最近的出口 难度 中等 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 . 表示&#xff09;和墙&…

汽车抗疲劳驾驶测试铸铁试验底座技术要求有哪些

铸铁平台试验台底座的主要技术参数要求 1、 试验台底座设计制造符合JB/T794-1999《铸铁平板》标准。 2、 试验铁底板及所有附件的计量单位全部采用 单位&#xff08;SI&#xff09;标准。 3、铸铁平台平板材质&#xff1a;用细密的灰口铸铁HT250或HT200&#xff0c;强度符…

默认图表太丑!?快来看看这个好看的绘图主题吧~~

有很多小伙伴经常私信给小编&#xff0c;问自己绘制的图表为啥没小编绘制的精美&#xff1f; 听到这句话&#xff0c;小编老脸一红&#xff0c;还是比较惭愧的&#xff0c;因为并不是像小伙伴说的那样对每一个图表元素都进行定制化涉及操作&#xff0c;是借助优秀的“第三方工具…

Python 正则表达式模块使用

目录 1、匹配单个字符 2、匹配多个字符 3、匹配开头结尾 4、匹配分组 说明&#xff1a;在Python中需要通过正则表达式对字符串进行匹配的时候&#xff0c;可以使用re模块 表达式&#xff1a;re.match(正则表达式&#xff0c; 要匹配的字符串) 有返回值说明匹配成功&#x…
最新文章