DuckDB SQL开发快速入门

更新时间:
复制为 MD 格式

本文通过一个完整的示例,帮助您快速了解如何在EMR Serverless Spark中使用DuckDB SQL进行数据分析。示例将演示如何创建DuckDB会话、读取OSS上的CSV数据文件、执行查询分析。

场景说明

假设您是一名数据分析师,需要分析存储在OSS上的电商订单数据。订单数据以CSV格式存储,包含订单ID、客户名称、商品名称、数量、单价和订单日期。您需要完成以下分析任务:

  • 查看订单数据的整体情况。

  • 统计各商品的销售总额。

示例订单数据(demo.csv)内容如下:

order_id,customer,product,quantity,price,order_date
1001,Alice,Laptop,1,6999.00,2024-01-15
1002,Bob,Wireless Mouse,2,129.00,2024-01-15
1003,Charlie,Mechanical Keyboard,1,459.00,2024-01-16
1004,Alice,Monitor,1,2499.00,2024-01-16
1005,David,Wireless Mouse,3,129.00,2024-01-17
1006,Bob,Laptop,1,6999.00,2024-01-17
1007,Charlie,USB Hub,2,89.00,2024-01-18
1008,Alice,Mechanical Keyboard,1,459.00,2024-01-18
说明

请将示例数据上传至您的OSS存储空间。后续示例中的OSS路径oss://your-bucket/demo/orders.csv请替换为实际路径。

前提条件

  • 已创建Serverless Spark工作空间。具体操作,请参见创建工作空间

  • 已开通OSS服务并创建存储空间,且Serverless Spark工作空间的执行角色具备对该存储空间的访问权限。

步骤一:创建DuckDB会话

  1. 登录E-MapReduce控制台

  2. 在左侧导航栏,选择EMR Serverless > Spark

  3. Spark页面,单击目标工作空间名称。

  4. 在左侧导航栏,单击会话管理

  5. 会话管理页面,单击DuckDB会话页签。

  6. 单击创建DuckDB会话,填写会话名称(例如duckdb-demo),选择部署队列和引擎版本,填写需要的资源配置,单击创建

  7. 等待会话状态变为运行中

更多会话配置说明,请参见管理DuckDB会话

步骤二:创建DuckDB SQL任务

  1. 在左侧导航栏,单击数据开发

  2. 单击新建任务,在对话框中选择交互式开发 > DuckDB SQL,输入任务名称(例如orders-analysis),单击确定

  3. 在右上角选择已创建的DuckDB会话duckdb-demo

步骤三:查看订单数据

在任务编辑器中输入以下SQL语句,读取OSS上的CSV文件并查看数据。请将示例中的OSS路径替换为您的实际路径。

  1. 查看订单数据全部内容。

    SELECT * FROM 'oss://your-bucket/demo/orders.csv';

    返回结果如下:

    order_id

    customer

    product

    quantity

    price

    order_date

    1001

    Alice

    Laptop

    1

    6999.00

    2024-01-15

    1002

    Bob

    Wireless Mouse

    2

    129.00

    2024-01-15

    1003

    Charlie

    Mechanical Keyboard

    1

    459.00

    2024-01-16

    1004

    Alice

    Monitor

    1

    2499.00

    2024-01-16

    1005

    David

    Wireless Mouse

    3

    129.00

    2024-01-17

    1006

    Bob

    Laptop

    1

    6999.00

    2024-01-17

    1007

    Charlie

    USB Hub

    2

    89.00

    2024-01-18

    1008

    Alice

    Mechanical Keyboard

    1

    459.00

    2024-01-18

  2. 查看数据总量和日期范围。

    SELECT
      count(*) AS total_orders,
      count(DISTINCT customer) AS total_customers,
      count(DISTINCT product) AS total_products,
      min(order_date) AS first_date,
      max(order_date) AS last_date
    FROM 'oss://your-bucket/demo/orders.csv';

    预期返回结果如下:

    total_orders

    total_customers

    total_products

    first_date

    last_date

    8

    4

    5

    2024-01-15

    2024-01-18

步骤四:分析订单数据

  1. 统计各商品的销售总额,并按销售额降序排列。

    SELECT
      product AS product_name,
      sum(quantity) AS total_qty,
      sum(quantity * price) AS total_amount
    FROM 'oss://your-bucket/demo/orders.csv'
    GROUP BY product
    ORDER BY total_amount DESC;

    预期返回结果如下:

    product_name

    total_qty

    total_amount

    Laptop

    2

    13998.00

    Monitor

    1

    2499.00

    Mechanical Keyboard

    2

    918.00

    Wireless Mouse

    5

    645.00

    USB Hub

    2

    178.00

  2. 统计各客户的消费情况。

    SELECT
      customer AS customer_name,
      count(*) AS order_count,
      sum(quantity * price) AS total_spent
    FROM 'oss://your-bucket/demo/orders.csv'
    GROUP BY customer
    ORDER BY total_spent DESC;

    预期返回结果如下:

    customer_name

    order_count

    total_spent

    Alice

    3

    9957.00

    Bob

    2

    7257.00

    Charlie

    2

    637.00

    David

    1

    387.00

后续步骤