Categorias:

Funções do sistema (Informações de consulta) , Funções de tabela

GET_QUERY_OPERATOR_STATS

Retorna estatísticas sobre os operadores de consulta individual dentro de uma consulta que tenha sido concluída. Você pode executar esta função para qualquer consulta concluída que tenha sido executada nos últimos 14 dias.

You can use this information to understand the structure of a query and identify query operators — for example, the join operator — that cause performance problems.

For example, you can use this information to determine which operators are consuming the most resources. As another example, you can use this function to identify joins that have more output rows than input rows, which can be a sign of an «exploding» join; for example, an unintended Cartesian product.

Estas estatísticas também estão disponíveis na guia perfil da consulta em Snowsight. A função GET_QUERY_OPERATOR_STATS() torna as mesmas informações disponíveis através de uma interface programática.

Para obter mais informações sobre como encontrar operadores de consulta problemáticos, consulte Problemas comuns de consulta identificados pelo perfil de consulta.

Sintaxe

GET_QUERY_OPERATOR_STATS( <query_id> )
Copy

Argumentos

query_id

A ID de uma consulta. Você pode usar:

  • Uma cadeia de caracteres literal (uma cadeia de caracteres entre aspas simples).

  • Uma variável de sessão contendo um ID de consulta.

  • O valor de retorno de uma chamada para a função LAST_QUERY_ID.

Retornos

Se a função GET_QUERY_OPERATOR_STATS for uma função de tabela. Ela retorna linhas com estatísticas sobre cada operador de consulta na consulta. Para obter mais informações, consulte as seções Notas de uso e Saída abaixo.

Notas de uso

  • This function returns statistics only for queries that have completed.

  • Você deve ter privilégios OPERATE ou MONITOR no warehouse onde executou a consulta.

  • This function provides detailed statistics about each query operator used in the specified query. The following list shows the possible query operators:

    • Aggregate: agrupa entradas e computa funções agregadas.

    • CartesianJoin: um tipo especializado de junção.

    • Delete: remove um registro de uma tabela.

    • ExternalFunction: representa o processamento por uma função externa.

    • ExternalScan: representa o acesso a dados armazenados em objetos de preparação.

    • Filter: representa uma operação que filtra as linhas.

    • Flatten: processa registros VARIANT, possivelmente nivelando-os em um caminho especificado.

    • Generator: Generates records by using the TABLE(GENERATOR(…)) construct.

    • GroupingSets: Represents constructs, such as GROUPING SETS, ROLLUP, and CUBE.

    • Insert: adiciona registros a uma tabela através de uma operação INSERT ou COPY.

    • InternalObject: Represents access to an internal data object; for example, in an Information Schema or the result of a previous query.

    • Join: combina duas entradas em uma determinada condição.

    • JoinFilter: operação de filtragem especial que remove tuplas que podem ser identificadas como possivelmente não correspondendo à condição de uma junção mais além no plano da consulta.

    • Merge: realiza uma operação MERGE em uma tabela.

    • Pivot: transforma valores únicos de uma coluna em várias colunas e faz qualquer agregação necessária.

    • Result: retorna o resultado da consulta.

    • Sort: ordena a entrada em uma determinada expressão.

    • SortWithLimit: produz uma parte da sequência de entrada após a classificação, normalmente um resultado de um constructo ORDER BY ... LIMIT ... OFFSET ....

    • TableScan: representa o acesso a uma única tabela.

    • UnionAll: concatena duas entradas.

    • Unload: representa uma operação COPY que exporta dados de uma tabela para um arquivo em um estágio.

    • Unpivot: gira uma tabela transformando colunas em linhas.

    • Update: atualiza um registro em uma tabela.

    • ValuesClause: lista de valores fornecidos com a cláusula VALUES.

    • WindowFunction: computa funções de janela.

    • WithClause: precede o corpo da instrução SELECT e define um ou mais CTEs.

    • WithReference: instância de uma cláusula WITH.

  • A informação é devolvida como uma tabela. Cada linha na tabela corresponde a um operador. A linha contém a divisão da execução e as estatísticas de consulta para esse operador.

    A linha também pode listar atributos do operador (estes dependem do tipo de operador).

    Statistics that break down query execution time are expressed as a percentage of the total query execution time.

    Para obter mais informações sobre estatísticas específicas, consulte Saída (neste tópico).

  • Como esta função é uma função de tabela, você deve usá-la em uma cláusula FROM e deve encapsulá-la em TABLE(). Por exemplo:

    SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS(last_query_id()));
    
    Copy
  • Para cada execução individual de uma consulta específica (ou seja, um UUID específico), esta função é determinista; ela retorna os mesmos valores a cada vez.

    Entretanto, para diferentes execuções de um mesmo texto de consulta, esta função pode retornar estatísticas de tempo de execução diferentes. As estatísticas dependem de muitos fatores. Os seguintes fatores podem ter um grande impacto na execução e, portanto, nas estatísticas retornadas por esta função:

    • O volume de dados.

    • A disponibilidade de exibições materializadas e as mudanças (se houver) nos dados desde que essas exibições materializadas foram atualizadas pela última vez.

    • A presença ou ausência de clustering.

    • A presença ou ausência de dados previamente armazenados em cache.

    • O tamanho do warehouse virtual.

    Os valores também podem ser afetados por fatores fora da consulta e dos dados do usuário. Estes fatores são geralmente pequenos. Os fatores incluem:

    • Tempo de inicialização do warehouse virtual.

    • Latência com funções externas.

Saída

A função retorna as seguintes colunas:

Column name

Data type

Descrição

QUERY_ID

VARCHAR

Um ID de consulta, que é um identificador interno gerado pelo sistema para a instrução SQL.

STEP_ID

NUMBER(38, 0)

Identificador da etapa no plano de consulta.

OPERATOR_ID

NUMBER(38, 0)

O identificador do operador. Isto é único dentro da consulta. Os valores começam em 0.

PARENT_OPERATORS

ARRAY contendo um ou mais NUMBER(38, 0)

Identificadores dos operadores pai para este operador ou NULL se este for o operador final no plano de consulta (que normalmente é o operador Resultado).

OPERATOR_TYPE

VARCHAR

The type of query operator; for example, TableScan or Filter.

OPERATOR_STATISTICS

VARIANT contendo um OBJECT

Statistics about the operator (for example, the number of output rows from the operator).

EXECUTION_TIME_BREAKDOWN

VARIANT contendo um OBJECT

Informações sobre o tempo de execução do operador.

OPERATOR_ATTRIBUTES

VARIANT contendo um OBJECT

Information about the operator. This information depends on the operator type.

Se não houver informações para a coluna específica do operador, o valor será NULL.

Three of these columns contain OBJECTs. Each object contains key/value pairs. The tables below describe the keys in these objects.

OPERATOR_STATISTICS

Os campos em OBJECTs da coluna OPERATOR_STATISTICS fornecem informações adicionais sobre o operador. As informações podem incluir:

Chave

Nested key (if applicable)

Data type

Descrição

dml

Statistics for Data Manipulation Language (DML) queries.

number_of_rows_inserted

DOUBLE

Number of rows inserted into a table or tables.

number_of_rows_updated

DOUBLE

Number of rows updated in a table.

number_of_rows_deleted

DOUBLE

Number of rows deleted from a table.

number_of_rows_unloaded

DOUBLE

Number of rows unloaded during data export.

extension_functions

Information about calls to extension functions. If the value of a field is zero, then the field is not displayed.

Java UDF handler load time

DOUBLE

Amount of time for the Java UDF handler to load.

Total Java UDF handler invocations

DOUBLE

Number of times the Java UDF handler is invoked.

Max Java UDF handler execution time

DOUBLE

Maximum amount of time for the Java UDF handler to execute.

Avg Java UDF handler execution time

DOUBLE

Average amount of time to execute the Java UDF handler.

Java UDTF process() invocations

DOUBLE

Number of times the Java UDTF process method was invoked.

Java UDTF process() execution time

DOUBLE

Amount of time to execute the Java UDTF process.

Avg Java UDTF process() execution time

DOUBLE

Average amount of time to execute the Java UDTF process.

Java UDTF's constructor invocations

DOUBLE

Number of times the Java UDTF constructor was invoked.

Java UDTF's constructor execution time

DOUBLE

Amount of time to execute the Java UDTF constructor.

Avg Java UDTF's constructor execution time

DOUBLE

Average amount of time to execute the Java UDTF constructor.

Java UDTF endPartition() invocations

DOUBLE

Number of times the Java UDTF endPartition method was invoked.

Java UDTF endPartition() execution time

DOUBLE

Amount of time to execute the Java UDTF endPartition method.

Avg Java UDTF endPartition() execution time

DOUBLE

Average amount of time to execute the Java UDTF endPartition method.

Max Java UDF dependency download time

DOUBLE

Maximum amount of time to download the Java UDF dependencies.

Max JVM memory usage

DOUBLE

Peak memory usage as reported by the JVM.

Java UDF inline code compile time in ms

DOUBLE

Compile time for the Java UDF inline code.

Total Python UDF handler invocations

DOUBLE

Number of times the Python UDF handler was invoked.

Total Python UDF handler execution time

DOUBLE

Total execution time for the Python UDF handler.

Avg Python UDF handler execution time

DOUBLE

Average amount of time to execute the Python UDF handler.

Python sandbox max memory usage

DOUBLE

Peak memory usage by the Python sandbox environment.

Avg Python env creation time: Download and install packages

DOUBLE

Average amount of time to create the Python environment, including downloading and installing packages.

Conda solver time

DOUBLE

Amount of time to run the Conda solver to solve Python packages.

Conda env creation time

DOUBLE

Amount of time to create the Python environment.

Python UDF initialization time

DOUBLE

Amount of time to initialize the Python UDF.

Number of external file bytes read for UDFs

DOUBLE

Number of external file bytes read for UDFs.

Number of external files accessed for UDFs

DOUBLE

Number of external files accessed for UDFs.

external_functions

Information about calls to external functions. If the value of a field — for example retries_due_to_transient_errors — is zero, then the field is not displayed.

total_invocations

DOUBLE

Number of times that an external function was called. This number can be different from the number of external function calls in the text of the SQL statement because of the number of batches that rows are divided into, the number of retries if there are transient network problems, and so on.

rows_sent

DOUBLE

Number of rows sent to external functions.

rows_received

DOUBLE

Number of rows received back from external functions.

bytes_sent (x-region)

DOUBLE

Number of bytes sent to external functions. If the key includes (x-region), the data was sent across regions, which can impact billing.

bytes_received (x-region)

DOUBLE

Number of bytes received from external functions. If the key includes (x-region), the data was sent across regions, which can impact billing.

retries_due_to_transient_errors

DOUBLE

Number of retries because of transient errors.

average_latency_per_call

DOUBLE

Average amount of time per invocation (call) in milliseconds between the time Snowflake sent the data and received the returned data.

http_4xx_errors

INTEGER

Número total de solicitações de HTTP que retornaram um código de status 4xx.

http_5xx_errors

INTEGER

Número total de solicitações de HTTP que retornaram um código de status 5xx.

average_latency

DOUBLE

Latência média para solicitações de HTTP bem-sucedidas.

avg_throttle_latency_overhead

DOUBLE

Average overhead per successful request because of a slowdown caused by throttling (HTTP 429).

batches_retried_due_to_throttling

DOUBLE

Number of batches that were retried because of HTTP 429 errors.

latency_per_successful_call_(p50)

DOUBLE

Latência de percentil 50 para solicitações de HTTP bem-sucedidas. 50 por cento de todas as solicitações bem-sucedidas levaram menos do que esse tempo para serem concluídas.

latency_per_successful_call_(p90)

DOUBLE

Latência de percentil 90 para solicitações de HTTP bem-sucedidas. 90 por cento de todas as solicitações bem-sucedidas levaram menos do que esse tempo para serem concluídas.

latency_per_successful_call_(p95)

DOUBLE

Latência de percentil 95 para solicitações de HTTP bem-sucedidas. 95 por cento de todas as solicitações bem-sucedidas levaram menos do que esse tempo para serem concluídas.

latency_per_successful_call_(p99)

DOUBLE

Latência de percentil 99 para solicitações de HTTP bem-sucedidas. 99 por cento de todas as solicitações bem-sucedidas levaram menos do que esse tempo para serem concluídas.

input_rows

INTEGER

Number of input rows. This can be missing for an operator with no input edges from other operators.

io

Informações sobre as operações de I/O (entrada/saída) realizadas durante a consulta.

scan_progress

DOUBLE

Percentage of data scanned for a given table so far.

bytes_scanned

DOUBLE

Number of bytes scanned so far.

percentage_scanned_from_cache

DOUBLE

Percentage of data scanned from the local disk cache.

bytes_written

DOUBLE

Bytes written; for example, when loading into a table.

bytes_written_to_result

DOUBLE

Bytes gravados em um objeto de resultado.

For example, SELECT * FROM ... would produce a set of results in tabular format representing each field in the selection.

Em geral, o objeto de resultado representa tudo o que é produzido como resultado da consulta, e bytes_written_to_result representa o tamanho do resultado retornado.

bytes_read_from_result

DOUBLE

Bytes lidos de um objeto resultado.

external_bytes_scanned

DOUBLE

Bytes read from an external object; for example, a stage.

network

network_bytes

DOUBLE

Amount of data sent over the network.

output_rows

INTEGER

Number of output rows. This can be missing for the operator that returns the results to the user; which is usually the RESULT operator.

pruning

Informações sobre a remoção realizada na tabela.

partitions_pruned_by_snowflake_optima

DOUBLE

Number of partitions pruned by Snowflake Optima.

partitions_scanned

DOUBLE

Number of partitions scanned so far.

partitions_total

DOUBLE

Total number of partitions in a given table.

spilling

Informações sobre o uso do disco para operações nas quais os resultados intermediários não cabem na memória.

bytes_spilled_remote_storage

DOUBLE

Volume of data spilled to remote disk.

bytes_spilled_local_storage

DOUBLE

Volume of data spilled to local disk.

search_optimization

Informações sobre consultas que usam o serviço de otimização de pesquisa.

partitions_pruned_by_search_optimization

DOUBLE

Number of partitions pruned by search optimization.

partitions_pruned_by_search_optimization_and_snowflake_optima

DOUBLE

Número de partições removidas pela otimização de pesquisa e pelo Snowflake Optima.

EXECUTION_TIME_BREAKDOWN

Os campos em OBJECTs da coluna EXECUTION_TIME_BREAKDOWN são mostrados abaixo.

Chave

Data type

Descrição

overall_percentage

DOUBLE

Percentage of the total query time spent by this operator.

initialization

DOUBLE

Tempo gasto na preparação do processamento da consulta.

processing

DOUBLE

Tempo gasto no processamento dos dados pela CPU.

synchronization

DOUBLE

Tempo gasto sincronizando as atividades entre os processos participantes.

local_disk_io

DOUBLE

Tempo durante o qual o processamento foi bloqueado enquanto se aguardava o acesso ao disco local.

remote_disk_io

DOUBLE

Tempo durante o qual o processamento foi bloqueado enquanto se aguardava o acesso remoto ao disco.

network_communication

DOUBLE

Tempo durante o qual o processamento aguardava a transferência dos dados da rede.

OPERATOR_ATTRIBUTES

Each output row describes one operator in the query. The following table shows the possible types of operators; for example, the Filter operator. For each type of operator, the table shows the possible attributes; for example, the expression used to filter the rows.

Os atributos do operador são armazenados na coluna OPERATOR_ATTRIBUTES, que é do tipo VARIANT e contém um OBJECT. O OBJECT contém pares de chave/valor. Cada chave corresponde a um atributo do operador.

Operator name

Chave

Data type

Descrição

Aggregate

functions

ARRAY de VARCHAR

Lista de funções computadas.

grouping_keys

ARRAY de VARCHAR

Group-by expression.

CartesianJoin

additional_join_condition

VARCHAR

Expressão de junção de não equidade.

equality_join_condition

VARCHAR

Expressão de junção de equidade.

join_type

VARCHAR

Tipo de junção (INNER).

Delete

table_name

VARCHAR

Nome da tabela atualizada.

ExternalScan

stage_name

VARCHAR

O nome do estágio a partir do qual os dados são lidos.

stage_type

VARCHAR

O tipo do estágio.

Filter

filter_condition

VARCHAR

A expressão utilizada para filtrar dados.

Flatten

input

VARCHAR

Input expression used to flatten data.

Generator

row_count

NUMBER

Valor do parâmetro de entrada ROWCOUNT.

time_limit

NUMBER

Valor do parâmetro de entrada TIMELIMIT.

GroupingSets

functions

ARRAY de VARCHAR

Lista de funções computadas.

key_sets

ARRAY de VARCHAR

Lista de conjuntos de agrupamento.

Insert

input_expression

VARCHAR

Quais expressões são inseridas.

table_names

ARRAY de VARCHAR

Lista dos nomes das tabelas às quais são adicionados os registros.

InternalObject

object_name

VARCHAR

Name of the accessed object.

Join

additional_join_condition

VARCHAR

Expressão de junção de não equidade.

equality_join_condition

VARCHAR

Expressão de junção de equidade.

join_type

VARCHAR

Tipo de junção (INNER, OUTER, LEFT JOIN etc.).

JoinFilter

join_id

NUMBER

Operator id of the join used to identify tuples that can be filtered out.

Merge

table_name

VARCHAR

Nome da tabela atualizada.

Pivot

grouping_keys

ARRAY de VARCHAR

Colunas restantes nas quais os resultados são agregados.

pivot_column

ARRAY de VARCHAR

Colunas resultantes de valores articulados.

Result

expressions

ARRAY de VARCHAR

Lista de expressões produzidas.

Sort

sort_keys

ARRAY de VARCHAR

Expressão que define a classificação.

SortWithLimit

offset

NUMBER

Posição na sequência ordenada a partir da qual as tuplas produzidas são emitidas.

rows

NUMBER

Número de linhas produzidas.

sort_keys

ARRAY de VARCHAR

Expressão que define a classificação.

TableScan

columns

ARRAY de VARCHAR

Lista de colunas verificadas.

extracted_variant_paths

ARRAY de VARCHAR

Lista de caminhos extraídos das colunas de variantes.

table_alias

VARCHAR

Alias da tabela sendo acessada.

table_name

VARCHAR

Nome da tabela sendo acessada.

Unload

location

VARCHAR

Estágio onde os dados são salvos.

Unpivot

expressions

ARRAY de VARCHAR

Colunas de saída da consulta não articulada.

Update

table_name

VARCHAR

Nome da tabela atualizada.

ValuesClause

value_count

NUMBER

Número de valores produzidos.

values

VARCHAR

Lista de valores.

WindowFunction

functions

ARRAY de VARCHAR

Lista de funções computadas.

WithClause

name

VARCHAR

Alias da cláusula WITH.

Se um operador não for listado, nenhum atributo será produzido e o valor será informado como {}.

Nota

  • The following operators do not have any operator attributes and therefore are not included in the table of OPERATOR_ATTRIBUTES:

    • UnionAll

    • ExternalFunction

Exemplos

Os exemplos a seguir chamam a função GET_QUERY_OPERATOR_STATS.

Recuperação de dados de uma única consulta

Este exemplo mostra as estatísticas para um SELECT que une duas pequenas tabelas.

Execute a instrução SELECT:

SELECT x1.i, x2.i
  FROM x1 INNER JOIN x2 ON x2.i = x1.i
  ORDER BY x1.i, x2.i;
Copy

Obtenha o ID da consulta:

SET lqid = (SELECT LAST_QUERY_ID());
Copy

Chame GET_QUERY_OPERATOR_STATS() para obter estatísticas dos operadores da consulta individual na consulta:

SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS($lqid));
Copy
+--------------------------------------+---------+-------------+--------------------+---------------+-----------------------------------------+-----------------------------------------------+----------------------------------------------------------------------+
| QUERY_ID                             | STEP_ID | OPERATOR_ID | PARENT_OPERATORS   | OPERATOR_TYPE | OPERATOR_STATISTICS                     | EXECUTION_TIME_BREAKDOWN                      | OPERATOR_ATTRIBUTES                                                  |
|--------------------------------------+---------+-------------+--------------------+---------------+-----------------------------------------+-----------------------------------------------+----------------------------------------------------------------------|
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           0 |               NULL | Result        | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "input_rows": 64                      |   "overall_percentage": 0.000000000000000e+00 |   "expressions": [                                                   |
|                                      |         |             |                    |               | }                                       | }                                             |     "X1.I",                                                          |
|                                      |         |             |                    |               |                                         |                                               |     "X2.I"                                                           |
|                                      |         |             |                    |               |                                         |                                               |   ]                                                                  |
|                                      |         |             |                    |               |                                         |                                               | }                                                                    |
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           1 |              [ 0 ] | Sort          | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "input_rows": 64,                     |   "overall_percentage": 0.000000000000000e+00 |   "sort_keys": [                                                     |
|                                      |         |             |                    |               |   "output_rows": 64                     | }                                             |     "X1.I ASC NULLS LAST",                                           |
|                                      |         |             |                    |               | }                                       |                                               |     "X2.I ASC NULLS LAST"                                            |
|                                      |         |             |                    |               |                                         |                                               |   ]                                                                  |
|                                      |         |             |                    |               |                                         |                                               | }                                                                    |
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           2 |              [ 1 ] | Join          | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "input_rows": 128,                    |   "overall_percentage": 0.000000000000000e+00 |   "equality_join_condition": "(X2.I = X1.I)",                        |
|                                      |         |             |                    |               |   "output_rows": 64                     | }                                             |   "join_type": "INNER"                                               |
|                                      |         |             |                    |               | }                                       |                                               | }                                                                    |
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           3 |              [ 2 ] | TableScan     | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "io": {                               |   "overall_percentage": 0.000000000000000e+00 |   "columns": [                                                       |
|                                      |         |             |                    |               |     "bytes_scanned": 1024,              | }                                             |     "I"                                                              |
|                                      |         |             |                    |               |     "percentage_scanned_from_cache": 1, |                                               |   ],                                                                 |
|                                      |         |             |                    |               |     "scan_progress": 1                  |                                               |   "table_name": "MY_DB.MY_SCHEMA.X2" |
|                                      |         |             |                    |               |   },                                    |                                               | }                                                                    |
|                                      |         |             |                    |               |   "output_rows": 64,                    |                                               |                                                                      |
|                                      |         |             |                    |               |   "pruning": {                          |                                               |                                                                      |
|                                      |         |             |                    |               |     "partitions_scanned": 1,            |                                               |                                                                      |
|                                      |         |             |                    |               |     "partitions_total": 1               |                                               |                                                                      |
|                                      |         |             |                    |               |   }                                     |                                               |                                                                      |
|                                      |         |             |                    |               | }                                       |                                               |                                                                      |
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           4 |              [ 2 ] | JoinFilter    | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "input_rows": 64,                     |   "overall_percentage": 0.000000000000000e+00 |   "join_id": "2"                                                     |
|                                      |         |             |                    |               |   "output_rows": 64                     | }                                             | }                                                                    |
|                                      |         |             |                    |               | }                                       |                                               |                                                                      |
| 01a8f330-0507-3f5b-0000-43830248e09a |       1 |           5 |              [ 4 ] | TableScan     | {                                       | {                                             | {                                                                    |
|                                      |         |             |                    |               |   "io": {                               |   "overall_percentage": 0.000000000000000e+00 |   "columns": [                                                       |
|                                      |         |             |                    |               |     "bytes_scanned": 1024,              | }                                             |     "I"                                                              |
|                                      |         |             |                    |               |     "percentage_scanned_from_cache": 1, |                                               |   ],                                                                 |
|                                      |         |             |                    |               |     "scan_progress": 1                  |                                               |   "table_name": "MY_DB.MY_SCHEMA.X1" |
|                                      |         |             |                    |               |   },                                    |                                               | }                                                                    |
|                                      |         |             |                    |               |   "output_rows": 64,                    |                                               |                                                                      |
|                                      |         |             |                    |               |   "pruning": {                          |                                               |                                                                      |
|                                      |         |             |                    |               |     "partitions_scanned": 1,            |                                               |                                                                      |
|                                      |         |             |                    |               |     "partitions_total": 1               |                                               |                                                                      |
|                                      |         |             |                    |               |   }                                     |                                               |                                                                      |
|                                      |         |             |                    |               | }                                       |                                               |                                                                      |
+--------------------------------------+---------+-------------+--------------------+---------------+-----------------------------------------+-----------------------------------------------+----------------------------------------------------------------------+

Identificação da “explosão” de operadores de junção

O exemplo a seguir mostra como usar GET_QUERY_OPERATOR_STATS para examinar uma consulta complicada. Este exemplo procura por operadores dentro de uma consulta que produzam muito mais linhas do que foram entradas para aquele operador.

Esta é a consulta a ser analisada:

SELECT *
  FROM t1
    JOIN t2 ON t1.a = t2.a
    JOIN t3 ON t1.b = t3.b
    JOIN t4 ON t1.c = t4.c;
Copy

Obtenha o ID da consulta anterior:

SET lid = LAST_QUERY_ID();
Copy

The following query shows the ratio of output rows to input rows for each of the join operators in the query:

SELECT  operator_id,
        operator_attributes,
        operator_statistics:output_rows / operator_statistics:input_rows AS row_multiple
  FROM TABLE(GET_QUERY_OPERATOR_STATS($lid))
  WHERE operator_type = 'Join'
  ORDER BY step_id, operator_id;
Copy
+---------+-------------+--------------------------------------------------------------------------+---------------+
| STEP_ID | OPERATOR_ID | OPERATOR_ATTRIBUTES                                                      | ROW_MULTIPLE  |
+---------+-------------+--------------------------------------------------------------------------+---------------+
|       1 |           1 | {  "equality_join_condition": "(T4.C = T1.C)",   "join_type": "INNER"  } |  49.969249692 |
|       1 |           3 | {  "equality_join_condition": "(T3.B = T1.B)",   "join_type": "INNER"  } | 116.071428571 |
|       1 |           5 | {  "equality_join_condition": "(T2.A = T1.A)",   "join_type": "INNER"  } |  12.20657277  |
+---------+-------------+--------------------------------------------------------------------------+---------------+

Após identificar as junções com explosão, você pode rever cada condição de junção para verificar se a condição está correta.