Usar o S3 Select com o Hive para melhorar a performance
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
Com as versões 5.18.0 e posteriores do Amazon EMR, você pode usar o S3 Select
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.
O S3 Select é adequado para minha aplicação?
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 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 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. CSVs e JSON multilinha não são compatíveis.
-
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 no Guia do usuário do Amazon Simple Storage Service.
Especificar o S3 Select no código
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.
exemplo 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" );
exemplo 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" );
exemplo Instrução SELECT TABLE
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;