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

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.rhkb.cn/news/317580.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安全的使用密码登录账号(在不知道密码的情况下)

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 1、打开工具,进入账号密码模块,如图 2、看到鼠标移动到密码那一栏有提示,按住Ctrl或者Alt点击或者双击就能复制内容&…

在Linux操作系统中的磁盘分区管理案例

1.在硬盘sdb上创建不同的分区实例练习 Linux操作系统是安装在硬盘sda硬盘中,所以不要轻易动硬盘sda中的文件信息 有如下需求 创建主分区 500M 文件系统 ext4 挂载点 /web 创建主分区 500M 文件系统 ext4 挂载点 /nginx 创建逻辑分区 500M 文件系…

深入探索MySQL:成本模型解析与查询性能优化

码到三十五 : 个人主页 在数据库管理系统中,查询优化器是一个至关重要的组件,它负责将用户提交的SQL查询转换为高效的执行计划。在MySQL中,查询优化器使用了一个称为“成本模型”的机制来评估不同执行计划的优劣,并选择…

Cloudflare高级防御规则 看看我的网站如何用防御的

网站已趋于稳定,并且经过nginx调优。我想先分享一下Cloudflare的WAF规则,因为这是最有效的防御之一,可以抵御大量恶意攻击流量,我已经验证了数月。 对于海外独立站电商网站,Cloudflare的CDN服务是首选,它强…

Springboot+vue+小程序+基于微信小程序的在线学习平台

一、项目介绍    基于Spring BootVue小程序的在线学习平台从实际情况出发,结合当前年轻人的学习环境喜好来开发。基于Spring BootVue小程序的在线学习平台在语言上使用Java语言进行开发,在数据库存储方面使用的MySQL数据库,开发工具是IDEA。…

浅谈 HTTPS

文章目录 HTTPS 简介HTTPS 特点与 HTTP 的区别HTTPS 工作流程1. 服务端生成密钥对2. 服务端申请数字证书3. 服务端发送数字证书4. 客户端验证数字证书5. 客户端解析证书内容6. 客户端传送加密信息7. 服务端解密信息8. 双方协商生成会话密钥并交换9. 使用会话密钥进行通信 总结 …

第八篇:隔离即力量:Python虚拟环境的终极指南

隔离即力量:Python虚拟环境的终极指南 1 引言 在编程的多元宇宙中,Python语言犹如一颗闪耀的星辰,其魅力不仅仅在于简洁的语法,更在于其庞大而繁荣的生态系统。然而,随着应用的增长和复杂性的提升,开发者们…

『大模型笔记』Code Example: Function Calling with ChatGPT

Code Example: Function Calling with ChatGPT 文章目录 一. Code Example: Function Calling with ChatGPT二. 参考文献一. Code Example: Function Calling with ChatGPT from openai import OpenAI from dotenv import load_dotenv import json# --------------------------…

虚拟机安装与配置win7

一、安装镜像 Windows7 64位 ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/ 建议迅雷下载 二、VMware 安装win7 1.新创自定义虚拟机 2.默认即可 3.iso文件我们自己下载,选择一个空的磁盘 4.…

基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法(GA)原理 4.2 BP神经网络原理 4.3 遗传优化BP神经网络结合应用 4.4 遗传算法简要改进 5.完整程序 1.程序功能描述 基于改进遗传优化的BP神经网络金融…

键盘更新计划

作为 IT 搬砖人,一直都认为键盘没有什么太大关系。 每次都是公司发什么用什么。 但随着用几年后,发现现在的键盘经常出问题,比如说调节音量的时候通常莫名其妙的卡死,要不就是最大音量要不就是最小音量。 按键 M 不知道什么原因…

python 怎么调用R

如何在python中调用R?这其中包括了如何调用R的对象(函数和包),R和python的对象如何互相转换,以及如何调用R的脚本(外界参数的输入)。python提供了一个模块rpy2,可以较好地完成这项工…

Leetcode 145:二叉树的后序遍历(迭代法)

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 思路: 迭代法的思路是,使用栈,一层一层的将树节点遍历入栈。 比如下面这个树,使用迭代法,1)第一层,让根节点入栈。2&a…

kubectl_入门_Pod控制器

Pod控制器 在k8s中,按照pod的创建方式可以将其分为两类 自主式pod:k8s直接创建出来的pod,这种pod删除后就没有了,也不会重建控制器创建的pod:通过控制器创建的pod,这种pod删除了之后还会自动重建 1. 什么…

图像处理的一些操作(2)

图像处理 9. 转换类型9.1转换成浮点数类型9.2转换成无符号字节类型 10.颜色空间转换10.1RGB转GRAY10.2RGB转HSV10.3RGB转LAB10.4HSV转RGB10.5LAB转RGB10.6 convert_colorspace函数进行颜色转换 11.标签化处理图像11.1导入模块11.2加载图片11.3RGB图像转灰度图像11.4遍历图像11.…

WSL2-Ubuntu使用Conda配置百度飞浆paddlepaddle虚拟环境

0x00 缘起 本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。 在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配C…

nginx下载安装配置(含ssl)

下载安装环节 wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf xxx.tar.gz yum -y install pcre-devel openssl openssl-devel ./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream make & make i…

APScheduler定时器使用:django中使用apscheduler,使用mysql做存储后端

一、基本环境 python版本:3.8.5 APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0二、django基本设置 2.1、新增一个app 该app用来写apscheduler相关的代码 python manage.py startapp gs_scheduler 2.2、修改配置文件s…

8. Django 表单与模型

8. 表单与模型 表单是搜集用户数据信息的各种表单元素的集合, 其作用是实现网页上的数据交互, 比如用户在网站输入数据信息, 然后提交到网站服务器端进行处理(如数据录入和用户登录注册等).网页表单是Web开发的一项基本功能, Django的表单功能由Form类实现, 主要分为两种: dj…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习三

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…