批量从对象存储导入数据

本文档详细介绍了如何使用Lakehouse的SQL引擎从对象存储中导入数据。目前,Lakehouse支持两种主要的数据导入模式:

  1. 使用Volume导入:通过创建和管理对象存储上的Volume来导入数据。
  2. 使用Copy命令导入:利用SQL的COPY命令直接从对象存储中加载数据。

参考文档

数据湖查询

COPY INTO

应用场景

  • 利用SQL引擎的性能优势快速读取大量数据,高效处理大规模数据集。
  • 支持在数据导入过程中使用SQL进行数据转换,实现ETL(Extract, Transform, Load)流程。
  • 建议在导入数据时选择通用型计算集群(GENERAL PURPOSE VIRTUAL CLUSTER),以适应批量作业和数据加载作业的需求。

使用限制

  • 对象存储支持:目前Volume的目标对象存储仅支持阿里云OSS和腾讯云COS。
  • 费用说明:从外部Volume下载文件可能会产生云账号的对象存储下载费用,具体费用请参考相应云服务商的计费说明。如果Lakehouse与对象存储位于同一地域,使用内网ENDPOINT可以避免额外费用。
  • 跨云导入:目前不支持跨云服务商导入数据(未来版本将支持)。

使用案例

使用Volume从OSS读取CSV数据导入

本文详细介绍了如何利用Lakehouse的Volume和COPY命令从阿里云对象存储服务(OSS)导入巴西电子商务的公共数据集。或者您可以直接通过链接直接下载本次案例的数据集然后上传到OSS中,该过程包括数据表的创建、对象存储连接的配置、Volume的管理以及数据的加载和状态检查。

前置条件

  • 确保已创建目标表brazilian_customer
create table brazilian_customer( 
  customer_id STRING,
  customer_unique_id STRING,
  customer_zip_code_prefix INT,
  customer_city STRING,
  customer_state STRING
  );
  • 对目标表具有INSERT权限。

创建CONNECTION和VOLUME用于连接对象存储

  • 创建一个STORAGE CONNECTION以存储和脱敏对象存储的连接信息,便于在Lakehouse中复用和管理。
  • 创建一个EXTERNAL VOLUME来管理OSS上的数据。
--存储对象存储的连接信息,在Lakhouse会对ak进行脱敏。同时connection可以方便多处复用
--endpoint使用的是oss内网因为和Lakehouse同时都在上海,所以内网可以直接连通
CREATE STORAGE CONNECTION  braziliandata_conn
    TYPE oss
    ENDPOINT = 'oss-cn-shanghai-internal.aliyuncs.com'
    access_id = 'xxxx'
    access_key = 'xxxx'
    comments = 'OSS public endpoint';
 --查看创建的conneciton
 SHOW CONNECTIONS;
--创建Volume用于管理对象存储上面的数据
CREATE EXTERNAL VOLUME braziliandata_csv
    location 'oss://yourbucketname/eCommerce/BrazilianECommerce/'
    using connection braziliandata_conn
    directory = (
        enable=true,
        auto_refresh=true
    );
  SHOW VOLUMES;

使用Volume加载数据

  • 指定Volume中需要读取的文件,可以在files参数中指定。
  • options中可以设置CSV文件的参数,如分隔符等,具体设置可参考文档。
  • 本案例中,将数据加载时进行转换,排除掉城市为‘curitiba’的记录。
--加载数据的时候做转化排除掉城市是‘curitiba’
insert into brazilian_customer
select * from volume braziliandata_csv (
  customer_id STRING,
  customer_unique_id STRING,
  customer_zip_code_prefix INT,
  customer_city STRING,
  customer_state STRING
)using csv 
 options(
    'header'='true',
    'sep'=','
 ) files('olist_customers_dataset.csv') 
 where customer_city !='curitiba';

查看导入数据的状态

在Lakehouse的作业运行历史中查看作业的执行状态,以确认数据导入是否成功。

使用COPY命令从OSS导入数据

本文介绍了如何使用Lakehouse的COPY命令从阿里云对象存储服务(OSS)导入巴西电子商务的公共数据集,或者您可以直接通过链接直接下载本次案例的数据集然后上传到OSS中。该过程涉及数据表的创建、连接和Volume的配置,以及数据的加载和状态检查。

前置条件

  • 确保已创建目标表brazilian_geolocation
create table brazilian_geolocation( 
  geolocation_zip_code_prefix INT,
  geolocation_lat DECIMAL(10,8),
  geolocation_lng DECIMAL(11,8),
  geolocation_city STRING,
  geolocation_state STRING
  );
  • 对目标表具有INSERT权限。

创建CONNECTION和VOLUME用于连接对象存储

  • 创建一个STORAGE CONNECTION来存储和脱敏对象存储的连接信息,以便在Lakehouse中多次复用和管理。

  • 创建一个EXTERNAL VOLUME来管理OSS上的数据。

    • --存储对象存储的连接信息,在Lakhouse会对ak进行脱敏。同时connection可以方便多处复用和管理
      --endpoint使用的是oss内网因为和Lakehouse同时都在上海,所以内网可以直接连通
      CREATE STORAGE CONNECTION  braziliandata_conn
          TYPE oss
          ENDPOINT = 'oss-cn-shanghai-internal.aliyuncs.com'
          access_id = 'xxxx'
          access_key = 'xxxx'
          comments = 'OSS public endpoint';
       --查看创建的conneciton
       SHOW CONNECTIONS;
      --创建Volume用于管理对象存储上面的数据
      CREATE EXTERNAL VOLUME braziliandata_csv
          location 'oss://czsampledata/eCommerce/BrazilianECommerce/'
          using connection braziliandata_conn
          directory = (
              enable=true,
              auto_refresh=true
          );
        SHOW VOLUMES;

使用COPY命令加载到表中数据

使用COPY命令将数据从OSS的Volume加载到brazilian_customer表中。

COPY  INTO brazilian_customer FROM VOLUME  
braziliandata_csv (
  customer_id STRING,
  customer_unique_id STRING,
  customer_zip_code_prefix INT,
  customer_city STRING,
  customer_state STRING
)using csv 
 options(
    'header'='true',
    'sep'=','
 ) files('olist_geolocation_dataset.csv') ;

查看导入数据的状态

在Lakehouse的作业运行历史中查看作业的执行状态,以确认数据导入是否成功。

联系我们
预约咨询
微信咨询
电话咨询