SELECT
Recupera linhas de dados de zero ou mais tabelas.
nota
Este tópico fornece informações resumidas para referência. Informações abrangentes sobre o uso de SELECT
e a linguagem SQL estão além do escopo desta documentação. Para obter informações sobre como usar o SQL específico do Athena, consulte Considerações e limitações das consultas SQL no Amazon Athena e Executar consultas SQL no Amazon Athena. Para ver um exemplo de como criar um banco de dados, criar uma tabela e executar uma consulta SELECT
na tabela do Athena, consulte Conceitos básicos.
Resumo
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression
[, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
nota
Palavras reservadas em instruções SQL SELECT devem ficar entre aspas duplas. Para ter mais informações, consulte Palavras-chave reservadas para escape e em instruções de SQL SELECT.
Parâmetros
- [ WITH with_query [, ....] ]
-
Você pode usar
WITH
para nivelar consultas aninhadas ou para simplificar subconsultas.O uso da cláusula
WITH
para criar consultas recursivas é possível a partir da versão 3 do mecanismo Athena. A profundidade de recursão máxima é 10.A cláusula
WITH
precede a listaSELECT
em uma consulta e define uma ou mais subconsultas a serem usadas dentro da consultaSELECT
.Cada subconsulta define uma tabela temporária, semelhante a uma definição de exibição, que você pode referenciar na cláusula
FROM
. As tabelas são usadas apenas quando a consulta é executada.A sintaxe
with_query
é:subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
Em que:
-
subquery_table_name
é um nome exclusivo para uma tabela temporária que define os resultados da subconsulta de cláusulaWITH
. Cadasubquery
deve ter um nome de tabela que possa ser referenciado na cláusulaFROM
. -
column_name [, ...]
é uma lista opcional de nomes de coluna de saída. O número de nomes de coluna deve ser igual a ou menor que o número de colunas definido porsubquery
. -
subquery
é uma instrução da consulta qualquer.
-
- [ ALL | DISTINCT ] select_expression
-
select_expression
determina as linhas a serem selecionadas. Umaselect_expression
pode usar um dos seguintes formatos:expression [ [ AS ] column_alias ] [, ...]
row_expression.* [ AS ( column_alias [, ...] ) ]
relation.*
*
-
A sintaxe
expression [ [ AS ] column_alias ]
especifica uma coluna de saída. A sintaxe opcional[AS] column_alias
especifica um nome de título personalizado a ser usado para a coluna na saída. -
Para
row_expression.* [ AS ( column_alias [, ...] ) ]
,row_expression
é uma expressão arbitrária do tipo de dadosROW
. Os campos da linha definem as colunas de saída a serem incluídas no resultado. -
Para
relation.*
, as colunas derelation
são incluídas no resultado. Essa sintaxe não permite o uso de aliases de coluna. -
O asterisco
*
especifica que todas as colunas sejam incluídas no conjunto de resultados. -
No conjunto de resultados, a ordem das colunas é igual à ordem de sua especificação pela expressão de seleção. Se uma expressão de seleção retornar várias colunas, a ordem das colunas segue a ordem usada na relação de origem ou na expressão do tipo de linha.
-
Quando os aliases de coluna são especificados, os aliases substituem os nomes de campos de coluna ou linha pré-existentes. Se a expressão de seleção não tiver nomes de coluna, nomes de colunas anônimas com índice zero (
_col0
,_col1
e_col2, ...
) serão exibidos na saída. -
ALL
é o padrão. UsarALL
será tratado da mesma maneira como se tivesse sido omitido. Todas as linhas de todas as colunas são selecionadas, e as duplicações são mantidas. -
Use
DISTINCT
para retornar somente valores distintos quando uma coluna contém valores duplicados.
-
- FROM from_item [, ...]
-
Indica a entrada para a consulta, em que
from_item
pode ser uma exibição, um construto de união ou uma subconsulta conforme descrito abaixo.O
from_item
pode ser:-
table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]
Em que
table_name
é o nome da tabela de destino da qual selecionar linhas,alias
é o nome para indicar a saída da instruçãoSELECT
ecolumn_alias
define as colunas para oalias
especificado.
-OU-
-
join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
Em que
join_type
é um dos:-
[ INNER ] JOIN
-
LEFT [ OUTER ] JOIN
-
RIGHT [ OUTER ] JOIN
-
FULL [ OUTER ] JOIN
-
CROSS JOIN
-
ON join_condition | USING (join_column [, ...])
Em que usarjoin_condition
permite especificar nomes de coluna para chaves de união em várias tabelas e usarjoin_column
exige quejoin_column
exista em ambas as tabelas.
-
-
- [ WHERE condição ]
-
Filtra os resultados de acordo com a
condition
que você especificar, em quecondition
costuma ter a sintaxe abaixo.column_name
operator
value
[[[AND | OR]column_name
operator
value
] ...]O
operador
pode ser um dos comparadores=
,>
,<
,>=
,<=
,<>
,!=
.As expressões de subconsulta a seguir também podem ser usadas na cláusula
WHERE
.-
[NOT] BETWEEN
: especifica um intervalo entre dois inteiros, como no exemplo a seguir. Se o tipo de dados da coluna forinteger_A
ANDinteger_B
varchar
, a coluna deverá ser convertida para inteiro primeiro.SELECT DISTINCT processid FROM "webdata"."impressions" WHERE cast(processid as int) BETWEEN 1500 and 1800 ORDER BY processid
-
[NOT] LIKE
: pesquisa o padrão especificado. Use o sinal de porcentagem (value
%
) como caractere curinga, conforme mostrado no exemplo a seguir.SELECT * FROM "webdata"."impressions" WHERE referrer LIKE '%.org'
-
[NOT] IN (
: especifica uma lista de valores possíveis para uma coluna, como no exemplo a seguir.value
[,value
[, ...])SELECT * FROM "webdata"."impressions" WHERE referrer IN ('example.com','example.net','example.org')
-
- [ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]
-
Divide a saída da instrução
SELECT
em linhas com valores correspondentes.ALL
eDISTINCT
determinam se conjuntos de agrupamentos duplicados produzem linhas de saída distintas. Se omitido,ALL
será pressuposto.grouping_expressions
permite realizar operações de agrupamento complexas. Você pode usar operações de agrupamento complexas para realizar uma análise que exija agregação de vários conjuntos de colunas em uma única consulta.O elemento
grouping_expressions
pode ser qualquer função, comoSUM
,AVG
ouCOUNT
, executada nas colunas de entrada.As expressões
GROUP BY
podem agrupar a saída por nomes de coluna de entrada não exibidos na saída da instruçãoSELECT
.Todas as expressões de saída devem ser funções agregadas ou colunas presentes na cláusula
GROUP BY
.Você pode usar uma única consulta para realizar uma análise que exija a agregação de vários conjuntos de colunas.
O Athena aceita agregações complexas que usam
GROUPING SETS
,CUBE
eROLLUP
.GROUP BY GROUPING SETS
especifica várias listas de colunas para agrupamento.GROUP BY CUBE
gera todos os conjuntos de agrupamento possíveis para um determinado conjunto de colunas.GROUP BY ROLLUP
gera todos os subtotais possíveis para um determinado conjunto de colunas. As operações de agrupamento complexas não permitem agrupamento de expressões compostas de colunas de entrada. Somente nomes de coluna são permitidos.Você normalmente pode usar
UNION ALL
para obter os mesmos resultados dessas operaçõesGROUP BY
, mas consultas que usamGROUP BY
têm a vantagem de ler os dados uma vez, eUNION ALL
lê os dados subjacentes três vezes e podem produzir resultados inconsistentes quando a fonte de dados está sujeita a alterações. - [ HAVING condition ]
-
Usada com funções de agregação e a cláusula
GROUP BY
. Controla quais grupos são selecionados, eliminando grupos que não atendam acondition
. A filtragem ocorrerá depois de grupos, e as agregações serão calculadas. - [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] union_query] ]
-
UNION
,INTERSECT
eEXCEPT
combinam os resultados de mais de uma instruçãoSELECT
em uma única consulta.ALL
ouDISTINCT
controla a exclusividade das linhas incluídas no conjunto final de resultados.UNION
combina as linhas resultantes da primeira consulta com as linhas resultantes da segunda consulta. Para eliminar duplicatas,UNION
cria uma tabela de hash, que consome memória. Para melhor performance, considere usarUNION ALL
se a consulta não exigir eliminação de duplicatas. Várias cláusulasUNION
são processadas da esquerda para a direita, a menos que você use parênteses para definir explicitamente a ordem de processamento.INTERSECT
retorna apenas as linhas que estão presentes nos resultados da primeira e da segunda consultas.EXCEPT
retorna as linhas dos resultados da primeira consulta, excluindo as linhas encontradas pela segunda consulta.ALL
faz com que todas as linhas sejam incluídas, mesmo se elas forem idênticas.DISTINCT
faz com que apenas as linhas exclusivas sejam incluídas no conjunto de resultados combinados. - [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
-
Classifica um conjunto de resultados por um ou mais
expression
de saída.Quando a cláusula contém várias expressões, o conjunto de resultados é classificado de acordo com o primeiro
expression
. Em seguida, o segundoexpression
é aplicado a linhas que tenham valores correspondentes da primeira expressão, e assim por diante.Cada
expression
pode especificar colunas de saída deSELECT
ou um número ordinal para uma coluna de saída por posição, a partir de um.ORDER BY
é avaliada como a última etapa após qualquer cláusulaGROUP BY
ouHAVING
.ASC
eDESC
determinam se os resultados são classificados em ordem crescente ou decrescente. A ordem de classificação padrão é a ordem decrescente (ASC
). A ordem nula padrão éNULLS LAST
, independentemente da ordem de classificação crescente ou decrescente. - [ Contagem de DESLOCAMENTO [ LINHA | LINHAS ] ]
-
Use a cláusula
OFFSET
para descartar várias linhas iniciais do conjunto de resultados. Se a cláusulaORDER BY
estiver presente, a cláusulaOFFSET
será avaliada em um conjunto de resultados classificados e o conjunto permanecerá classificado após as linhas ignoradas serem descartadas. Se a consulta não tiver cláusulaORDER BY
, a definição de quais linhas serão descartadas é arbitrária. Se a contagem especificada porOFFSET
for igual ou exceder o tamanho do conjunto de resultados, o resultado final será vazio. - LIMIT [ count | ALL ]
-
Restringe o número de linhas no conjunto de resultados a
count
.LIMIT ALL
é igual à omissão da cláusulaLIMIT
. Se a consulta não tiver a cláusulaORDER BY
, os resultados serão arbitrários. - TABLESAMPLE [ BERNOULLI | SYSTEM ] (porcentagem)
-
Operador operacional para selecionar linhas de uma tabela com base em um método de amostragem.
BERNOULLI
seleciona cada linha para estar no exemplo da tabela com uma probabilidade depercentage
. Todos os blocos físicos da tabela são examinados, e determinadas linhas são ignoradas com base em uma comparação entre opercentage
de exemplo e um valor aleatório calculado no runtimeCom
SYSTEM
, a tabela é dividida em segmentos lógicos de dados, e a tabela mostra um exemplo dessa granularidade.Todas as linhas de um determinado segmento são selecionadas, ou o segmento é ignorado com base em uma comparação entre o
percentage
de exemplo e um valor aleatório calculado no runtime. A amostragem deSYSTEM
depende do conector. Esse método não garante probabilidades de amostragem independentes. - [ UNNEST (array_or_map) [WITH ORDINALITY] ]
-
Expande uma matriz ou um mapa para uma relação. As matrizes são expandidas para uma única coluna. Os mapas são expandidos para duas colunas (chave, valor).
Você pode usar
UNNEST
com vários argumentos, que são expandidos para várias colunas com o máximo de linhas do maior argumento de cardinalidade.Outras colunas são preenchidas com nulos.
A cláusula
WITH ORDINALITY
adiciona uma coluna de ordinalidade ao final.UNNEST
costuma ser usado com umJOIN
e pode fazer referência a colunas de relações no lado esquerdo doJOIN
.
Obter os locais de arquivos dos dados de origem no Amazon S3
Para ver o local do arquivo do Amazon S3 referente aos dados em uma linha da tabela, você pode usar "$path"
em uma consulta SELECT
, como no seguinte exemplo:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
Essa consulta retorna um resultado semelhante a este:
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
Para retornar uma lista classificada e exclusiva dos caminhos de nome de arquivo do S3 para os dados em uma tabela, você pode usar SELECT DISTINCT
e ORDER BY
, como no exemplo a seguir.
SELECT DISTINCT "$path" AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Para retornar somente os nomes de arquivo sem o caminho, você pode especificar "$path"
como um parâmetro para a função regexp_extract
, conforme mostrado no exemplo a seguir.
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC
Para retornar os dados de um arquivo específico, especifique o arquivo na cláusula WHERE
, como no exemplo a seguir.
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
Para obter mais informações e exemplos, consulte o artigo da Central de Conhecimento Como posso ver o arquivo de origem do Amazon S3 para uma linha em uma tabela do Athena?
nota
No Athena, as colunas ocultas de metadados do Hive ou do Iceberg $bucket
, $file_modified_time
, $file_size
e $partition
não são compatíveis para visualizações.
Caractere de escape para aspas simples
Para inserir caracteres de escape em aspas simples, preceda-as com outras aspas simples, conforme o exemplo a seguir. Não confunda isso com aspas duplas.
Select 'O''Reilly'
Resultados
O'Reilly
Recursos adicionais
Para obter mais informações sobre como usaras instruções SELECT
no Athena, consulte os recursos abaixo.
Para obter informações sobre este tópico | consulte esta referência |
---|---|
Executar consultas no Athena | Executar consultas SQL no Amazon Athena |
Usar SELECT para criar uma tabela |
Criar uma tabela com base em resultados de consultas (CTAS) |
Inserir dados de uma consulta SELECT em outra tabela |
INSERT INTO |
Usar funções integradas nas instruções SELECT |
Funções no Amazon Athena |
Usar funções definidas pelo usuário nas instruções SELECT |
Consultar com funções definidas pelo usuário |
Consultar metadados do catálogo de dados | Consultar o AWS Glue Data Catalog |