Skip to content

Latest commit

 

History

History
152 lines (98 loc) · 6.3 KB

20221026_01.md

File metadata and controls

152 lines (98 loc) · 6.3 KB

DuckDB DataLake 场景使用举例 - aliyun OSS对象存储parquet

作者

digoal

日期

2022-10-26

标签

PostgreSQL , parquet , aliyun OSS , AWS S3


背景

DuckDB内置S3协议模块, 可以直接读写AWS S3对象存储, 实现数据湖架构.

阿里云OSS兼容AWS S3协议, 所以DuckDB也可以将数据存储在aliyun OSS实现数据湖架构. 在endpoint中加一个s3前缀即可.

https://help.aliyun.com/document_detail/451966.html

以华东1(杭州)地域为例,S3兼容的外网Endpoint格式为s3.oss-cn-hangzhou.aliyuncs.com,S3兼容的内网Endpoint格式为s3.oss-cn-hangzhou-internal.aliyuncs.com。如需使用其他地域,请对应替换Endpoint中的Region ID。关于Region和Endpoint的对应关系,请参见访问域名和数据中心。

https://help.aliyun.com/document_detail/31837.htm

例子

阿里云云起实验室可以免费体验OSS的使用, 实验室地址如下:

对象存储OSS初体验
https://developer.aliyun.com/adc/scenarioSeries/3c2b97cca75845c7bc5d778af7b0d469

我们选择一个实验开始:
搭建基于OSS的图片分享网站
https://developer.aliyun.com/adc/scenario/90b2bceaf9954d6f8780f26a1c913385

使用开启后, 可以看到这个实验已经开通了OSS资源(读者请看自己实验的资源, 不要直接拷贝如下信息).

AK ID: LTAI5tMi42EuWSJ5s31H9jWz  
  
AK Secret: WGChOGppUSU6jZCoUkqDo0eqOc91jx  
  
Endpoint外网域名: oss-cn-shanghai.aliyuncs.com  
  
Bucket名称: adc-oss-1872hd2  
  
Object路径: OSSCTY/u-3ztwmndf/  

读写OSS的方法

COPY <table_name> TO 's3://<Bucket名称>/<Object路径>/filename';  
  
SELECT * FROM read_parquet('s3://<Bucket名称>/<Object路径>/filename');  

例子:

D create table a(id int, info text);  
D insert into a select range, md5(random()::text) from range(1,10000000);  
  
  
D INSTALL httpfs;  
D LOAD httpfs;  
D set s3_access_key_id='LTAI5tMi42EuWSJ5s31H9jWz';               // AK ID  
D set s3_secret_access_key='WGChOGppUSU6jZCoUkqDo0eqOc91jx';     // AK Secret  
D set s3_endpoint='s3.oss-cn-shanghai.aliyuncs.com';             // Endpoint外网域名|内网域名    
  
D copy a to 's3://adc-oss-1872hd2/OSSCTY/u-3ztwmndf/b.parquet';        
  
D SELECT * FROM read_parquet('s3://adc-oss-1872hd2/OSSCTY/u-3ztwmndf/b.parquet') where id<10;   
┌────┬──────────────────────────────────┐  
│ id │               info               │  
├────┼──────────────────────────────────┤  
│ 1  │ 491af8ec9e7fe43605454bac84267ebb │  
│ 2  │ 52e67e9e42beeab2c1980cd0f881334b │  
│ 3  │ 607ac7b43e7b63d543e4043d48e7a810 │  
│ 4  │ 0745aa81f12943de807163cb7be52814 │  
│ 5  │ c3bb7787313ed393d73aa3f1d91e2e28 │  
│ 6  │ 49eef8c05e3415fd1eb3b0a37bd38bed │  
│ 7  │ 5f7f52df3d90b82e52a32e0b9f7ab6ad │  
│ 8  │ bf55f472eaee6e7dd46c5dc63a819888 │  
│ 9  │ b14e2b9c6ae7b380649efa85d930049f │  
│ 1  │ 6be62c882b86991d81c0f62449282f3b │  
│ 2  │ 923414a7f16b730c8754e31f34bf9a9c │  
│ 3  │ f94db37004a40a40736cb1d78ef033af │  
│ 4  │ 04e2df6859a6b5089e891c986cb4ec29 │  
│ 5  │ ff4901fbb1c492753b16e368d9e4d603 │  
│ 6  │ abdbf67ab2e3021877778cc8f55d094f │  
│ 7  │ cb2a54c72adaaf7aa96c5a07f9913b36 │  
│ 8  │ c10c4e49f947ac1d06e9ef9389774d90 │  
│ 9  │ 3a62ccfc42533090bf1dd71f46b27848 │  
└────┴──────────────────────────────────┘  
Run Time (s): real 0.646 user 0.075070 sys 0.048294  
  
  
D select count(*) from read_parquet('s3://adc-oss-1872hd2/OSSCTY/u-3ztwmndf/b.parquet');     
┌──────────────┐  
│ count_star() │  
├──────────────┤  
│ 10000098     │  
└──────────────┘  
Run Time (s): real 1.049 user 0.050707 sys 0.023781  
  
  
D select count(*) from read_parquet('s3://adc-oss-1872hd2/OSSCTY/u-3ztwmndf/b.parquet') where id=1;     
┌──────────────┐  
│ count_star() │  
├──────────────┤  
│ 2            │  
└──────────────┘  
Run Time (s): real 0.713 user 0.053176 sys 0.022546  

这里用的是外网endpoint, 读写速度已经非常快. 如果是内网环境, 速度更加可观.

参考

《DuckDB parquet 分区表 / Delta Lake(数据湖) 应用》

https://duckdb.org/docs/guides/import/s3_export

https://duckdb.org/docs/guides/import/s3_import

https://duckdb.org/docs/extensions/httpfs

https://duckdb.org/docs/sql/configuration

digoal's wechat