Publicado el :
Análisis de datos CREACIÓN_INTERNA

Obtener los detalles de ejecución de una consulta FedSQL

Este código también está disponible en: Deutsch English Français
En espera de validación
La acción fedsql.execdirect permite enviar consultas SQL directamente al servidor CAS. Al especificar el parámetro 'showStages=true', es posible obtener un informe detallado del plan de ejecución de la consulta. Este informe desglosa la ejecución en varias etapas, mostrando los métodos utilizados (por ejemplo, clasificación, agregación, barrido secuencial), la consulta SQL generada para cada etapa (stage query), el número de hilos de acceso a datos por worker, las tablas de entrada con sus propiedades (número de filas, columnas, particionamiento), y los tiempos de ejecución para cada etapa y para la consulta global. Esta información es crucial para la optimización de consultas y la comprensión del comportamiento de FedSQL en la arquitectura distribuida de CAS.
Análisis de datos

Type : CREACIÓN_INTERNA


Los ejemplos utilizan una tabla 'crimeCensus' creada internamente con un DATA Step y datos ficticios para simular el comportamiento descrito en la documentación.

1 Bloque de código
DATA STEP / FEDSQL.EXECDIRECT Data
Explicación :
Este ejemplo mínimo crea una tabla temporal 'crimeCensus' en CASUSER con datos ficticios. Luego, ejecuta una simple consulta FedSQL que cuenta el número de ocurrencias para cada 'primary_type' y ordena los resultados en orden descendente por conteo. El parámetro 'showStages' no se utiliza aquí para ilustrar el uso básico de la acción.
¡Copiado!
1DATA casuser.crimeCensus;
2 INFILE DATALINES dlm=';';
3 INPUT primary_type $ date :yymmdd10. community_area hardship_index per_capita_income;
4 FORMAT date yymmdd10.;
5 DATALINES;
6THEFT;2015-01-15;10;80;25000
7THEFT;2015-02-20;10;80;25000
8THEFT;2015-03-01;10;80;25000
9THEFT;2015-04-10;10;80;25000
10THEFT;2015-05-05;10;80;25000
11THEFT;2016-01-20;10;80;25000
12THEFT;2016-02-25;10;80;25000
13THEFT;2016-03-05;10;80;25000
14THEFT;2016-04-15;10;80;25000
15THEFT;2016-05-10;10;80;25000
16ASSAULT;2015-01-01;20;70;30000
17ASSAULT;2015-01-02;20;70;30000
18ASSAULT;2015-01-03;20;70;30000
19ASSAULT;2015-01-04;20;70;30000
20ASSAULT;2015-01-05;20;70;30000
21ROBBERY;2016-06-01;30;90;20000
22ROBBERY;2016-06-02;30;90;20000
23ROBBERY;2016-06-03;30;90;20000
24ROBBERY;2016-06-04;30;90;20000
25ROBBERY;2016-06-05;30;90;20000
26;
27RUN;
28 
29PROC CAS;
30 fedsql.execdirect
31 query="select primary_type, count(*) as count from crimeCensus group by primary_type order by count desc";
32QUIT;
33 
2 Bloque de código
FEDSQL.EXECDIRECT
Explicación :
Este ejemplo reproduce el caso de uso proporcionado en la documentación. Envía una consulta FedSQL más compleja, filtrando por tipo de crimen ('THEFT') y un rango de fechas, agrupando por varias variables y con una condición 'HAVING'. El parámetro 'showStages=true' está activado para obtener el detalle del plan de ejecución, mostrando las diferentes etapas del procesamiento de la consulta en el servidor CAS.
¡Copiado!
1PROC CAS;
2 fedsql.execdirect
3 showStages=true
4 query="select primary_type, count(*) as count, community_area,
5 hardship_index, per_capita_income from crimeCensus
6 where primary_type='THEFT'
7 and date between date '2015-01-01' and date'2016-01-01'
8 group by primary_type, community_area, hardship_index, per_capita_income
9 having count(*) >= 5
10 order by count desc";
11QUIT;
3 Bloque de código
FEDSQL.EXECDIRECT
Explicación :
Este ejemplo avanzado introduce una unión entre la tabla 'crimeCensus' (creada en el ejemplo 1) y una nueva tabla 'population_data'. La consulta calcula el número total de incidentes y la tasa de incidentes por cada 1000 habitantes para tipos de crímenes específicos en un período más largo. El uso de 'showStages=true' permite analizar el plan de ejecución para esta consulta multi-tabla, incluyendo cómo la unión y los cálculos complejos son gestionados por FedSQL en CAS.
¡Copiado!
1DATA casuser.population_data;
2 INFILE DATALINES dlm=';';
3 INPUT community_area $ population;
4 DATALINES;
510;50000
620;75000
730;60000
8;
9RUN;
10 
11PROC CAS;
12 fedsql.execdirect
13 showStages=true
14 query="select c.primary_type, count(c.*) as total_incidents,
15 c.community_area, p.population,
16 (count(c.*) * 1000 / p.population) as incidents_per_1000
17 from crimeCensus as c
18 join population_data as p
19 on c.community_area = p.community_area
20 where c.primary_type in ('THEFT', 'ROBBERY')
21 and c.date between date '2015-01-01' and date '2016-12-31'
22 group by c.primary_type, c.community_area, p.population
23 having count(c.*) >= 2
24 order by incidents_per_1000 desc";
25QUIT;
4 Bloque de código
FEDSQL.EXECDIRECT / TABLE.REPLICATE
Explicación :
Este ejemplo se centra en la integración Viya/CAS replicando la tabla 'crimeCensus' (para fines de demostración, la tabla se recrea primero si es necesario) en la memoria del servidor CAS usando la acción 'table.replicate'. La replicación puede mejorar el rendimiento para tablas pequeñas a las que se accede con frecuencia. Luego, se ejecuta una consulta FedSQL en la tabla replicada con 'showStages=true' para observar cómo el plan de ejecución aprovecha la tabla replicada (por ejemplo, 'Replicated to one worker' en la salida del plan), lo que puede mostrar un tiempo de acceso a datos más eficiente.
¡Copiado!
1PROC CAS;
2 /* Créer la table crimeCensus si elle n'existe pas déjà (dupliqué pour l'autonomie) */
3 DATA casuser.crimeCensus;
4 INFILE DATALINES dlm=';';
5 INPUT primary_type $ date :yymmdd10. community_area hardship_index per_capita_income;
6 FORMAT date yymmdd10.;
7 DATALINES;
8THEFT;2015-01-15;10;80;25000
9THEFT;2015-02-20;10;80;25000
10THEFT;2015-03-01;10;80;25000
11THEFT;2015-04-10;10;80;25000
12THEFT;2015-05-05;10;80;25000
13THEFT;2016-01-20;10;80;25000
14THEFT;2016-02-25;10;80;25000
15THEFT;2016-03-05;10;80;25000
16THEFT;2016-04-15;10;80;25000
17THEFT;2016-05-10;10;80;25000
18ASSAULT;2015-01-01;20;70;30000
19ASSAULT;2015-01-02;20;70;30000
20ASSAULT;2015-01-03;20;70;30000
21ASSAULT;2015-01-04;20;70;30000
22ASSAULT;2015-01-05;20;70;30000
23ROBBERY;2016-06-01;30;90;20000
24ROBBERY;2016-06-02;30;90;20000
25ROBBERY;2016-06-03;30;90;20000
26ROBBERY;2016-06-04;30;90;20000
27ROBBERY;2016-06-05;30;90;20000
28;
29 RUN;
30 
31 /* Répliquer la table crimeCensus dans CAS pour une meilleure performance */
32 TABLE.replicate /
33 name='crimeCensus',
34 caslib='casuser',
35 target='crimeCensus_replicated',
36 numreplicas=1; /* Répliquer sur un seul worker pour une petite table */
37 
38 /* Exécuter une requête FedSQL sur la table répliquée avec showStages */
39 fedsql.execdirect
40 showStages=true
41 query="select primary_type, count(*) as count from crimeCensus_replicated group by primary_type order by count desc";
42QUIT;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved