写点什么

Unload data from Databend | 新手篇 (4)

作者:Databend
  • 2022-11-21
    福建
  • 本文字数:5224 字

    阅读完需:约 17 分钟

Unload data from Databend | 新手篇(4)

上篇我们讲了怎么利用 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


用户头像

Databend

关注

还未添加个人签名 2022-08-25 加入

还未添加个人简介

评论

发布
暂无评论
Unload data from Databend | 新手篇(4)_databend_Databend_InfoQ写作社区