分析存储在 S3 或 S3 兼容对象存储服务上的数据 (Db2 Big SQL)
升级至 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 实例分配资源时完成。
在配置过程中到达连接远程数据源阶段时,请执行以下步骤。
- 选中配置对象存储库复选框。
- 在对象存储服务端点框中,输入所要连接的 S3 兼容对象存储服务的端点。
例如,s3.eu-gb.cloud-object-storage.appdomain.cloud。
- 在对象存储访问标识框中,输入该 S3 兼容对象存储服务的访问密钥。
- 在对象存储服务密钥框中,输入匹配的 secret 密钥。
- 如果要将访问限制在单个存储区,请选中指定对象存储区名称复选框,并提供存储区名称。
如果未勾选此复选框, Db2 Big SQL 则可以访问通过提供的端点和凭据可访问的任何存储桶。

有关安装的更多信息,请参阅《 安装 Db2 Big SQLDb2 Big SQL》。
识别要连接的 JDBCURL Db2 Big SQL
执行以下步骤以识别连接所需的 Db2 Big SQLJDBCURL。
- 作为已获授权访问该 Db2 Big SQL 实例的用户,请登录到 IBM Cloud Pak for Data Web 界面。
- 打开实例页面,找到已配置为访问对象存储的 Db2 Big SQL 实例。提示: 若在实例列表中未看到该 Db2 Big SQL 实例,可能是因为尚未获得管理员 Cloud Pak for Data 或创建该 Db2 Big SQL 实例的用户授予的访问权限。
- 点击实例 Db2 Big SQL 名称。
实例 Db2 Big SQL 详情页面打开。
- 在访问权信息部分,确认 JDBC URL 字段显示了外部主机名 • 非 SSL 参数。
如果您看不到外部主机名 • 非 SSL,请单击“编辑”图标并更新参数。
图 2。 Db2 Big SQL 实例页面 
- 复制 JDBC URL。
下一节需要使用该 URL。
- 退出 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子句将表存储在同一目录中。 源表和目标表的文件格式应保持一致。
CREATE EXTERNAL HADOOP TABLE customer
LIKE 's3a://monsoon/customer/customer.parquet'
STORED AS PARQUET
LOCATION 's3a://monsoon/customer';有关更多信息,请参阅 CREATE TABLE (HADOOP) 语句。