

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 在 Amazon Redshift 中查询复制的数据
<a name="zero-etl-using.querying-and-creating-materialized-views"></a>

将数据添加到源后，这些数据将近乎实时地复制到 Amazon Redshift 数据仓库中，随时可供查询。有关集成指标和表统计信息的信息，请参阅[零 ETL 集成的指标](zero-etl-using.metrics.md)。

**注意**  
由于数据库与 MySQL 中的架构相同，因此 MySQL 数据库级别映射到 Amazon Redshift 架构级别。当您查询从 Aurora MySQL 或 RDS for MySQL 复制的数据时，请注意这种映射差异。

**查询复制的数据**

1. 导航到 Amazon Redshift 控制台并选择**查询编辑器 v2**。

1. 连接到您的 Amazon Redshift Serverless 工作组或 Amazon Redshift 预置集群，然后从下拉菜单中选择您的数据库。

1. 使用 SELECT 语句，选择从您在源中创建的架构和表中复制的所有数据。为了区分大小写，请对架构、表和列名使用双引号 (" ")。例如：

   ```
   SELECT * FROM "schema_name"."table_name";
   ```

   您也可以使用 Amazon Redshift 数据 API 查询数据。

## 使用实体化视图查询复制的数据
<a name="zero-etl-using.transforming"></a>

您可以在本地 Amazon Redshift 数据库中创建实体化视图，以转换通过零 ETL 集成复制的数据。连接到您的本地数据库，并使用跨数据库查询来访问目标数据库。您可以使用完全限定对象名称（采用三部分表示法，即：目标数据库名称.架构名称.表名称），也可以创建引用目标数据库架构对（使用两部分表示法，即：外部架构名称.表名称）。有关跨数据库查询的更多信息，请参阅[跨数据库查询数据](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html)。

使用以下示例，从源 *tickit\$1zetl* 创建样本数据并插入到 *sales\$1zetl* 和 *event\$1zetl* 表中。这些表复制到 Amazon Redshift 数据库 *zetl\$1int\$1db* 中。

```
CREATE TABLE sales_zetl (
        salesid integer NOT NULL primary key,
        eventid integer NOT NULL,
        pricepaid decimal(8, 2)
);
 
CREATE TABLE event_zetl (
        eventid integer NOT NULL PRIMARY KEY,
        eventname varchar(200)
);
       
INSERT INTO sales_zetl VALUES(1, 1, 3.33);
INSERT INTO sales_zetl VALUES(2, 2, 4.44);
INSERT INTO sales_zetl VALUES(3, 2, 5.55);
 
INSERT INTO event_zetl VALUES(1, "Event 1");
INSERT INTO event_zetl VALUES(2, "Event 2");
```

您可以使用三部分表示法创建一个实体化视图，以获取每场活动的总销售额：

```
--three part notation zetl-database-name.schema-name.table-name 
CREATE MATERIALIZED VIEW mv_transformed_sales_per_event_3p 
AUTO REFRESH YES
AS
(SELECT eventname, sum(pricepaid) as total_price
FROM  zetl_int_db.tickit_zetl.sales_zetl S, zetl_int_db.tickit_zetl.event_zetl E
WHERE S.eventid = E.eventid
GROUP BY 1);
```

您可以使用两部分表示法创建一个实体化视图，以获取每场活动的总销售额：

```
--two part notation external-schema-name.table-name notation
CREATE EXTERNAL schema ext_tickit_zetl
FROM REDSHIFT
DATABASE zetl_int_db
SCHEMA tickit_zetl;
 
CREATE MATERIALIZED VIEW mv_transformed_sales_per_event_2p
AUTO REFRESH YES
AS
(
    SELECT eventname, sum(pricepaid) as total_price
    FROM  ext_tickit_zetl.sales_zetl S, ext_tickit_zetl.event_zetl E
    WHERE S.eventid = E.eventid
    GROUP BY 1  
);
```

要查看您创建的实体化视图，请使用以下示例。

```
SELECT * FROM mv_transformed_sales_per_event_3p;
 
+-----------+-------------+
| eventname | total_price |
+-----------+-------------+
| Event 1   | 3.33        |
| Event 2   | 9.99        |
+-----------+-------------+
 
SELECT * FROM mv_transformed_sales_per_event_2p;
 
+-----------+-------------+
| eventname | total_price |
+-----------+-------------+
| Event 1   | 3.33        |
| Event 2   | 9.99        |
+-----------+-------------+
```

## 从 DynamoDB 查询复制的数据
<a name="zero-etl-using.querying-ddb"></a>

当您将数据从 Amazon DynamoDB 复制到 Amazon Redshift 数据库时，这些数据存储在实体化视图中数据类型为 SUPER 的列中。

在本示例中，以下数据存储在 DynamoDB 中。

```
{
    "key1": {
        "S": "key_1"
    },
    "key2": {
        "N": 0
    },
    "payload": {
        "L": [
            {
                "S": "sale1"
            },
            {
                "S": "sale2"
            },
        ]
    },
}
```

Amazon Redshift 实体化视图的定义如下。

```
CREATE MATERIALIZED VIEW mv_sales
                    BACKUP NO
                    AUTO REFRESH YES
                    AS
                    SELECT "value"."payload"."L"[0]."S"::VARCHAR AS first_payload
                    FROM public.sales;
```

要查看实体化视图中的数据，请运行 SQL 命令。

```
SELECT first_payload FROM mv_sales;
```