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

有关安装 Db2 Big SQL 的更多信息,请参阅安装 Db2 Big SQL。
标识用于连接到 Db2 Big SQL 的 JDBC URL
执行以下步骤以识别连接到 Db2 Big SQL所需的 JDBC URL 。
- 作为被授予 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 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 子句将表存储在同一目录中。 源表和目标表的文件格式应该相同。
CREATE EXTERNAL HADOOP TABLE customer
LIKE 's3a://monsoon/customer/customer.parquet'
STORED AS PARQUET
LOCATION 's3a://monsoon/customer';更多信息,请参阅 CREATE TABLE (HADOOP) 语句。