Unload data from Databend | 新手篇(4)

news2025/1/17 4:01:33

上篇我们讲了怎么利用 copy 命令借助于 Stage 把数据加载到 Databend 中,Databend 致力于构建一个完整的数据湖,也需要支持用户把数据从 Databend 中取走,这里 Databend 给三种可以把数据取走的办法:

        External table 把数据存储在用户指定的 bucket 中

  • 利用 Copy 命令把数据 unload 指定的 stage 中

  • 利用 presign 获取内部 stage 中文件的下载地址

External table 把数据存储在用户指定的 bucket 中

这个功能是某个 Databend 用户的需求,该用户现在使用了大数据中比较多的生态工具,数据交换使用的 Parquet 文件。现在该用户的做法是利用 Databend 提供数据写入,同时把 table 存到不同的 bucket 中供不同的大数据产品消费, 同时利用 Databend 提供数据汇集及查询分析能力。

create table tb01( id int, c1 varchar) 's3://mybucket/tb01' \
connection=(ACCESS_KEY_ID='minioadmin' \
SECRET_ACCESS_KEY='minioadmin' \
ENDPOINT_URL='http://127.0.0.1:9900');

以上命令会把 tb01 的数据放入对应的 bucket 下面,目录结构下:mybucket/tb01/db_id/tb_id/

这样这个 bucket 也可以给其它大数据程序独立的消费使用。但这里需要注意其它程序不能写 tb01 对应的文件。

这个功能对于 Databend Cloud 上就非常 Cool ,例如:用户可以借助于 Databend Cloud 计算的弹性,实现计算按时间计费,同时又可以把数据存到个人帐号的 Bucket 中,同时供实它大数据产品消费。同时可以利用 Databend Cloud 实现数据的统一入湖仓操作。

使用 copy 命令 unload 数据到 stage

Copy 命令不只是支持把数据加载到对应的表里,还支持从对应的表里把数据读取出来放对应的 stage 中。具体语法如下:

create stage my_stage;
copy into @my_stage from tb_1 file_format=(type='ndjson');
#也支持导出固定的字段
#copy into @my_stage from (select id, c1 from tb_1 limit 10) file_format=(type=csv);

MySQL [default]> copy into @my_stage from tb_1;

Query OK, 0 rows affected (18.930 sec)

MySQL [default]> 
MySQL [default]> list @my_stage;
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+
| name                                                  | size     | md5                              | last_modified                 | creator |
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson | 67141080 | 6c9aeead0aff539900730f996360262d | 2022-10-21 08:02:50.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_1.ndjson | 67153185 | 56745fdc94db1dd618f815c8da07ee37 | 2022-10-21 08:02:52.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_2.ndjson | 67142790 | eb3a2ee3ddcfc5ef61309250cde6f379 | 2022-10-21 08:02:55.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_3.ndjson | 67113405 | 480983368d84ada46a370c09ffb14920 | 2022-10-21 08:02:57.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_4.ndjson | 67125735 | 291573fc47fbdd602af13752cba09535 | 2022-10-21 08:02:59.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_5.ndjson | 67132080 | 1f7781a3c201a7020d7eba7d49854d60 | 2022-10-21 08:03:02.000 +0000 | NULL    |
| data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_6.ndjson | 45792045 | 68aba00e885f8aaa2c9f88c3fe4b886e | 2022-10-21 08:03:03.000 +0000 | NULL    |
| t1.json                                               |       98 | 6cdc83ea7b8d033bf74d026a666a99f2 | 2022-10-20 15:45:42.000 +0000 | NULL    |
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+
8 rows in set (0.033 sec)

目前 copy into location 还不支持 CSV, TSV,NDJSON 压缩,这块功能可以比较快的补齐。如果你想降低文件传递的带宽可以使用 parquet 格式。

更多关于 unload data 的使用可以参考手册:https://databend.rs/doc/reference/sql/dml/dml-copy-into-location

使用 presign 从内部 stage 上获取数据

大家可能发现对 unload 到外 stage 上的文件可以轻松的下载下来, unload 内部 stage 的文件就比较难获取出来。其实 Databend 早为大家想到这个问题及解决方案。

例如:

MySQL [default]> presign download @my_stage/data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson;
+--------+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| method | headers                   | url                                                                                                                                                                                                                                                                                                                                                                       |
+--------+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GET    | {"host":"127.0.0.1:9900"} | http://127.0.0.1:9900/databend/wubx/stage/my_stage/data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20221021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221021T080735Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=caa0db3c7db47fe3953257c2a04261170936eb56b181087bf571afe206964944 |
+--------+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.026 sec)

curl 'http://127.0.0.1:9900/databend/wubx/stage/my_stage/data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20221021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221021T080735Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=caa0db3c7db47fe3953257c2a04261170936eb56b181087bf571afe206964944' -o data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson

ls -lh data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson 
-rw-rw-r-- 1 wu wu 65M 10月 21 16:09 data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson


这是下载需要利用 presign 获取下载 URL 然后调用下载工作保存,指定一下文件名,该地址默认有效时间为 1 个小时,时间可调整。

同时这个命令也支持上传, 上传后文件名为 11.ndjson

MySQL [default]> presign upload @my_stage/11.ndjson;
+--------+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| method | headers                   | url                                                                                                                                                                                                                                                                                                                           |
+--------+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| PUT    | {"host":"127.0.0.1:9900"} | http://127.0.0.1:9900/databend/wubx/stage/my_stage/11.ndjson?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20221021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221021T081241Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0ccf52cb276ffb5254632f483117e74db4675f89dc723fe0ce34d8e75d89172e |
+--------+---------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.027 sec)

curl -T data_775b2883-e26f-4940-85fe-ab3e4cafa7be_32_0.ndjson -XPUT 'http://127.0.0.1:9900/databend/wubx/stage/my_stage/11.ndjson?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20221021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221021T081241Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0ccf52cb276ffb5254632f483117e74db4675f89dc723fe0ce34d8e75d89172e'

MySQL [default]> list @my_stage;
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+
| name                                                  | size     | md5                              | last_modified                 | creator |
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+
| 11.ndjson                                             | 67141327 | 3baa41bfa758f2683cb4f9e0e4a292dd | 2022-10-21 08:14:36.000 +0000 | NULL    |
+-------------------------------------------------------+----------+----------------------------------+-------------------------------+---------+

可以看到文件上传文的文件名是:11.ndjson 。

更多关于 presign 的使用可以关注:https://databend.rs/doc/reference/sql/ddl/presign/presign

总结

Databend 结合 copy 命令和 presign 可以实现文件灵活交换。无须担心数据被锁死到 databend 中,其实 Databend 底层存储使用的 Parquet 文件也是可以支持直接解析获取数据。

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Databend 文档:https://databend.rs/

Twitter:https://twitter.com/Datafuse_Labs

Slack:https://datafusecloud.slack.com/

Wechat:Databend

GitHub :https://github.com/datafuselabs/databend

 

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

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

相关文章

fiddler使用教程

Fiddler教程 Fiddler简介 Fiddler是一款网络代理调试工具,可以将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,是目前最常用的http抓包工具之一。 Fiddler工作原理 Fiddler通过改写HTTP代理,来监控并截取数据。当浏览器访…

2022年第十二届APMCM亚太地区大学生数学建模竞赛--思路代码

2022年第十二届APMCM亚太地区大学生数学建模竞赛--思路&代码报名时间节点往年真题赛题&翻译题目思路A题——赛题解读&解题思路B 题——赛题解读&解题思路C题——赛题解读&解题思路报名 官方网址:http://www.apmcm.org 报名网址:http…

Similarity and Matching of Neural Network Representations 论文阅读笔记

这是NIPS2021的一篇论文,文章主要是探究了通过一个stiching layer将两个已训练的不同初始化的相同结构的网络的某一层进行匹配的可能性。 前言 作者对 “什么情况下两个表征是相似的?” 提出了一个新的问题:“如果我们知道两个表征是相似的&…

Qt 停靠布局QDockWidget使用

基本使用 QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或在指定位置作为子窗口附加到主窗口中。停靠窗口QDockWidget类是应用程序中经常用到的,设置停靠窗口的一般流程如下。 创建一个QDockWidget对象的停靠窗体。设置此停…

Kafka是什么?Rocket MQ在Spring Boot中怎么整合使用/Kafka在SpringBoot中简单配置使用

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.5.4.5 SpringBoot整合RocketMQ 3.5.4.5.1 Rocket…

怎么设计个性时尚的班服?一起来看看莱佛士学生的设计

校园时期,每个学生其实都拥有一次做“设计师”的经历,那就是为自己的班集体设计班服! 莱佛士设计学院就曾与新加坡国立大学Yong Loo Lin 医学院合作,进行过一场别开生面的校园文创设计大赛,其中不仅有班服设计&#x…

【iOS开发】-UIPickerView

写在开头 昨天学习了iOS一个简单的控件。 UIPickerView; UIPickerView组件类似HTML都Select组件效果,提供数据供用户选择。可以通过plist文件提供数据。UIPickerView是一个选择器控件,可以生成单列的选择器,也可以生成多列的选择器&#xff…

【待解决】Not a Prefab scene

开发平台:Unity 2018.4.10f1 编程平台:Visual Studio   问题描述 注意:这是一个 意义不明 的报错内容。   问题发生环境(可能不唯一) 在 Unity 2018版本中,编辑场景内已有预制体的游戏对象时发生的问题…

stm32cubemx hal学习记录:FreeRTOS消息队列

一、基本介绍 1、消息队列就是一个像容器一样的东西,我们所有的任务都可以往内部写,然后队列会将我们的消息按顺序存下来,所有的任务也可以按顺序将其读出来。 2、队列需要明确数据的大小以及队列的长度,写队列和读队列都是采用…

16.面试重点CookieSession

一、文件上传(使用频率高,但不是很重要) 1.通过form表单 前端: form表单,method必须是POST, enctype属性是multipart/form-data, type是file 引起HTTP请求体的格式以multipart的形式传输 后端: 正常…

UnRaid虚拟机安装Uos家庭版并由Windows远程桌面访问的成功流程

文章目录0、前言1、UnRaid虚拟机安装Uos家庭版1.1、下载Uos系统镜像1.1.1、在https://home.uniontech.com/官网下载镜像安装包(如下图:)1.1.2、上传至Unraid1.1.3、添加虚拟机1.1.4、激活Uos家庭版2、开启Uos的远程桌面2.1、为Uos安装xrdp服务…

【制作数字人】零门槛通过三维重建技术生成个人三维模型

依托各项技术的发展,数字人技术开始拔地而起。我们发现,各大一线互联网企业、三大运营商,还有不少创业型公司都纷纷入局数字人。 难道元宇宙的入门票是数字人?等不及了,马上接触下这门技术。经简单了解,现…

前端学习路线(三)

往期回顾↓↓↓ 前端学习路线(一) 前端学习路线(二) 在前两章中,我们讲了如何去学习前端三剑客、js高级和bootstrap的重点,得到了很多前端初学者的好评,收藏量也是每天都在增加,所以…

【身份证识别】基于matlab GUI BP神经网络身份证识别【含Matlab源码 2239期】

⛄一、身份证号码识别简介 1 引言 当今是一个信息高度发达的时代,对于每个公民而言身份证那一连串的数字体现了个人信息的唯一性,出于保障公民合法权益和社会治安的考虑,越来越多的行业都开始建立自己的安全保障体系,其中最为关键…

STA:虚拟时钟(virtual clock)与I/O延时约束

1.什么是虚拟时钟? 虚拟时钟(virtual clock)是存在但没有clock source(pin/port)定义的时钟,仅作为输入输出端口延时约束的参考时钟。定义方式如下例: create_clock -name virtual_clock -period 10 -waveform {0 5} &#xff1…

第四章:Spring七大核心模块Bean、Core、Context

Spring框架七大模块 容器模块(spring core)、应用上下文模块(spring context)、AOP模块(spring aop)、JDBC抽象和DAO模块(spring dao)、对象/关系映射集成模块(spring o…

R3LIVE代码详解(三)

0. 简介 在上一章中,我们过完了主函数以及LIO的操作,由于这部分代码在FAST-LIO2中已经充分详细的介绍过了,所以说这里在R3LIVE中就不过多介绍了,下面我们来看一下本系列的重点,即VIO部分。 1. 主函数 我们在之前分析…

美国访问学者申请|J1签证官方指定材料大全

美国访问学者申请需要哪些材料?下面就随知识人网老师一起来看一看J1签证官方指定材料大全。 一、 有效护照:如果您的护照将在距您预计抵美日期的六个月内过期、或已损坏、或护照上已无空白的签证签发页, 请在前来面谈之前先申请一本新护照。 二、DS-160…

leetcode:1957. 删除字符使字符串变好

难度:简单 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。 请你返回删除后的字符串。题目数据保证答案总是 唯一的 。 示例 1&#xf…

Podman 部署私有镜像仓库

Podman 部署私有镜像仓库 文章目录Podman 部署私有镜像仓库1. 安装 Podman 和 httpd-tools2. 配置仓库存储位置3. 生成访问仓库的凭据3.1 htpasswd 用户名和密码3.2 TLS 密钥对4. 启动容器5. 测试5.1 登陆5.2 API访问5.3 镜像入库5.4 查询镜像信息Podman是一个无守护进程的开源…