

# Azure SQL 连接
<a name="aws-glue-programming-etl-connect-azuresql-home"></a>

在 AWS Glue 4.0 及更高版本中，您可以使用 AWS Glue for Spark 来读取和写入 Azure SQL 托管实例中的表。您可以使用 SQL 查询来定义要从 Azure SQL 中读取的信息。您可以通过 AWS Glue 连接并使用存储在 AWS Secrets Manager 中的用户名和密码凭证连接到 Azure SQL。

有关 Azure SQL 的更多信息，请参阅 [Azure SQL 文档](https://azure.microsoft.com/en-us/products/azure-sql)。

## 配置 Azure SQL 连接
<a name="aws-glue-programming-etl-connect-azuresql-configure"></a>

要从 AWS Glue 连接到 Azure SQL，您需要创建 Azure SQL 凭证并将其存储在一个 AWS Secrets Manager 密钥中，然后将该密钥关联到某个 Azure SQL AWS Glue 连接。

**配置 Azure SQL 连接：**

1. 在 AWS Secrets Manager 中，使用您的 Azure SQL 凭证创建密钥。要在 Secrets Manager 中创建密钥，请按照 AWS Secrets Manager 文档中[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html)中的教程进行操作。创建密钥后，保留密钥名称 *secretName*，以供下一步使用。
   + 在选择**键/值对**时，请使用键 `user` 和值 *azuresqlUsername* 创建一个键值对。
   + 在选择**键/值对**时，请使用键 `password` 和值 *azuresqlPassword* 创建一个键值对。

1. 在 AWS Glue 控制台中，按照 [添加 AWS Glue 连接](console-connections.md) 中的步骤创建一个连接。创建连接后，保留连接名为 *connectionName*，以供未来在 AWS Glue 中使用。
   + 选择**连接类型**时，请选择 Azure SQL。
   + 在提供 **Azure SQL URL** 时，请提供 JDBC 端点的 URL。

      该 URL 必须为以下格式：`jdbc:sqlserver://databaseServerName:databasePort;databaseName=azuresqlDBname;`。

     AWS Glue 需要以下 URL 属性：
     + `databaseName` – Azure SQL 中要连接的默认数据库。

     有关 Azure SQL 托管实例的 JDBC URL 的更多信息，请参阅 [Microsoft 文档](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=azuresqldb-mi-current)。
   + 选择 **AWS 密钥**时，请提供 *secretName*。

创建 AWS Glue Azure SQL 连接后，您需要完成以下操作，然后才能运行 AWS Glue 作业：
+ 向与您的 AWS Glue 作业关联的 IAM 角色授予读取 *secretName* 的权限。
+ 在 AWS Glue 作业配置中，提供 *connectionName* 作为**附加网络连接**。

## 读取 Azure SQL 表
<a name="aws-glue-programming-etl-connect-azuresql-read"></a>

**先决条件** 
+ 您要读取的 Azure SQL 表。您将需要表的标识信息 *databaseName* 和 *tableIdentifier*。

  Azure SQL 表由其数据库、Schema 和表名来标识。连接到 Azure SQL 时，必须提供数据库名和表名。如果 Schema 不是默认值“public”，则还必须提供 Schema。数据库通过 *connectionName* 中的 URL 属性来提供，Schema 和表名通过 `dbtable` 来提供。
+ 为了提供身份验证信息而配置的 AWS Glue Azure SQL 连接。完成上一节“配置 Azure SQL 连接”中的步骤**，以配置您的身份验证信息。您需要 AWS Glue 连接的名称 *connectionName*。

例如：

```
azuresql_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

您还可以提供 SELECT SQL 查询来筛选返回到 DynamicFrame 的结果。您将需要配置 `query`。

例如：

```
azuresql_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## 写入 Azure SQL 表
<a name="aws-glue-programming-etl-connect-azuresql-write"></a>

此示例会将来自现有 DynamicFrame *dynamicFrame* 的信息写入 Azure SQL。如果表中已经含有信息，AWS Glue 会将来自 DynamicFrame 的数据附加到现有信息之后。

**先决条件** 
+ 您要写入的 Azure SQL 表。您将需要表的标识信息 *databaseName* 和 *tableIdentifier*。

  Azure SQL 表由其数据库、Schema 和表名来标识。连接到 Azure SQL 时，必须提供数据库名和表名。如果 Schema 不是默认值“public”，则还必须提供 Schema。数据库通过 *connectionName* 中的 URL 属性来提供，Schema 和表名通过 `dbtable` 来提供。
+ Azure SQL 身份验证信息。完成上一节“配置 Azure SQL 连接”中的步骤**，以配置您的身份验证信息。您需要 AWS Glue 连接的名称 *connectionName*。

例如：

```
azuresql_write = glueContext.write_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

## Azure SQL 连接选项参考
<a name="aws-glue-programming-etl-connect-azuresql-reference"></a>
+ `connectionName` – 必需。用于读/写。为了向您的连接方法提供身份验证信息而配置的 AWS Glue Azure SQL 连接的名称。
+ `databaseName` - 用于读/写。有效值：Azure SQL 数据库名。要连接的 Azure SQL 数据库的名称。
+ `dbtable` – 对于写入为必填项，对于读取也为必填项，但提供了 `query` 时除外。用于读/写。有效值：Azure SQL 表名或用句点分隔的 Schema 名/表名组合。用于指定表和 Schema，以标识要连接的表。默认 Schema 为“public”。如果您的表并非使用默认 Schema，请在表单 `schemaName.tableName` 中提供此信息。
+ `query` – 用于读取。用来定义从 Azure SQL 读取数据时要检索的内容的 Transact-SQL SELECT 查询。有关更多信息，请参阅 [Microsoft 文档](https://learn.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql?view=azuresqldb-mi-current)。