如何用OceanBase的 Load Data 导入CSV文件

news2024/11/25 14:55:14

0 前言

CSV文件(Comma-Separated Values,字符分隔值)是一种普遍采用的数据存储格式,有不少企业和机构都用它来进行数据的管理和存储。身为开发者,您可能经常遇到这样的需求:需要将CSV的数据导入OceanBase数据库,或者需要验证OceanBase数据库与您先前使用的数据库之间的兼容性。针对这类需求,OB Cloud云数据库提供了Load Data功能,这是一个高效且可靠的方案,能够帮助您迅速将CSV格式的数据导入到数据库中。

Load Data 功能具有如下特点:

  • 快速导入:通过 Load Data 功能可以轻松地将最多 10 GB 数据导入到数据库中,无需手动设定参数或执行脚本,节省时间和人力成本;
  • 灵活配置:允许导入时根据数据文件的结构自动创建对应的表定义;
  • 精准匹配:提供多种 CSV 配置选项,以满足不同格式的导入需求;能在无需强制要求数据文件与表中列顺序完全相同的前提下,自动匹配数据列;
  • 数据安全:我们的导入功能可以根据需要设置出错中断,且可以保证导入的数据符合规范并且不会损害数据库的完整性。

本文介绍了通过该功能,将数据从普通 CSV 文件或从其他类型数据库的数据表中迁移至 OceanBase 数据表中的方法和步骤。

1 功能入口

您可以从OB Cloud的控制台首页的租户卡片发起数据导入,或从租户工作台进入 Load Data 界面,以发起导入任务或查看当前租户的历史任务。

2 数据文件准备

CSV 文件使用逗号或其他指定的字符分隔的形式储存信息,通常情况下,所有记录都有完全相同的序列形式。OceanBase Cloud 的 Load Data 功能目前支持将单个 CSV 文件中的数据导入至单个数据表中,我们建议您使用的 CSV 文件符合 RFC 4180 规范。

在导入数据之前,请确保CSV文件中的数据完整且没有错误。如果您是从其他来源获得CSV文件,则需要进行数据清洗,以确保数据格式正确和数据的完整性。

若您的数据来源是 OceanBase 数据库或 OceanBase 以外的数据库如 MySQL 或 Oracle ,可以参考 从数据库中导出CSV文件小节。

2.1 上传文件以导入

您可以从本地上传文件至服务器,以进行导入任务。由于客户端的网络波动可能会影响上传速度等原因,此种方式将文件大小限制为 1 GB。

若希望导入超过 1G 的数据,可先将文件至云存储服务,选择 Load From Cloud storage file,除文件大小限制不同外,其余导入操作并无差异。

2.2 导入云存储中的文件

OceanBase Load Data 目前支持从 s3 和 oss 两种云存储导入文件。使用云存储作为导入任务的数据源时,能够支持 10 GB 以下的文件,若超过该限制,则无法发起导入任务。

Credentials

从云存储导入时,需要填写:

  • Object URL:包括了对象存储的 bucket 和 path 信息,格式为[oss/s3]://bucket/path ,需要能够具体定位到文件,而非某个目录;
  • Access Key ID/Secret:用于访问对象存储的凭证,需在云存储控制台创建,只有在最初创建时才能访问密钥,若丢失则必须创建新的密钥对;

注:

  • 当云存储提供商为 AWS s3 时,无需填写 Region 字段,因为 bucket 是全局唯一的,我们会根据 URL 中解析得到的 bucket 查找对应的区域;
  • 您填写的 AK/SK 仅用于当前导入任务的文件获取,OceanBase 并不会存储该凭证,且网络通信过程会将其进行加密传输,因此无需担心凭证泄漏的安全问题。

3 选择导入目标

您可以选择已有数据库和表,也可以新建数据库后导入到该库中,前提是使用的用户具有建库权限。

在数据预览界面,点击数据库列表中的 Create Database 以创建新的数据库。

3.1 数据预览

选择已有的数据表时,我们会解析您提供的文件的部分数据,并与目标表的结构进行对比,生成数据预览视图,以确保导入的文件内容和 CSV 配置与您的预期相同。

  • 若指定了跳过首行,则会根据数据文件中的列名与表列名匹配,此时二者顺序无需完全相同,我们会寻找二者的交集,仅在文件中和表中共同存在的列才会被导入;
  • 您可以通过编辑 CSV 格式配置修改匹配的文件格式,且修改可实时生效,无需返回前一个界面。

3.2 选择新建表

OceanBase 提供了解析文件以新建表的能力,您可以尝试在 Table 栏输入一个当前库中不存在的表名,我们会尝试生成文件对应表的结构预览。此处的功能包括:

  • 与 选择已有表 时的数据预览不同,此时您可以编辑列名、主键、是否为空等元信息,若您根据当前预览发起导入任务,那么在导入数据之前会创建出对应的表定义;
  • 若选择了“跳过首行”的选项,则使用首行数据作为列名,否则会自动生成类似 columnN 的列名;
  • 当匹配到某个列名为“ID”或“UUID”时,默认会指定其为主键,您可以手动取消该主键。

数据类型

数据类型选择是一项十分重要的功能,您可以根据以下操作生成您需要的表定义:

  1. 默认的,我们会扫描文件数据,解析每个列可能的数据类型(目前仅支持常用的几种类型,我们后续会持续优化,完善数据类型);
  2. 在数据类型选择时,为了取得在可用性(完全手动输入)和易用性(完全下拉选择)的平衡,我们选取了一个折中的方式,即同时允许下拉选择和手动输入,在选择列表中提供了一部分常用类型,如下所示:

  1. 若在使用过程中遇到了手动输入的合法数据类型被拒绝的场景,请及时向我们反馈。

4 导入

当所有准备都完成后,此时便可以发起导入任务了。此时还有一个可选的配置项,那就是出错时是否立刻中断任务(Stop when error),若选择该项,则顾名思义,出错时导入任务会立刻停止,否则会跳过当前失败的数据,继续尝试导入。

值得注意的是,使用 Load Data 功能导入数据时,即便指定了出错立刻终止任务,但对于“重复主键”的错误,我们并不会立刻停止,而是忽略该条记录,继续尝试导入后续的数据。

如果导入数据中有大量的 Bad Record(无法被插入的数据),而又选择了失败时跳过,那么可能会导致任务变得特别缓慢,我们强烈建议此刻终止任务以释放占用的资源。

发起导入任务后,您可以在任务列表查看历史任务的详情。导入任务是跨租户隔离的,因此该页面仅展示当前租户的任务列表。

失败原因排查

对于一个失败的导入任务,可能存在多种失败原因,您可以通过如下方式进行排查:

  1. 点击任务详情,在详情界面我们展示了一条可能的失败原因;
  2. 若当前错误信息并不能解释任务失败原因,您也可以点击 Download Log 以下载任务日志,日志中记录了任务执行的详细信息,包括导入速率、失败记录、总导入数据量等;
  3. 若从日志中仍然难以定位任务失败原因,您可以点击反馈联系我们,会有专门值班人员跟进。

5 从数据库中导出 CSV 文件

5.1 From Oracle

如果导入的数据类型非源自于 OceanBase 数据库,例如 Oracle,则使用 Load Data 的功能导入单张表的数据前,需要将 Oracle Schema 中的表数据导出到 CSV 格式数据文件中。

您可以使用 Navicat 或 SQL Developer 等数据库开发工具进行导出,或仅使用 SQLPlus 命令工具将数据导入到文件中。使用 Navicat 导出的示例可参考后文 From MySQL 小节中的内容。

SQLPlus

以 SQLPlus 为例,可通过下面步骤,使用 SPOOL 命令将表 STUDENT 中的数据导出为 CSV 文件:

  1. 执行 sqlplus 连接到默认数据库,或执行 sqlplus schema@//machine.domain:port/database(替换为实际值)指定用户或数据库来连接;
  2. 使用 SQLPlus 官方提供的 SET MARKUP 命令用于指定结果输出至 CSV 格式:
SET MARKUP CSV ON DELIMITER , QUOTE ON;

其中 DELIMITER , 选项指定输出数据以逗号(COMMA)为分隔符;QUOTE ON 选项指定打开文本引用,使用双引号(")引用文本数据。

说明:SET MARKUP CSV 仅支持上述两项格式配置,若您希望指定更加详细的 CSV 文件配置,请关闭 CSV 格式输出,并参考 文档 指定列分隔符等其他格式。

  1. 使用 SPOOL 命令将查询结果输出至文件,完整的操作流程如下:
SQL> SET MARKUP CSV ON DELIMITER , QUOTE ON;
SQL> SPOOL STUDENT.csv;
SQL> SELECT * FROM STUDENT;

"ID","NAME","SEX"
1,"leo","m"
2,"tracy","f"
3,"mike","m"

SQL> SPOOL OFF;
  1. 最终得到的文件格式如下,需要将首尾删除,仅保留中间的有效数据,才能够通过 Load Data 功能导入 OceanBase。

说明:通过这种方式导出的数据默认转义符为双引号,导入时需要修改对应 CSV 格式配置,否则将会识别为错误的数据。

5.2 From MySQL

与 Oracle 相同,首先需要将数据导出至 csv 文件中,再进行导入操作。您可以使用 Navicat 、DBeaver 等白屏数据库开发工具进行导出,也可以使用 mysqldump 导出工具。

mysqldump

当使用 mysqldump 工具时,可以参考如下命令导出数据到 "/output" 目录:

mysqldump -h 127.0.0.1 -P 3306 -u xxx -p xxx --databases test --compact --fields-optionally-enclosed-by '\"' --fields-escaped-by '\\' --fields-terminated-by ',' --lines-terminated-by '\r\n' --tab='/output/'

说明:该示例将数据库中定义的Schema和表数据分开导出,Schema是按照SQL-format格式输出,数据是按照标准的 CSV 格式输出,CSV规范可参考 RFC-4180

mysqldump 工具提供了很多灵活的配置,允许将数据库定义以及其中数据导出为多种格式的文件,具体使用方式可参考官方文档,但对于简单的数据迁移任务,使用上述命令即可满足导入 OceanBase 需求的格式。

与 mysqldump 不同,白屏开发工具支持的配置有限,您可以按照如下流程将 STUDENT 表中的数据导出到 CSV 文件:

  1. 打开 Navicat 中的连接,选中 STUDENT 表,打开 Export Wizard 导出向导,选中 csv 格式;
  2. 在自定义格式配置的界面,按照如下格式进行配置:

  1. 点击导出,可将文件导出为如下格式:

说明:当前格式是我们推荐的,可按照默认 CSV 配置导入 OceanBase 的 CSV 格式,您也可以按需修改,在导入预览时通过 Edit CSV Configuration 功能修改为对应格式即可。

5.3 From OceanBase

一般情况下,我们推荐使用 ob-dumper 从 OceanBase 导出数据,例如,下面的命令可将 Schema "test" 中所有表中的数据按照 CSV 格式导出到 "/output" 目录中

./obdumper -h 127.0.0.1 -P 2883 -u xxx -t tenant_A -c cluster_A -p xxx --sys-password xxx -D test --table '*' --column-delimiter '\"' --csv -f '/output/'

说明:

  • 命令行参数指定的对象名、数据文件名、控制规则文件名要求大小写一致。Oracle 默认大写,MySQL 默认小写。如果需要区分大小写,请将表名放入中括号内([ ])。例如:--table '[test]' 表示 test 表,文件名格式为 test.group.sequence.suffix; --table '[TEST]' 表示 TEST 表,文件名格式为 TEST.group.sequence.suffix;
  • 导出的数据文件的命名规范是 table.group.sequence.suffix

6 结语

感谢您的阅读,并了解我们的 Load Data 功能。我们相信,OceanBase 的快速导入功能可以帮助您快速、准确地将数据导入到数据库中,并提高数据管理和处理的效率和质量。

如果您对我们的导入功能感兴趣,欢迎访问 OceanBase Cloud 了解更多信息或试用我们的产品。我们随时准备为您提供专业的技术支持和服务,并与您共同探讨如何更好地应用数据管理于您的业务中。

目前 Load Data 功能仅支持单 CSV 文件 -> 单表的数据导入,后续会继续支持 SQL 数据文件、SQL DDL 文件、多表和整库的多种导入方式,如果您有其他功能场景的需求或创意,也欢迎向我们反馈~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础知识(17)面向对象 1

一、面向对象的概念 1、面向对象的两个基本概念 编程语言中,一般有两种编程思维,面向过程和面向对象。 面向过程,看重的是解决问题的过程。 这好比我们解决日常生活问题差不多,分析解决问题的步骤,然后一步一步的解决…

知乎热议:未来几年,AI技术在科研领域将有哪些新的发展趋势或突破?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 一年多以来,各种国内外的AI模型和应用应接不暇,从刚开始ChatGPT一家独大,到现在的百花齐放,各种AI模型各有千秋,一时…

CVE-2023-48795修复方法

CVE-2023-48795修复方法 1、修复原理2、检测漏洞3、修复漏洞4、成功修复 近期nessus扫描经常出现一个中危漏洞CVE-2023-48795,但网上的修复方法清一色的将openSSH升级到9.6p1版本 而我在升级当中处处碰壁,甚至于差点给服务器都干崩溃,特意研究…

Coursera: An Introduction to American Law 学习笔记 Week 01: Tort Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors SyllabusWeek 01: Tort LawKey Tort Law TermsTort Law: Part …

AI写作软件:一键生成原创文案,效率就是高

对于文案创作人员来说,常期的创作都会出现灵感枯竭现象,从而导致文案创作人员写不出文案的问题,那么如何解决文案写不出来的问题呢?别急,本文会给大家分享出好的解决方法!大家要知道,随着人工智…

uniapp微信小程序开发踩坑日记:Vue3 + uniapp项目引入Echarts图表库

一、下载插件包 下载地址如下: lime-echart: 百度图表 echarts,uniapp、taro 使用 echarts 图表,全面兼容各平台小程序、H5、APP、Nvue 将以下两个文件夹放到项目的components里 同样地,将静态资源文件夹下内容放到自己项目的s…

c++高级篇(三) ——Linux下IO多路复用之poll模型

poll模型 前言 poll模型与select的实现原理相近,所以绝大数的原理其实可以参考select,我们这里对二者的相同点不做过多探究,如果有需要可以去看一下博主的上一篇文章: c高级篇(二) ——Linux下IO多路复用之select模型 这里我们只…

全志ARM-蜂鸣器

sh操作准备: 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置,修改/etc/vim/vimrc文件,需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

OpenTiny开源之夏编程达人集结令:4月30日正式上线,寻找最强代码战士!

五一来袭,OpenTiny 开源之夏编程项目正式上线! 已梦为马,不负韶华 聚焦前端,OpenTiny 喊你来参加编程活动了 10个赛题任你选! 我们诚挚邀请你参与本次 OpenTiny 开源之夏编程活动, 用你的智慧和才能&a…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-5]【The Riemann Mapping Theorem】

前言: mobius变换保角性证明一直困扰我很久.当看完黎曼映射定理以及结合MIT的数学证明 深刻的感触到数学之美,“知之深,情之切”。 黎曼映射(The Riemann Mapping)定理是复分析最深刻的定理之一,也是复变函…

帮助文档更新了

原先的帮助文档比较简单,大家可能对大部分功能都比较陌生, 最近对帮助文档进行了一轮改版,整个帮助文档更加详细了,对新用户更加友好,这里给大家介绍一下最新的帮助中心 大家进入官网(zyjj.cc)的…

【再探】设计模式— 工厂方法、单例及原型模式

创建型设计模式是处理对象创建的设计模式,主要特点是“将对象的创建与业务代码分离”。一共有五种:工厂方法模式、单例模式、原型模式、抽象工厂模式及建造者模式。 1 单例模式 需求: 在整个系统中只需要一个实例。管理共享资源&#xff0…

看见游戏出海赛道的新机会

目前游戏出海的主要地区和国家都已经非常成熟,原有的发行方式方法也基本标配化,除了产品玩法的差异化,多元化渠道及获量新方式是提升竞争力的有效手段 4月24日,在深圳南山区,VERYCLOUD睿鸿股份与罗斯基、热力引擎共同主…

基于Spring Boot的外卖点餐系统设计与实现

基于Spring Boot的外卖点餐系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 网站首页界面图,通过进入网站可以查看首页、…

新时代教师口才演讲稿(3篇)

新时代教师口才演讲稿(3篇) 新时代教师口才演讲稿(一) 尊敬的各位领导、亲爱的同事们: 大家好! 今天,我站在这里,深感荣幸与激动。在这个新时代里,教师的口才不仅仅是传…

后端java部署教程,docker配置解读(linux用docker部署新手入门)

文件夹结构 然后解读几个启动脚本 首先dockerFile # 使用anapsix/alpine-java:8_server-jre_unlimited作为基础镜像 FROM anapsix/alpine-java:8_server-jre_unlimited# 设置维护者信息 MAINTAINER adminxiaohuaikeji.com# 设置时区为Asia/Shanghai RUN ln -sf /usr/share/z…

组装nas的 神器 n100 ,改天组装一个!

N100的CPU性能虽然不是很强,性能接近4代i5移动端,但功耗很低,TDP只有6W,而且有个24单元的核显,解码视频能力不差。N100和Intel的i系列CPU是不同厂商生产的,并且它们的设计和架构也有所不同,因此…

Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录 1. 简介 2. Schedule Viewer详解 2.1 视图说明 2.1.1 Operation\Control Step 2.1.2 周期关系图 2.1.3 Schedule Viewer 菜单栏 2.1.4 属性视图 2.2 内容说明 2.2.1 实参(b)解释 2.2.2 实参(a)解释 2.2.3 变量&am…

# Windows 环境变量 Path 显示样式更改

Windows 环境变量 Path 显示样式更改 1、传统 Path 环境变量显示: ---》键盘上按【WIN I 】打开系统【设置】 ---》依次点击 ---》【系统】 ---》【系统信息】 ---》【高级系统设置】 ---》【高级】 ---》【环境变量】。或者依次点击: ---》右键 【我…

利用kimi等大模型进行运维参数解析和调优

在运维时,经常遇到很多参数,有些参数不知道意义,知道意义的也有些不知道合理参考值是多少。利用kimi等大模型来当老司机,轻松解决运维难题。 例如在运维hive参数时,有些不知道作用,提示次如下 你的角色是…