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.