

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar o S3 Select com o Hive para melhorar a performance
<a name="emr-hive-s3select"></a>

**Importante**  
O Amazon S3 Select não está mais disponível para novos clientes. Os clientes existentes do Amazon S3 Select podem continuar usando o recurso normalmente. [Saiba mais](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Com as versões 5.18.0 e posteriores do Amazon EMR, você pode usar o [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) com o Hive no Amazon EMR. O S3 Select possibilita que as aplicações recuperem apenas um subconjunto dos dados de um objeto. Para o Amazon EMR, o trabalho de computação de filtrar grandes conjuntos de dados para processamento é enviado do cluster para o Amazon S3, o que pode melhorar a performance em algumas aplicações e reduz o volume de dados transferidos entre o Amazon EMR e o Amazon S3.

O S3 Select é compatível com tabelas do Hive com base em arquivos CSV e JSON e definindo a variável de configuração `s3select.filter` como `true` durante a sessão do Hive. Para ter mais informações e exemplos, consulte [Especificar o S3 Select no código](#emr-hive-s3select-specify).

## O S3 Select é adequado para minha aplicação?
<a name="emr-hive-s3select-apps"></a>

Recomendamos que você avalie seus aplicativos com e sem o S3 Selecione para ver se o uso pode ser adequado para o aplicativo.

Use as seguintes diretrizes para determinar se o seu aplicativo é adequado para o uso do S3 Select:
+ Sua consulta filtra mais de metade do conjunto de dados original.
+ Os predicados do filtro de consulta usam colunas que têm um tipo de dados compatível com o Amazon S3 Select. Para obter mais informações, consulte [Tipos de dados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Sua conexão de rede entre o Amazon S3 e o cluster do Amazon EMR tem boa velocidade de transferência e largura de banda disponível. O Amazon S3 não compacta respostas HTTP. Portanto, é provável que o tamanho da resposta aumente para arquivos de entrada compactados.

## Considerações e limitações
<a name="emr-hive-s3select-considerations"></a>
+ A criptografia do lado do servidor do Amazon S3 com chaves de criptografia fornecidas pelo cliente (SSE-C) e a criptografia do lado do cliente não são compatíveis. 
+ A propriedade `AllowQuotedRecordDelimiters` não é compatível. Se essa propriedade for especificada, a consulta falhará.
+ Somente arquivos CSV e JSON no formato UTF-8 são compatíveis. Não há suporte para várias linhas CSVs e JSON.
+ Somente arquivos descompactados, gzip ou bzip2 são compatíveis.
+ Caracteres de comentário na última linha não são compatíveis.
+ Linhas vazias no final de um arquivo não são processadas.
+ O Hive no Amazon EMR oferece suporte a tipos de dados primitivos compatíveis com o S3 Select. Para obter mais informações, consulte [Tipos de dados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) no *Guia do usuário do Amazon Simple Storage Service*.

## Especificar o S3 Select no código
<a name="emr-hive-s3select-specify"></a>

Para usar o S3 Select em uma tabela do Hive, crie a tabela especificando `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` como o nome da classe `INPUTFORMAT` e especifique um valor para a propriedade `s3select.format` usando a cláusula `TBLPROPERTIES`.

Por padrão, o S3 Select está desabilitado quando você executa consultas. Habilite o S3 Select definindo `s3select.filter` como `true` em sua sessão do Hive, conforme mostrado a seguir. Os exemplos a seguir demonstram como especificar o S3 Select ao criar uma tabela do CSV subjacente e arquivos JSON e, em seguida, consultar a tabela com uma instrução simples do Select.

**Example Instrução CREATE TABLE para tabela baseada em CSV**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example Instrução CREATE TABLE para tabela baseada em JSON**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example Instrução SELECT TABLE**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```