MySQL HeatWave 用户指南  / 第 6 章 HeatWave 快速入门  /  6.2 AirportDB 分析快速入门

6.2 AirportDB 分析快速入门

HeatWave airportdb 快速入门 将引导您使用 MySQL Shell Dump Load 实用程序将数据导入数据库系统,使用自动并行加载将数据加载到 HeatWave,以及运行查询。

描述了以下主题:

有关使用 airportdb示例数据库演示 HeatWave 的在线研讨会,请参阅 Turbocharge Business Insights with MySQL Database Service 和 HeatWave

先决条件

安装机场数据库

安装过程包括将 airportdb数据库下载到 Compute 实例,并使用 MySQL Shell Dump Loading 实用程序将数据从 Compute 实例导入到 MySQL DB 系统。有关此实用程序的信息,请参阅 转储加载实用程序

安装airportdb数据库:

  1. 下载airportdb示例数据库并解压缩。示例数据库以压缩的tar或 Zip 存档的airportdb形式提供以供下载 。下载大小约为 640 MB。

    wget https://downloads.mysql.com/docs/airport-db.tar.gz
    tar xvzf airport-db.tar.gz

    或者

    wget https://downloads.mysql.com/docs/airport-db.zip
    unzip airport-db.zip

    解压缩压缩的tar或 Zip 存档会生成一个名为 的目录 airport-db,其中包含数据文件。

  2. 启动 MySQL Shell 并连接到 MySQL 数据库系统端点。有关连接到数据库系统的其他信息,请参阅 使用 SSH 和 MySQL Shell 连接到 MySQL 数据库系统

    mysqlsh Username@DBSystem_IP_Address_or_Host_Name
  3. 使用 MySQL Shell Dump Loading Utility 将数据库加载airportdb到 MySQL DB 系统中 。

    MySQL>JS> util.loadDump("airport-db", {threads: 16, deferTableIndexes: "all", 
              ignoreVersion: true})
    笔记

    deferTableIndexes: "all"选项将创建二级索引推迟到加载表数据之后,这显着减少了加载时间。如果您打算airportdb与不使用二级索引的 HeatWave 一起使用,则可以通过指定 loadIndexes: "false"选项而不是来避免创建二级索引deferTableIndexes: "all"。有关 MySQL 转储加载选项的更多信息,请参阅 转储加载实用程序

将数据导入 MySQL 数据库系统后,您可以将表加载到 HeatWave 中。有关说明,请参阅 将 airportdb 加载到 HeatWave中。

将 airportdb 加载到 HeatWave 中

从 MySQL 数据库系统加载airportdb到 HeatWave:

笔记

如果您在 AWS 上使用 MySQL HeatWave,您还可以从 MySQL HeatWave 控制台加载数据。请参阅 MySQL HeatWave on AWS 服务指南中的 管理 HeatWave 数据。

  1. 启动 MySQL Shell 并连接到 MySQL 数据库系统的端点。

    mysqlsh Username@DBSystem_IP_Address_or_Host_Name
  2. 将 MySQL Shell 执行模式更改为 SQL 并运行以下自动并行加载命令以将 airportdb表加载到 HeatWave 中。

    MySQL>JS> \sql
    MySQL>SQL> CALL sys.heatwave_load(JSON_ARRAY('airportdb'), NULL);

    有关 Auto Parallel Load 实用程序的信息,请参阅 第 2.2.3 节 “使用 Auto Parallel Load 加载数据”

运行 airportdb 查询

将 airportdb 示例数据库表加载到 HeatWave 集群后,符合条件的查询将自动卸载到 HeatWave 集群以进行加速处理。运行查询:

笔记

如果您在 AWS 上使用 MySQL HeatWave,您还可以从 MySQL HeatWave 控制台中的查询编辑器运行查询。请参阅 MySQL HeatWave on AWS 服务指南中的 运行查询。

  1. 启动 MySQL Shell 并连接到 MySQL 数据库系统的端点:

    $> mysqlsh Username@DBSystem_IP_Address_or_Host_Name

    MySQL Shell 默认以 JavaScript 执行模式打开。

    MySQL>JS>
  2. 将 MySQL Shell 执行模式更改为 SQL:

    MySQL>JS> \sql
  3. 更改为airportdb数据库。

    MySQL>SQL> USE airportdb;
    Default schema set to `airportdb`.Fetching table and column names from `airportdb` for 
    auto-completion... Press ^C to stop.
  4. 在运行查询之前,使用它 EXPLAIN来验证查询是否可以卸载到 HeatWave 集群。例如:

    MySQL>SQL> EXPLAIN SELECT booking.price, count(*) FROM booking WHERE booking.price > 500
               GROUP BY booking.price ORDER BY booking.price LIMIT 10;
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: booking
       partitions: NULL
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 54081693
         filtered: 33.32999801635742
            Extra: Using where; Using temporary; Using filesort; Using secondary engine RAPID

    如果可以卸载查询, 则输出报告Extra中的列 。 EXPLAIN"Using secondary engine RAPID"

  5. 验证查询可以卸载后,运行查询并记下执行时间。

    MySQL>SQL> SELECT booking.price, count(*) FROM booking WHERE booking.price > 500
               GROUP BY booking.price ORDER BY booking.price LIMIT 10;
    +--------+----------+
    | price  | count(*) |
    +--------+----------+
    | 500.01 |      860 |
    | 500.02 |     1207 |
    | 500.03 |     1135 |
    | 500.04 |     1010 |
    | 500.05 |     1016 |
    | 500.06 |     1039 |
    | 500.07 |     1002 |
    | 500.08 |     1095 |
    | 500.09 |     1117 |
    | 500.10 |     1106 |
    +--------+----------+
    10 rows in set (0.0537 sec)
  6. 要将 HeatWave 执行时间与 MySQL 数据库系统执行时间进行比较,请禁用该 use_secondary_engine 变量以查看在 MySQL 数据库系统上运行相同查询需要多长时间;例如:

    MySQL>SQL> SET SESSION use_secondary_engine=OFF;
    MySQL>SQL> SELECT booking.price, count(*) FROM booking WHERE booking.price > 500 
               GROUP BY booking.price ORDER BY booking.price LIMIT 10;
    +--------+----------+
    | price  | count(*) |
    +--------+----------+
    | 500.01 |      860 |
    | 500.02 |     1207 |
    | 500.03 |     1135 |
    | 500.04 |     1010 |
    | 500.05 |     1016 |
    | 500.06 |     1039 |
    | 500.07 |     1002 |
    | 500.08 |     1095 |
    | 500.09 |     1117 |
    | 500.10 |     1106 |
    +--------+----------+
    10 rows in set (9.3859 sec)

对于airportdb您可以运行的其他示例数据库查询,请参阅 其他 airportdb 查询。有关运行查询的更多信息,请参阅 第 2.3 节,“运行查询”

额外的 airportdb 查询

本主题提供了额外的 airportdb 查询,您可以运行这些查询来测试 HeatWave 集群。

  • 查询 1:票数 > $500.00,按价格分组

    SELECT
        booking.price,
        count(*)
    FROM
        booking
    WHERE
        booking.price > 500
    GROUP BY
        booking.price
    ORDER BY
        booking.price
    LIMIT
        10;
  • 查询 2:按国家、按航空公司划分的乘客平均年龄

    SELECT
        airline.airlinename,
        AVG(datediff(departure,birthdate)/365.25) as avg_age,
        count(*) as nb_people
    FROM
        booking, flight, airline, passengerdetails
    WHERE
        booking.flight_id=flight.flight_id AND
        airline.airline_id=flight.airline_id AND
        booking.passenger_id=passengerdetails.passenger_id AND
        country IN ("SWITZERLAND", "FRANCE", "ITALY")
    GROUP BY
        airline.airlinename
    ORDER BY
        airline.airlinename, avg_age
    LIMIT 10;
  • 查询 3:从美国机场出发的航空公司的大多数机票销售

    SELECT
        airline.airlinename,
        SUM(booking.price) as price_tickets,
        count(*) as nb_tickets
    FROM
        booking, flight, airline, airport_geo
    WHERE
        booking.flight_id=flight.flight_id AND
        airline.airline_id=flight.airline_id AND
        flight.from=airport_geo.airport_id AND
        airport_geo.country = "UNITED STATES"
    GROUP BY
        airline.airlinename
    ORDER BY
        nb_tickets desc, airline.airlinename
    LIMIT 10;

卸载 airportdb 表

airportdb可以使用以下语句从 HeatWave 卸载表:

笔记

如果您在 AWS 上使用 MySQL HeatWave,您还可以从 MySQL HeatWave 控制台卸载数据。请参阅 MySQL HeatWave on AWS 服务指南中的 管理 HeatWave 数据。

USE airportdb;

ALTER TABLE booking SECONDARY_UNLOAD;
ALTER TABLE flight SECONDARY_UNLOAD;
ALTER TABLE flight_log SECONDARY_UNLOAD;
ALTER TABLE airport SECONDARY_UNLOAD;
ALTER TABLE airport_reachable SECONDARY_UNLOAD;
ALTER TABLE airport_geo SECONDARY_UNLOAD;
ALTER TABLE airline SECONDARY_UNLOAD;
ALTER TABLE flightschedule SECONDARY_UNLOAD;
ALTER TABLE airplane SECONDARY_UNLOAD;
ALTER TABLE airplane_type SECONDARY_UNLOAD;
ALTER TABLE employee SECONDARY_UNLOAD;
ALTER TABLE passenger SECONDARY_UNLOAD;
ALTER TABLE passengerdetails SECONDARY_UNLOAD;
ALTER TABLE weatherdata SECONDARY_UNLOAD;