ETL, Transformación de datos CAS

Unir tablas con fedSql.execDirect

Este código también está disponible en: Deutsch English
Nivel de dificultad
Principiante
Publicado el :
La acción `fedSql.execDirect` es una herramienta potente en SAS© Viya para ejecutar consultas SQL directamente sobre los datos cargados en Cloud Analytic Services (CAS). Este ejemplo detalla el proceso de carga de datos brutos, su unión utilizando cláusulas SQL estándar (`JOIN`, `USING`), y luego la aplicación de filtrado (`WHERE`), agregación (`GROUP BY`, `HAVING`) y ordenación (`ORDER BY`) para analizar los datos. Se destaca la capacidad de crear nuevas tablas en memoria CAS a partir de consultas complejas, así como la interacción con otras acciones de tabla CAS como `table.fetch`.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados internamente (datalines) para las tablas 'crime_data' y 'census_data' con el fin de que cada bloque de código sea autónomo y ejecutable.

1 Bloque de código
DATA STEP / FEDSQL.EXECDIRECT Data
Explicación :
Este código crea dos tablas CAS temporales, `crime_data` y `census_data`, a partir de datos en línea. Luego utiliza `fedsql.execdirect` para realizar una unión (`JOIN`) en la columna `community_area` para combinar la información de ambas tablas en una nueva tabla llamada `CrimeCensusBasique`. Finalmente, `table.fetch` se usa para mostrar las primeras cinco filas de la tabla resultante.
¡Copiado!
1* Connexion à CAS et chargement des données de démonstration;
2options cas convenient;
3caslib _all_ assign;
4 
5* Création de données de démonstration pour CRIME;
6DATA mycas.crime_data (promote=yes);
7 INFILE DATALINES dsd;
8 INPUT primary_type $ date :yymmdd10. community_area arrest $;
9 FORMAT date yymmdd10.;
10 DATALINES;
11"THEFT",2015-03-15,10,"FALSE"
12"BATTERY",2015-06-20,10,"TRUE"
13"THEFT",2015-04-01,15,"FALSE"
14"ASSAULT",2016-01-10,20,"TRUE"
15"THEFT",2015-08-01,10,"FALSE"
16"THEFT",2015-09-05,15,"TRUE"
17"THEFT",2015-10-10,20,"FALSE"
18"BATTERY",2016-02-01,10,"TRUE"
19"THEFT",2015-11-20,15,"FALSE"
20"ASSAULT",2015-12-25,20,"TRUE"
21"THEFT",2016-01-05,10,"FALSE"
22"THEFT",2016-01-15,10,"FALSE"
23"THEFT",2016-01-20,10,"FALSE"
24"THEFT",2016-01-25,10,"FALSE"
25"THEFT",2016-01-30,10,"FALSE"
26"THEFT",2016-01-01,15,"FALSE"
27"THEFT",2016-01-02,15,"FALSE"
28"THEFT",2016-01-03,15,"FALSE"
29"THEFT",2016-01-04,15,"FALSE"
30"THEFT",2016-01-05,15,"FALSE"
31;
32RUN;
33 
34* Création de données de démonstration pour CENSUS;
35DATA mycas.census_data (promote=yes);
36 INFILE DATALINES dsd;
37 INPUT community_area hardship_index per_capita_income;
38 DATALINES;
3910,50,30000
4015,70,20000
4120,30,45000
4225,90,15000
43;
44RUN;
45 
46PROC CAS;
47 fedsql.execdirect /
48 query="CREATE TABLE CrimeCensusBasique {options replace=true} AS
49 SELECT T1.primary_type, T1.date, T1.arrest,
50 T2.hardship_index, T2.per_capita_income, T1.community_area
51 FROM crime_data AS T1 JOIN census_data AS T2
52 ON T1.community_area = T2.community_area";
53RUN;
54 
55PROC CAS;
56 TABLE.fetch /
57 TABLE="CrimeCensusBasique"
58 to=5;
59RUN;
2 Bloque de código
FEDSQL.EXECDIRECT
Explicación :
Este ejemplo extiende el caso base filtrando los datos de `CrimeCensusBasique` para los crímenes de tipo 'THEFT' durante un período específico. Luego agrega los resultados por tipo de crimen, área comunitaria, índice de dificultad e ingreso per cápita, contando el número de crímenes. Solo se incluyen los grupos con al menos 2 crímenes, y los resultados se ordenan por el número de crímenes de forma descendente.
¡Copiado!
1* Les données de démonstration et la table CrimeCensusBasique sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="SELECT primary_type, COUNT(*) AS count_crimes,
6 community_area, hardship_index, per_capita_income
7 FROM CrimeCensusBasique
8 WHERE primary_type = 'THEFT' AND date BETWEEN '2015-01-01' AND '2016-12-31'
9 GROUP BY primary_type, community_area, hardship_index, per_capita_income
10 HAVING COUNT(*) >= 2
11 ORDER BY primary_type DESC";
12RUN;
3 Bloque de código
FEDSQL.EXECDIRECT
Explicación :
Este código demuestra una consulta FedSQL más avanzada. Une las tablas `crime_data` y `census_data` aplicando una condición de filtro en `community_area` basada en una subconsulta: solo se incluyen las áreas comunitarias con un `hardship_index` superior a 60. Además, se crea una nueva columna `IncomeCategory` utilizando una instrucción `CASE` para clasificar las áreas según su ingreso per cápita. `table.fetch` se usa para visualizar el resultado.
¡Copiado!
1* Les données de démonstration sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="CREATE TABLE CrimeCensusAvance {options replace=true} AS
6 SELECT T1.primary_type, T1.date, T1.arrest,
7 T2.hardship_index, T2.per_capita_income, T1.community_area,
8 CASE WHEN T2.per_capita_income > 35000 THEN 'High Income Area'
9 ELSE 'Low Income Area'
10 END AS IncomeCategory
11 FROM crime_data AS T1 JOIN census_data AS T2
12 ON T1.community_area = T2.community_area
13 WHERE T1.community_area IN (SELECT community_area FROM census_data WHERE hardship_index > 60)";
14RUN;
15 
16PROC CAS;
17 TABLE.fetch /
18 TABLE="CrimeCensusAvance"
19 to=5;
20RUN;
4 Bloque de código
FEDSQL.EXECDIRECT / TABLE.FETCH
Explicación :
Este ejemplo destaca las capacidades de procesamiento en memoria de CAS creando directamente una tabla resumen (`SummaryCAS`) a través de `FEDSQL.EXECDIRECT`. La consulta calcula el número total de crímenes y el ingreso promedio por área comunitaria. Luego, la acción `TABLE.FETCH` se utiliza para recuperar y mostrar las primeras 10 filas de esta nueva tabla, con una clasificación personalizada, demostrando una integración fluida entre FedSQL y las acciones de tabla CAS para el análisis de resultados.
¡Copiado!
1* Les données de démonstration sont créées dans l'exemple 1;
2 
3PROC CAS;
4 fedsql.execdirect /
5 query="CREATE TABLE SummaryCAS {options replace=true} AS
6 SELECT primary_type, community_area, COUNT(*) AS TotalCrimes,
7 AVG(per_capita_income) AS AvgIncome
8 FROM crime_data AS T1 JOIN census_data AS T2
9 ON T1.community_area = T2.community_area
10 GROUP BY primary_type, community_area
11 HAVING TotalCrimes >= 2
12 ORDER BY TotalCrimes DESC, AvgIncome ASC";
13RUN;
14 
15* Afficher les 10 premières lignes de la table SummaryCAS, triées;
16PROC CAS;
17 TABLE.fetch /
18 TABLE="SummaryCAS"
19 to=10
20 sortby={{name="TotalCrimes", order="descending"}, {name="AvgIncome", order="ascending"}};
21RUN;
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.

Documentación relacionada

Aucune documentation spécifique pour cette catégorie.