

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

在 Amazon Glue 4.0 及更高版本中，您可以使用 Amazon Glue for Spark 来读取和写入 Azure SQL 托管实例中的表。您可以使用 SQL 查询来定义要从 Azure SQL 中读取的信息。您可以通过 Amazon Glue 连接并使用存储在 Amazon 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>

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

**配置 Azure SQL 连接：**

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

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

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

     Amazon 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)。
   + 选择 **Amazon 密钥**时，请提供 {{secretName}}。

创建 Amazon Glue Azure SQL 连接后，您需要完成以下操作，然后才能运行 Amazon Glue 作业：
+ 向与您的 Amazon Glue 作业关联的 IAM 角色授予读取 {{secretName}} 的权限。
+ 在 Amazon 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` 来提供。
+ 为了提供身份验证信息而配置的 Amazon Glue Azure SQL 连接。完成上一节“配置 Azure SQL 连接”中的步骤**，以配置您的身份验证信息。您需要 Amazon 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。如果表中已经含有信息，Amazon Glue 会将来自 DynamicFrame 的数据附加到现有信息之后。

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

  Azure SQL 表由其数据库、Schema 和表名来标识。连接到 Azure SQL 时，必须提供数据库名和表名。如果 Schema 不是默认值“public”，则还必须提供 Schema。数据库通过 {{connectionName}} 中的 URL 属性来提供，Schema 和表名通过 `dbtable` 来提供。
+ Azure SQL 身份验证信息。完成上一节“配置 Azure SQL 连接”中的步骤**，以配置您的身份验证信息。您需要 Amazon 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` – 必需。用于读/写。为了向您的连接方法提供身份验证信息而配置的 Amazon 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)。