分析存储在 S3 或 S3 兼容对象存储服务上的数据 (Db2 Big SQL)

重要提示:4.8IBM Cloud Pak® for Data 版本将于2025年7月31日达到支持终止(EOS)。 有关更多信息,请参阅 4.X 版本 IBM Cloud Pak for Data 的服务终止公告

升级至 IBM Software Hub 版本 5.1 ,在 4.8 版本达到支持 IBM Cloud Pak for Data 终止前完成升级。 有关更多信息,请参阅IBM Cloud Pak for Data 版本 4.8 升级到 IBM 的说明: Software Hub 版本 5.1。

您可以使用 Db2® Big SQL 该工具访问存储在私有或公有云对象存储中的数据(这些存储需通过与 S3 兼容的接口访问),然后对这些数据运行SQL分析。

开始之前

您必须有一个数据文件,该文件存储在存储区中,或者存储在 IBM Cloud Object Store 之类的对象存储服务中。

配置 Db2 Big SQL 连接到兼容 S3 或 S3 的对象存储服务

Db2 Big SQL 实例必须配置为能够访问存储在 S3 兼容对象存储服务中的数据。 此配置在您为 Db2 Big SQL 实例分配资源时完成。

在配置过程中到达连接远程数据源阶段时,请执行以下步骤。

  1. 选中配置对象存储库复选框。
  2. 对象存储服务端点框中,输入所要连接的 S3 兼容对象存储服务的端点。

    例如,s3.eu-gb.cloud-object-storage.appdomain.cloud

  3. 对象存储访问标识框中,输入该 S3 兼容对象存储服务的访问密钥。
  4. 对象存储服务密钥框中,输入匹配的 secret 密钥。
  5. 如果要将访问限制在单个存储区,请选中指定对象存储区名称复选框,并提供存储区名称。

    如果未勾选此复选框, Db2 Big SQL 则可以访问通过提供的端点和凭据可访问的任何存储桶。

图 1。 指定对象存储配置信息
对象存储对话框,用于输入配置信息。
重要提示: 创建实例 Db2 Big SQL 的用户不具备该实例的 JDBC 访问权限。 该用户必须将访问权授予其他用户,然后,这些用户就可以访问该实例。 有关如何管理对 Db2 Big SQL 实例 Db2 Big SQL 访问权限的更多信息,请参阅《配置、监控和管理实例的访问权限》。

有关安装的更多信息,请参阅《 安装 Db2 Big SQLDb2 Big SQL》。

识别要连接的 JDBCURL Db2 Big SQL

执行以下步骤以识别连接所需的 Db2 Big SQLJDBCURL。

  1. 作为已获授权访问该 Db2 Big SQL 实例的用户,请登录到 IBM Cloud Pak for Data Web 界面。
  2. 打开实例页面,找到已配置为访问对象存储的 Db2 Big SQL 实例。
    提示: 若在实例列表中未看到该 Db2 Big SQL 实例,可能是因为尚未获得管理员 Cloud Pak for Data 或创建该 Db2 Big SQL 实例的用户授予的访问权限。
  3. 点击实例 Db2 Big SQL 名称。

    实例 Db2 Big SQL 详情页面打开。

  4. 访问权信息部分,确认 JDBC URL 字段显示了外部主机名 • 非 SSL 参数。

    如果您看不到外部主机名 • 非 SSL,请单击“编辑”图标并更新参数。

    图 2。 Db2 Big SQL 实例页面
    显示 Db2 Big SQL 实例详细信息的页面,包括实例名称、版本及访问信息。
  5. 复制 JDBC URL。

    下一节需要使用该 URL。

  6. 退出 Cloud Pak for Data 网页界面。

根据存储在对象存储服务上的数据创建表

从 JDBC 交互式客户端(例如Jupyter笔记本)中,您可以从存储在对象存储服务中的数据创建表格,该服务与 Db2 Big SQL 实例相连。 使用上一节中确定的 URL 连接 Db2 Big SQL 到对象存储服务。

在下面的示例中,该语句要求存在一个包含目录的 s3bucket 存储 tpcds/customer 桶,且该存储桶需包含正在创建的 customer 表的数据文件。 数据文件应为使用 | 字符作为分隔符的值分隔文件格式。

CREATE EXTERNAL HADOOP TABLE customer
(
    c_customer_sk             int                  not null,
    c_customer_id             varchar(16)          not null,
    c_current_cdemo_sk        int                          ,
    c_current_hdemo_sk        int                          ,
    c_current_addr_sk         int                          ,
    c_first_shipto_date_sk    int                          ,
    c_first_sales_date_sk     int                          ,
    c_salutation              varchar(10)                  ,
    c_first_name              varchar(20)                  ,
    c_last_name               varchar(30)                  ,
    c_preferred_cust_flag     varchar(1)                   ,
    c_birth_day               bigint                       ,
    c_birth_month             bigint                       ,
    c_birth_year              bigint                       ,
    c_birth_country           varchar(20)                  ,
    c_login                   varchar(13)                  ,
    c_email_address           varchar(50)                  ,
    c_last_review_date        int
)
STORED AS TEXTFILE
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LOCATION 's3a://s3bucket/tpcds/customer'
TBLPROPERTIES('serialization.null.format'='');
注意:LOCATION 子句必须始终指定包含正在创建的表的文件的目录。 这些文件必须具有相同的结构。 如果这些文件具有不同的结构,并且要为每个结构创建不同的表,那么这些文件必须位于不同的目录中。

现在,可以使用 SQL 来查询该表。 例如,

[localhost] [user1] 1> SELECT c_birth_country, count (c_customer_sk) AS count
[localhost] [user1] 2> FROM customer
[localhost] [user1] 3> GROUP BY c_birth_country
[localhost] [user1] 4> HAVING count > 500
[localhost] [user1] 5> ORDER BY count DESC;
+-----------------+-------+
| C_BIRTH_COUNTRY | COUNT |
+-----------------+-------+
| [NULL]          | 3439  |
| VANUATU         |  532  |
| BERMUDA         |  516  |
| LESOTHO         |  506  |
| MAURITIUS       |  506  |
| LIBERIA         |  501  |
+-----------------+-------+
6 rows in results (first row: 2.836s; total: 2.838s)
[localhost] [user1] 1>

LOCATION 子句所指定的路径中不存在任何数据文件时,创建表的操作会成功,但该表为空。 您可以使用 Db2 Big SQL 将数据插入表中。

从远程文件推断表结构

您可以使用 CREATE TABLE (HADOOP) 语句,根据特定文件格式的数据文件推断表结构。

在CREATE TABLE (HADOOP)语句中使用LIKE子句时,可指定表列的名称和类型应与指定 URL 路径下文件中的列尽可能相似。 若给定的 URL 指向某个目录,则从该目录中随机选取一个文件。 使用 STORED AS 子句指定文件格式,该格式必须为 ORC、PARQUET、PARQUETFILE、TEXTFILE 或 JSONFILE 之一。

默认情况下,新表将独立于由指定 URL 标识的目录进行存储。 不过,您可以使用LOCATION子句将表存储在同一目录中。 源表和目标表的文件格式应保持一致。

注意: 建议检查新创建表中各列的数据类型,以确保新表采用了准确且最优的数据类型。 如有必要,请使用 ALTER TABLE (HADOOP) 语句对表进行修改,以确保数据准确性和最佳性能,其中包括移除 STRING 类型。 不建议 Db2 Big SQL 在 中使用 STRING 类型,因为这会导致存储需求增加,并可能降低性能。 参见数据类型与性能。 另见 STRING。 确保分区列的数据类型定义正确至关重要,必要时需修改数据类型。
例如:
CREATE EXTERNAL HADOOP TABLE customer
  LIKE 's3a://monsoon/customer/customer.parquet'
  STORED AS PARQUET
  LOCATION 's3a://monsoon/customer';

有关更多信息,请参阅 CREATE TABLE (HADOOP) 语句