从 watsonx.data 查询数据

准备工作

在示例中,使用的是 2021 年 1 月和 2022 年 1 月公开的黄色出租车“纽约出租车之旅记录数据 和”{: external}。 要遵循此示例,请确保数据位于可访问的S3存储桶中,并且表已加载到watsonx.data中的HiveMetastore 服务器 (HMS) 的ApacheIceberg 表中。

1. 使用必需的 metastoreuri 创建数据库。

外部数据源允许管理员授予对S3/Azure访问权限,而无需直接向用户提供密钥。

示例S3):

LOCALDB.ADMIN(ADMIN)=> create database mylake with metastoreuri 'thrift://mymetastoreserverhostname:9083' catalogtype 'hive' on awss3 using ( ACCESSKEYID 'xxxx' SECRETACCESSKEY 'xxxx' BUCKET 'example-bucket' REGION 'us-east-1');
NOTICE:  589 tables from the datalake are available in MYLAKE

示例Azure):

create database mylake with metastoreuri 'thrift://mymetastoreserverhostname:9083' catalogtype 'hive' on azureblob using (ACCOUNT 'xxxx' KEY 'xxxx' CONTAINER 'example_container');
NOTICE:  589 tables from the datalake are available in MYLAKE

有关Azure 数据源选项和身份验证选项的详细信息,请参阅 创建外部数据源

一个数据库只能分配一个数据源,如果需要另一个数据源,则必须创建另一个数据库。

2.连接数据库。

LOCALDB.ADMIN(ADMIN)=> \c mylake

现在,您已连接到 mylake 数据库。

3. 列出可用模式。

MYLAKE.NETEZZA_SCHEMA(ADMIN)=> show schema;

缺省情况下,您将连接到名为 NETEZZA_SCHEMA 的保留模式。

输出:

DATABASE |                   SCHEMA                   | OWNER
----------+--------------------------------------------+-------
MYLAKE   | DEFAULT                                    | ADMIN
MYLAKE   | DEFINITION_SCHEMA                          | ADMIN
MYLAKE   | DEMO                                       | ADMIN
MYLAKE   | INFORMATION_SCHEMA                         | ADMIN
MYLAKE   | NETEZZA_SCHEMA                             | ADMIN
MYLAKE   | TAXIDATA                                   | ADMIN
MYLAKE   | TEST                                       | ADMIN
(7 rows)

4。从模式列表中,设置要连接到的模式。

MYLAKE.NETEZZA_SCHEMA(ADMIN)=> set schema taxidata;
SET SCHEMA

您还可以使用完整路径 **mydb.myschema.mytable 中的 SELECT ***来查询数据。

5. 列出可用表。

MYLAKE.TAXIDATA(ADMIN)=> show table;

输出:

DATABASE |  SCHEMA  |          TABLE           |      TYPE      | OWNER
----------+----------+--------------------------+----------------+-------
MYLAKE   | TAXIDATA | YELLOW_TAXI_JANUARY_2022 | DATALAKE TABLE | ADMIN
MYLAKE   | TAXIDATA | YELLOW_TAXI_JANUARY_2021 | DATALAKE TABLE | ADMIN
(2 rows)

6. 所需表中选择 *。

MYLAKE.TAXIDATA(ADMIN)=> select * from YELLOW_TAXI_JANUARY_2021 limit 1;

输出:

VENDORID | TPEP_PICKUP_DATETIME | TPEP_DROPOFF_DATETIME | PASSENGER_COUNT | TRIP_DISTANCE | RATECODEID | STORE_AND_FWD_FLAG | PULOCATIONID | DO
LOCATIONID | PAYMENT_TYPE | FARE_AMOUNT | EXTRA | MTA_TAX | TIP_AMOUNT | TOLLS_AMOUNT | IMPROVEMENT_SURCHARGE | TOTAL_AMOUNT | CONGESTION_SURCHARGE |AIRPORT_FEE
----------+----------------------+-----------------------+-----------------+---------------+------------+--------------------+--------------+---
-----------+--------------+-------------+-------+---------+------------+--------------+-----------------------+--------------+------------------
----+-------------
        1 | 2021-01-01 00:30:10  | 2021-01-01 00:36:12   |               1 |           2.1 |          1 | N                  |          142 |
        43 |            2 |           8 |     3 |     0.5 |          0 |            0 |                   0.3 |         11.8 |
2.5 |
(1 row)
  • 要确定 2022 年 1 月在纽约乘坐出租车的乘客总数,请运行:

    MYLAKE.TAXIDATA(ADMIN)=> select sum(PASSENGER_COUNT) FROM YELLOW_TAXI_JANUARY_2022;
    

    输出:

    SUM
    ---------
    3324167
    (1 row)
    
  • 要确定在凌晨 1:00 到 6:00 之间乘客最多的供应商,请运行:

    MYLAKE.TAXIDATA(ADMIN)=> SELECT VENDORID, SUM(PASSENGER_COUNT) as "passengers" FROM YELLOW_TAXI_JANUARY_2022 WHERE TPEP_PICKUP_DATETIME::time > '1:00am'AND "TPEP_PICKUP_DATETIME"::time < '6:00am' GROUP BY VENDORID;
    

    输出:

    VENDORID | passengers
    ----------+------------
           2 |     122251
           1 |      40807
           6 |
           5 |
    (4 rows)