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

重要信息: IBM Cloud Pak® for Data 4.6 版本将于 2025 年 7 月 31 日结束支持 (EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

IBM Cloud Pak for Data 4.6 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

您可以使用 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 SQL 的更多信息,请参阅安装 Db2 Big SQL

标识用于连接到 Db2 Big SQL 的 JDBC URL

执行以下步骤以识别连接到 Db2 Big SQL所需的 JDBC URL 。

  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 Web 界面注销。

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

从 JDBC 交互式客户机 (例如 Jupyter Notebook) 中,可以根据存储在 Db2 Big SQL 实例所连接到的对象存储库服务上的存储区中的数据创建表。 使用先前部分中标识的 URL 将 Db2 Big SQL 连接到对象存储服务。

在以下示例中,该语句期望存在具有目录 tpcds/customer 的存储区 s3bucket ,并包含要创建的 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 类型,因为这会导致存储需求增加,并且可能会降低性能。 请参见数据类型和性能。 另请参阅 " 字符串 "。 确保正确定义分区列的数据类型 (根据需要改变数据类型) 至关重要。
例如:
CREATE EXTERNAL HADOOP TABLE customer
  LIKE 's3a://monsoon/customer/customer.parquet'
  STORED AS PARQUET
  LOCATION 's3a://monsoon/customer';

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