

# Conector IBM Db2 AS/400 (Db2 iSeries) para Amazon Athena
<a name="connectors-ibm-db2-as400"></a>

O conector do Amazon Athena para Db2 AS/400 habilita o Amazon Athena a executar consultas SQL em seus bancos de dados IBM Db2 AS/400 (Db2 iSeries) usando o JDBC.

Esse conector pode ser registrado como um catálogo federado no Glue Data Catalog. Ele é compatível com controles de acesso a dados definidos no Lake Formation nos níveis de catálogo, banco de dados, tabela, coluna, linha e tag. Esse conector usa o Glue Connections para centralizar as propriedades de configuração no Glue.

## Pré-requisitos
<a name="connectors-db2as400-prerequisites"></a>
+ Implante o conector na sua Conta da AWS usando o console do Athena ou o AWS Serverless Application Repository. Para ter mais informações, consulte [Criar uma conexão de fonte de dados](connect-to-a-data-source.md) ou [Usar o AWS Serverless Application Repository para implantar um conector de fonte de dados](connect-data-source-serverless-app-repo.md).
+ Configura uma VPC e um grupo de segurança antes de usar esse conector. Para obter mais informações, consulte [Criar uma VPC para um conector de fonte de dados ou conexão do AWS Glue](athena-connectors-vpc-creation.md).

## Limitações
<a name="connectors-ibm-db2-as400-limitations"></a>
+ Não há suporte para operações de gravação de DDL.
+ Em uma configuração de multiplexador, o prefixo e o bucket de derramamento são compartilhados em todas as instâncias do banco de dados.
+ Quaisquer limites relevantes do Lambda. Para obter mais informações, consulte [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no *Guia do desenvolvedor do AWS Lambda*.
+ Em condições de filtro, você deve converter os tipos de dados date e timestamp para os tipos de dados apropriados.

## Termos
<a name="connectors-ibm-db2-as400-terms"></a>

Os termos a seguir estão relacionados ao conector Db2 AS/400.
+ **Instância do banco de dados**: qualquer instância de um banco de dados implantado on-premises, no Amazon EC2 ou no Amazon RDS.
+ **Manipulador**: um manipulador Lambda que acessa sua instância de banco de dados. Um manipulador pode ser para metadados ou para registros de dados.
+ **Manipulador de metadados**: um manipulador Lambda que recupera metadados da sua instância de banco de dados.
+ **Manipulador de registros**: um manipulador Lambda que recupera registros de dados da sua instância de banco de dados.
+ **Manipulador composto**: um manipulador Lambda que recupera tanto metadados quanto registros de dados da sua instância de banco de dados.
+ **Propriedade ou parâmetro**: uma propriedade do banco de dados usada pelos manipuladores para extrair informações do banco de dados. Você configura essas propriedades como variáveis de ambiente do Lambda.
+ **String de conexão**: uma string de texto usada para estabelecer uma conexão com uma instância de banco de dados.
+ **Catálogo**: um catálogo não AWS Glue registrado no Athena que é um prefixo obrigatório para a propriedade `connection_string`.
+ **Manipulador de multiplexação**: um manipulador Lambda que pode aceitar e usar várias conexões de banco de dados.

## Parâmetros
<a name="connectors-ibm-db2-as400-parameters"></a>

Use os parâmetros nesta seção para configurar o conector do Db2 AS/400.

**nota**  
Os conectores de fonte de dados do Athena criados a partir de 3 de dezembro de 2024 usam conexões do AWS Glue.  
Os nomes e definições dos parâmetros listados abaixo são para conectores de fonte de dados do Athena criados antes de 3 de dezembro de 2024. Eles podem diferir de suas [propriedades de conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) correspondentes. A partir de 3 de dezembro de 2024, use os parâmetros abaixo somente ao [implantar manualmente](connect-data-source-serverless-app-repo.md) uma versão anterior de um conector de fonte de dados do Athena.

### Conexões do Glue (recomendação)
<a name="connectors-ibm-db2-as400-gc"></a>

Recomendamos que você configure um conector do Db2 AS/400 usando um objeto de conexão do Glue. Para isso, defina a variável de ambiente `glue_connection` do Lambda do conector do Db2 AS/400 como o nome da conexão do Glue a ser usada.

**Propriedades das conexões do Glue**

Use o comando apresentado a seguir para obter o esquema de um objeto de conexão do Glue. Esse esquema contém todos os parâmetros que você pode usar para controlar a conexão.

```
aws glue describe-connection-type --connection-type DB2AS400
```

**Propriedades do ambiente do Lambda**
+ **glue\$1connection**: especifica o nome da conexão do Glue associada ao conector federado. 
+ **casing\$1mode** (Opcional): especifica como lidar com maiúsculas e minúsculas para nomes de esquemas e tabelas. O parâmetro `casing_mode` usa os seguintes valores para especificar o comportamento do mapeamento de maiúsculas e minúsculas:
  + **none**: não altera as maiúsculas e minúsculas dos nomes de esquema e tabela fornecidos. Esse é o padrão para conectores que têm uma conexão do Glue associada. 
  + **upper**: converte para maiúsculas todos os nomes de esquema e tabela fornecidos.
  + **lower**: converte para minúsculas todos os nomes de esquema e tabela fornecidos.

**nota**  
Todos os conectores que usam conexões do Glue devem usar o AWS Secrets Manager para armazenar credenciais.
O conector do Db2 AS/400 criado usando conexões do Glue não é compatível com o uso de um manipulador de multiplexação.
O conector do Db2 AS/400 criado usando conexões do Glue é compatível apenas com o `ConnectionSchemaVersion` 2.

### Conexões legadas
<a name="connectors-ibm-db2-as400-legacy"></a>

#### String de conexão
<a name="connectors-ibm-db2-as400-connection-string"></a>

Use uma string de conexão JDBC no seguinte formato para se conectar a uma instância de banco de dados.

```
db2as400://${jdbc_connection_string}
```

#### Uso de um manipulador de multiplexação
<a name="connectors-ibm-db2-as400-using-a-multiplexing-handler"></a>

É possível usar um multiplexador para se conectar a várias instâncias de banco de dados com uma única função do Lambda. As solicitações são encaminhadas por nome do catálogo. Use as seguintes classes no Lambda.


****  

| Manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2MuxCompositeHandler | 
| Manipulador de metadados | Db2MuxMetadataHandler | 
| Manipulador de registros | Db2MuxRecordHandler | 

##### Parâmetros do manipulador de multiplexação
<a name="connectors-ibm-db2-as400-multiplexing-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obrigatório. Uma string de conexão de instância de banco de dados. Prefixe a variável de ambiente com o nome do catálogo usado no Athena. Por exemplo, se o catálogo registrado no Athena for mydb2as400catalog, então o nome da variável de ambiente será mydb2as400catalog\$1connection\$1string. | 
| default | Obrigatório. A string de conexão padrão. Essa string é usada quando o catálogo for lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

As propriedades exemplificadas a seguir são para uma função MUX do Lambda para o Db2 compatível com duas instâncias de banco de dados: `db2as4001` (o padrão) e `db2as4002`.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret name>\$1; | 
| db2as400\$1catalog1\$1connection\$1string | db2as400://jdbc:as400://db2as4001.hostname/:\$1\$1secret1\$1name\$1 | 
| db2as400\$1catalog2\$1connection\$1string | db2as400://jdbc:as400://db2as4002.hostname/:\$1\$1secret2\$1name\$1 | 
| db2as400\$1catalog3\$1connection\$1string | db2as400://jdbc:as400://<ip\$1address>;user=<username>;password=<password>;<properties>; | 

##### Fornecimento de credenciais
<a name="connectors-ibm-db2-as400-providing-credentials"></a>

Para fornecer um nome de usuário e uma senha para seu banco de dados na string de conexão JDBC, é possível usar as propriedades da string de conexão ou o AWS Secrets Manager.
+ **String de conexão**: um nome de usuário e uma senha podem ser especificados como propriedades na string de conexão do JDBC.
**Importante**  
Como prática recomendada de segurança, não use credenciais com codificação rígida em suas variáveis de ambiente ou strings de conexão. Para obter informações sobre como mover seus segredos codificados para o AWS Secrets Manager, consulte [Mover segredos codificados para o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) no *Guia do usuário do AWS Secrets Manager*.
+ **AWS Secrets Manager**: para usar o recurso Athena Federated Query com o AWS Secrets Manager, a VPC conectada à sua função do Lambda deve ter [acesso à Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) ou um [endpoint da VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para se conectar ao Secrets Manager.

  É possível colocar o nome de um segredo no AWS Secrets Manager na sua string de conexão JDBC. O conector substitui o nome secreto pelos valores de `username` e `password` do Secrets Manager.

  Para instâncias de banco de dados do Amazon RDS, esse suporte é totalmente integrado. Se você usa o Amazon RDS, é altamente recomendável usar o AWS Secrets Manager e rotação de credenciais. Se seu banco de dados não usar o Amazon RDS, armazene as credenciais em JSON no seguinte formato:

  ```
  {"username": "${username}", "password": "${password}"}
  ```

**Exemplo de string de conexão com nome secreto**  
A string a seguir tem o nome secreto `${secret_name}`.

```
db2as400://jdbc:as400://<ip_address>;<properties>;:${<secret_name>};
```

O conector usa o nome secreto para recuperar segredos e fornecer o nome de usuário e a senha, como no exemplo a seguir.

```
db2as400://jdbc:as400://<ip_address>;user=<username>;password=<password>;<properties>;
```

#### Uso de um único manipulador de conexão
<a name="connectors-ibm-db2-as400-using-a-single-connection-handler"></a>

É possível usar os metadados de conexão única e os manipuladores de registros a seguir para se conectar a uma única instância do Db2 AS/400.


****  

| Tipo de manipulador | Classe | 
| --- | --- | 
| Manipulador composto | Db2CompositeHandler | 
| Manipulador de metadados | Db2MetadataHandler | 
| Manipulador de registros | Db2RecordHandler | 

##### Parâmetros do manipulador de conexão única
<a name="connectors-ibm-db2-as400-single-connection-handler-parameters"></a>


****  

| Parameter | Descrição | 
| --- | --- | 
| default | Obrigatório. A string de conexão padrão. | 

Os manipuladores de conexão únicos oferecem suporte a uma instância de banco de dados e devem fornecer um parâmetro de string de conexão `default`. Todas as outras strings de conexão são ignoradas.

A propriedade exemplificada a seguir é para uma única instância do Db2 AS/400 compatível em uma função do Lambda.


****  

| Propriedade | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret\$1name>\$1; | 

#### Parâmetros de derramamento
<a name="connectors-ibm-db2-as400-spill-parameters"></a>

O SDK do Lambda pode derramar dados no Amazon S3. Todas as instâncias do banco de dados acessadas pela mesma função do Lambda derramam no mesmo local.


****  

| Parameter | Descrição | 
| --- | --- | 
| spill\$1bucket | Obrigatório. Nome do bucket de derramamento. | 
| spill\$1prefix | Obrigatório. Prefixo de chave do bucket de derramamento. | 
| spill\$1put\$1request\$1headers | (Opcional) Um mapa codificado em JSON de cabeçalhos e valores de solicitações para a solicitação putObject do Amazon S3 usada para o derramamento (por exemplo, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para outros cabeçalhos possíveis, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) na Referência da API do Amazon Simple Storage Service. | 

## Suporte ao tipo de dados
<a name="connectors-ibm-db2-as400-data-type-support"></a>

A tabela a seguir mostra os correspondentes tipos de dados do JDBC e do Apache Arrow.


****  

| Db2 AS/400 | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| DATE | DATEDAY | 
| TIME | VARCHAR | 
| TIMESTAMP | DATEMILLI | 
| DATETIME | DATEMILLI | 
| BOOLEAN | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | DECIMAL | 
| REAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 
| DECFLOAT | FLOAT8 | 

## Partições e divisões
<a name="connectors-ibm-db2-as400-partitions-and-splits"></a>

Uma partição é representada por uma ou mais colunas de partição do tipo `varchar`. O conector Db2 AS/400 cria partições usando os esquemas de organização a seguir.
+ Distribuir por hash
+ Particionar por intervalo
+ Organizar por dimensões

O conector recupera detalhes da partição, como o número de partições e o nome da coluna, de uma ou mais tabelas de metadados do Db2 AS/400. As divisões são criadas com base no número de partições identificadas. 

## desempenho
<a name="connectors-db2-as400-performance"></a>

Para melhorar o desempenho, use o pushdown de predicados para consultar o Athena, como nos exemplos a seguir.

```
SELECT * FROM "lambda:<LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE integercol = 2147483647
```

```
SELECT * FROM "lambda: <LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Consultas de passagem
<a name="connectors-db2as400-passthrough-queries"></a>

O conector Db2 AS/400 é compatível com [consultas de passagem](federated-query-passthrough.md). As consultas de passagem usam uma função de tabela para enviar sua consulta completa para execução na fonte de dados.

Para usar consultas de passagem com o Db2 AS/400, você pode empregar a seguinte sintaxe:

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados no Db2 AS/400. A consulta seleciona todas as colunas na tabela `customer`, limitando os resultados a 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Informações de licença
<a name="connectors-db2as400-license-information"></a>

Ao usar esse conector, você reconhece a inclusão de componentes de terceiros, cuja lista pode ser encontrada no arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) desse conector, e concorda com os termos das respectivas licenças de terceiros fornecidas no arquivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/LICENSE.txt) em GitHub.com.

## Recursos adicionais
<a name="connectors-db2as400-additional-resources"></a>

Para obter as informações mais recentes sobre a versão do driver JDBC, consulte o arquivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) para o conector Db2 AS/400 em GitHub.com.

Para obter mais informações sobre esse conector, visite [o site correspondente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-db2-as400) em GitHub.com.